
今年上半年接了一个牛场喂料机的改造项目甲方是一家中等规模的奶牛养殖场之前那套固定式TMR喂料机完全是人工操作夜班工人守着出料口手动开绞龙、盯称重、加精料配方全凭手感。结果就是饲料配比忽高忽低牛的采食量和产奶量跟着波动饲料损耗也不小。老板想上监控我到现场转了一圈后发现这台设备需要的其实是一套能自动跑、能远程看、能留记录的轻量级监控系统。最后定下来的方案是西门子S7-200 SMART PLC加MCGS 7.7触摸屏同时做了一套可以独立仿真运行的组态工程。PLC负责喂料流程控制和信号采集MCGS触摸屏做现场操作界面电脑端还能直接模拟运行整个画面不用接真实硬件就能先给甲方看效果。这套组合在中小型养殖设备里非常常见成本可控、资料也多但真正落地时会踩到不少通讯和仿真的坑。这篇文章就把这次改造从需求梳理、硬件选型、PLC程序组织、MCGS组态到联机调试的完整过程记录下来代码和地址规划都是可以直接参考的。1. 现场需求梳理这台喂料机改造到底差在哪1.1 原来的手工喂料流程和要补的课这台固定式喂料机的结构并不复杂精料仓在楼上绞龙输送电机负责把精料送出来落到称重斗里称重斗下方是出料门旁边还有一台搅拌电机。原来工人喂料的流程是先手动启动绞龙眼睛看着称重仪表数字差不多了就按停然后开搅拌、开卸料门把料倒进去。听起来简单但在现场实际干活就知道问题在哪。首先是超调。绞龙停下来之后管道里残留的料还会继续落到称重斗里工人靠眼睛盯着很难预判提前量经常一停机重量就超了。其次是记录基本为零每天喂了多少、每个批次误差多大全凭交接班嘴上说。还有就是夜班人手少一个工人要看好几台设备喂料过程中如果绞龙堵转或者料仓缺料机器咔咔响半天都没人知道。所以甲方提的需求其实很明确喂料过程要能自动闭环操作工只负责设定配方重量和按启动键要能看到设备状态哪台电机在转、当前重量多少、有没有报警最好还能把每个批次的喂料数据留下来方便管理者看。预算方面老板也直说了不要整那些大几千上万的高级上位机简单实用就行。1.2 监控系统的三条主线自动流程、报警状态、数据记录我把这次监控系统需要做的事拆成三条主线来设计。第一条是自动喂料流程。从启动信号开始系统自动开启绞龙称重斗重量到达设定值时停止供料接着自动启动搅拌电机搅拌完成后再给出料门信号把料放出。放料完成后系统自动回到待机状态等待下一批次。第二条是状态监控和报警。PLC要一直采集绞龙电机接触器的反馈信号、称重斗重量、料仓料位开关的状态任何异常都要在触摸屏上弹出报警画面同时输出声光报警。喂料现场粉尘大有些传感器会被料掩埋灯光和声音报警缺一不可。第三条是数据记录。触摸屏上要能显示当前重量、历史批次、报警记录这样管理者可以回看出当天的喂料情况而不是只靠工人说。1.3 为什么坚持用PLC加组态软件而不是专用喂料控制器市面上也有那种专门给畜牧喂料用的多路控制器功能看起来很对口但我现场评估之后还是决定用PLC加组态。原因很简单专用控制器的问题在封闭输入输出点数是固定的以后想加一个料位开关或者改成变频调速就卡壳了。PLC方案的点位可以灵活扩展触摸屏画面也可以随时改甲方后期改需求我们不用换硬件。S7-200 SMART本身的定位就是小型经济型PLC在这类设备里非常常见现场电工多多少少接触过。MCGS 7.7组态软件做触摸屏界面是老搭档了驱动支持很全虽然高端功能比不上WinCC但牛场喂料机这种场景绰绰有余。这套组合下来的硬件成本比买专用控制器贵不了太多但开放性和后期可维护性完全不是一个量级。2. 硬件方案与通讯拓扑S7-200 SMART和MCGS 7.7怎么连起来2.1 选型思路S7-200 SMART加MCGS组合的几个现实优点先说结论这套组合最大的优势是省心。S7-200 SMART自带一个以太网口MCGS 7.7触摸屏也绝大多数带网口两边一插网线就能建立通讯不需要额外的通讯模块或者转换器。对比传统的PLC加触摸屏用RS485串口连接以太网在速度和稳定性上都更有优势尤其是画面里有实时曲线、数据刷新频率要求高的时候。成本上也确实合适。哪怕用CPU SR30加上模拟量扩展模块和一块MCGS 7.7触摸屏整体价格仍然在小型设备的合理预算范围内。如果用S7-1200加精简面板光硬件成本可能就翻倍了这套设备未必需要那么高的性能。编程软件方面Micro/WIN SMART官方免费不用破解不用授权对做项目的人来说省了很多事。MCGS 7.7的组态环境网上学习资料也很多市场上找会做MCGS的工程师比找会做进口组态软件的容易得多后面甲方如果要改画面找人维护也方便。2.2 PLC机型、扩展模块与I/O分配这台喂料机的点位数量不多我最终选的是CPU SR30自带18点数字量输入和12点继电器输出。继电器输出对于控制接触器线圈完全够用而且比晶体管输出更抗造现场工人偶尔接错线也不容易烧输出点。模拟量方面称重斗上装了一套称重传感器加变送器输出4到20mA信号PLC这边加了一个EM AE01模拟量输入模块来采集。选EM AE01的考虑是它的分辨率匹配S7-200 SMART模拟量通道0到27648的整数范围后续扩展第二路模拟量也方便。下面是这台设备的I/O分配表我在设计阶段就固定下来后面编程和组态都用这套地址通道地址信号说明信号类型DII0.0急停按钮常闭输入DII0.1自动启动按钮常开输入DII0.2手动/自动切换常开输入DII0.3绞龙电机接触器反馈常开输入DII0.4搅拌电机接触器反馈常开输入DII0.5出料门打开到位常开输入DII0.6精料仓料位开关高位常开输入DII0.7称重斗接近开关常开输入DOQ0.0绞龙电机接触器继电器输出DOQ0.1搅拌电机接触器继电器输出DOQ0.2出料门电磁阀继电器输出DOQ0.3声光报警器继电器输出AIAIW0称重变送器4-20mA模拟量输入现场设备反馈信号全部接到PLC的输入点电机启停指令从输出点直接驱动接触器线圈。控制柜到喂料机本体的距离大概有三十多米中间这段线缆敷设时我特意把动力线跟信号线分开了避免绞龙启动瞬间的电流冲击干扰称重信号。2.3 通讯架构与IP规划这套系统的通讯架构很简洁PLC网口通过网线接到工业交换机MCGS触摸屏也接到同一个交换机PLC和触摸屏之间走以太网通讯驱动程序选择MCGS里的西门子_S7_200_SMART。IP地址规划我习惯用固定的私有网段PLC设为192.168.1.20触摸屏设为192.168.1.30交换机地址空缺或者设成192.168.1.10。如果现场没有交换机PLC和触摸屏用一根网线直连也能通但直连时两边IP必须严格在同一网段。项目后期甲方如果想把数据上传到办公室电脑还可以在这个交换机上再接电脑通过MCGS的以太网功能做远程监视。选以太网而不是RS485串口还有一个重要原因是S7-200 SMART的485口只能走PPI协议或者Modbus RTUMCGS虽然也支持但串口通讯的波特率、数据位、停止位、奇偶校验都要逐项匹配任何一个参数不对都通讯不上。以太网就简单多了只要IP能ping通驱动选对基本十有八九能通。3. S7-200 SMART侧的程序组织喂料流程、称重滤波和V区约定3.1 喂料自动流程的状态机设计PLC程序我用Micro/WIN SMART编写整段程序虽然没有多么高深但逻辑组织一定要清晰方便后来者维护。喂料流程我按状态机的思路来写系统处于什么状态、满足什么条件跳转到下一个状态全部明确固定。整个自动流程划分成四步待机状态无任何输出等待启动信号。自动启动按钮按下去之后如果称重斗重量小于设定值系统进入快速给料状态。快速给料状态Q0.0绞龙电机输出置位系统以最大速率向称重斗供料。此时PLC持续读取称重变送器的数值当重量达到目标重量减去提前量时进入慢速补料状态。慢速补料状态绞龙电机以点动方式运行每次转一点停一下让料的落入速度显著减慢方便在小流量下精确定位。当重量达到目标重量时停止喂料进入搅拌状态。搅拌与放料状态Q0.1搅拌电机启动搅拌时间到后Q0.2出料门打开称重斗内的料放出。放料完成信号回来后再延时几秒关闭出料门系统回到待机状态。这种状态机写法最大的好处是排查故障时非常直观触摸屏上也可以把当前状态显示出来现场工人一看就知道设备卡在哪一步。3.2 称重信号处理和双速补料逻辑称重变送器输出的4到20mA信号进入S7-200 SMART的模拟量通道后PLC读到的是一个0到27648之间的整数。比如变送器量程是0到2000公斤那么模拟量数值和实际重量是线性对应的我在PLC里用一个功能块做量程换算把0到27648映射成0.0到2000.0公斤实数。现场实际运行时绞龙落料冲击会让称重斗剧烈晃动模拟量数值跳得很厉害。如果直接用这个毛糙的数值做阈值判断很容易误触发。所以我在程序里加了一个数字滤波连续采样五次去掉最大值和最小值取中间三次的平均值作为当前重量。这个办法虽然简单但在喂料机这种低速称重场景里非常可靠。双速补料则是解决超调问题的关键。绞龙停止后管道里还有残余料会继续落到称重斗如果一直高速供料到目标重量再停机实际重量一定会超出。我的做法是把一个批次的给料分成两个阶段前96%左右的量用快速给料跑剩下4%左右用点动慢速补料。点动一次大概落下几百克工人可以根据现场料的流动性在触摸屏上调整点动时间。这个功能客户反映非常好用之前手工操作时的超调问题基本解决了。3.3 V区寄存器分配表给MCGS留好的数据交换区PLC和MCGS之间通信用的是什么本质上就是PLC内存区域里的数据。S7-200 SMART的V区是掉电保持的数据块我在这里划出一片固定区域作为与触摸屏交换的数据区编程和组态都用同一张地址表一目了然。PLC地址数据类型方向含义VW016位整数读写配方目标重量公斤VW216位整数读写慢速补料点动时间毫秒VD432位浮点只读当前称重斗重量公斤VB8字节只读状态字0待机/1快给/2慢给/3搅拌/4放料VB9字节读写命令字0无/1启动/2急停/3清零VW1016位整数只读批次计数VW1216位整数只读本次喂料偏差克VB20字节只读报警字bit0堵转/bit1料位低/bit2通讯异常这里有一个关键细节V区字地址建议使用偶数地址对齐。S7-200 SMART的VW和VD访问如果落在奇数地址轻则数据错乱重则直接运行错误。所以我从VW0开始按字节连续紧凑排列避免出现跨字、跨双字问题。配方参数放在V区之后别忘了在Micro/WIN SMART的系统块里设置V区的断电保持范围。如果不做这一步PLC断电再上电后配方就清零了甲方肯定不能接受。我把VW0到VB20这一段全部设成掉电保持区。4. MCGS 7.7组态里的关键操作驱动、变量映射和画面4.1 设备窗口添加驱动通用TCP/IP父设备加西门子SMART子设备MCGS 7.7的工程结构分为主控窗口、设备窗口、用户窗口、实时数据库和运行策略设备窗口是整个通讯的最关键环节。我的操作步骤是先打开设备窗口在设备工具箱里找到通用TCP/IP父设备双击添加然后在这个父设备下面添加子设备西门子_S7_200_SMART。父设备负责以太网链路参数IP地址填PLC的192.168.1.20端口号保持S7协议默认的102。子设备里配置PLC的CPU型号和通讯参数。这样分层的好处是协议处理和网络传输分离排故障时能快速锁定问题到底出在网络层还是驱动层。添加完设备后要在子设备的增加设备通道里建立与PLC寄存器对应的通道。比如目标重量对应VW0通道类型选读/写数据类型选16位无符号整数。当前重量对应VD4这里要特别注意因为S7-200 SMART的32位浮点数在MCGS里虽然支持但字节顺序如果不匹配读出来的数据完全是乱的。给一个最常用的通道配置表供参考设备通道数据类型PLC地址对应实时数据库变量目标重量16位无符号VW0目标重量点动时间16位无符号VW2点动时间当前重量32位浮点VD4当前重量状态字8位无符号VB8设备状态命令字8位无符号VB9控制命令批次计数16位无符号VW10批次计数报警字8位无符号VB20报警字4.2 变量映射与字节顺序那些坑设备通道建好之后要在实时数据库里把这些通道连接成变量。每个变量有名字、类型、初始值还要在设备通道的属性里绑定对应变量。这一步看似简单但字节顺序问题在联调时最容易炸。S7-200 SMART的CPU内部数据存储遵循大端模式也就是高字节在前低字节在后。MCGS 7.7在读32位浮点数时不同驱动版本的字节解析方式可能不一样。我第一次调试时当前重量死活显示成几千万的荒唐数字后来发现在设备通道的属性里把32位数据是否低字在前这个选项改成匹配PLC大端格式问题才解决。如果型号比较老的驱动没有这个选项更稳妥的做法是PLC就别发浮点数了直接把重量整数发过来。例如在PLC里把当前重量乘以10取整存入VW30MCGS读到一个16位整数再在画面里除以10显示。这样绕开了浮点字节序的坑精度对喂料机也完全够了。这个经验后来我用在了好几个项目上凡是涉及模拟量读取并且通讯数据老不对劲的时候优先考虑用整数传输。4.3 画面、配方和报警界面怎么组织才实用MCGS的画面设计我总结的原则是主画面放工艺流程一屏看清全局配方画面放在二级窗口改参数的人不用天天进。触摸屏尺寸一般是10英寸左右画面太密工人看着累。主画面我做了喂料机的侧视流程图上面是料仓中间是绞龙下面是称重斗。用MCGS的图元动画功能把绞龙的旋转效果绑定到运行状态变量上把称重斗里的物料填充高度绑定到当前重量变量上。变量一变画面自动动起来。旁边用大字显示当前重量、目标重量、状态文字。工人的操作按钮只有两个一个启动一个急停放在画面右下角方便戴手套时也容易按。配方画面里放了几个输入框分别绑定目标重量、点动时间、提前量这些配方变量。这个窗口要设权限普通操作员只能看不能改管理员或车间主任有修改权限。MCGS的用户权限管理在工程里定义好用户组和密码操作员组的权限只勾选操作管理组权限勾选修改参数。报警画面我用MCGS的报警显示构件把报警字变量的每一位都定义成一条独立报警堵转、料位低、称重超差、通讯异常。报警触发后声音提示加红色闪烁。历史记录里能看到报警发生的准确时间和恢复时间这在处理质量追溯问题的时候很有用。5. 独立仿真到底怎么用没硬件也把项目跑起来5.1 MCGS 7.7模拟运行的玩法这里说的独立仿真指的是MCGS组态工程在电脑上不依赖真实触摸屏和真实PLC直接进入模拟运行状态来验证画面和逻辑。MCGS 7.7的工具栏里有一个进入运行环境的按钮点击后工程会以运行模式启动界面上所有动画、数据刷新、用户登录都会实时跑起来唯一的区别是设备通道可能没有真实数据源。在没有真实PLC的情况下有两种模拟数据的方式。一种是在设备窗口的属性里勾选设备模拟运行选项MCGS会对所有通道自动生成模拟数值。另一种更实用用运行策略里的定时器脚本每隔一定时间给当前重量变量增加一个随机数模拟称重斗称量过程中重量逐渐上升的动画效果。我这次做牛场喂料机画面时就是用脚本模拟当前重量从0涨到1000公斤再回落的过程把整个喂料流程的画面变化、进度条、报警触发都在办公室里跑给甲方看了一遍。工程师在现场调试前就把画面的配色、字号、按钮位置根据甲方意见改好了等真正到现场接上PLC界面上基本不用再大调。5.2 PLC程序的软件仿真能做到什么程度经常有人问S7-200 SMART能不能像S7-1200那样用PLCSIM仿真这里要说明一下STEP 7-Micro/WIN SMART官方并没有提供类似S7-1200的PLCSIM仿真模块。网上能找到的老版S7-200仿真器对S7-200 SMART指令集的支持并不完整我试过一些简单的位逻辑和定时器仿真没问题但涉及模拟量转换、通讯中断处理的时候仿真结果跟真机表现经常对不上。所以我的实际做法是分层仿真PLC程序逻辑自己在软件里反复检查把容易出错的地方先排除掉整个画面和操作逻辑用MCGS独立仿真来验证等到现场有了真实PLC再做PLC和MCGS的联合调试。这三步走下来现场调试时间能压缩一大半。另外如果甲方希望出厂前看个完整演示还有一种稳妥的折中方案用一台已经刷好程序的S7-200 SMART放在办公室当真机给PLC供上24V电源MCGS电脑通过以太网连接这台PLC做联调。这种半仿真方式虽然不是全虚拟但通讯链路的验证效果和现场完全一致比纯软件仿真靠谱得多。5.3 用仿真版本给甲方演示的小技巧我养成了一个习惯工程保存在正式交付版本之外再另存一份仿真演示版本。仿真版本里加一个模拟数据生成的脚本配合MCGS的定时器策略让整个画面在没有任何硬件的情况下自己动起来。这样出差跟甲方谈新项目时打开笔记本就能演示上一套设备的画面效果客户直观理解了流程沟通成本明显降低。仿真演示版本和正式版本之间要注意区分不要搞混。我在工程名字后面加后缀_SIM表示仿真版正式版的名字不加。而且仿真版的脚本在正式交付时一定要删掉否则到了现场模拟数据会和真实PLC数据打架画面跳动得很诡异。这类问题在现场见过不止一次都是因为仿真脚本忘记移除。6. 联机调试实录从通讯失败到稳定运行6.1 按顺序排查通讯问题的完整链路到了牛场现场我把PLC、触摸屏、交换机接好通电之后第一件事不是看画面而是先确认通讯链路。根据我的经验通讯不上绝大多数不是驱动配置的问题而是物理链路和IP地址的问题所以排查顺序很有讲究。第一步看物理链路交换机上对应PLC和触摸屏的端口指示灯亮不亮亮的话基本说明网线物理层是通的。注意网线要至少是超五类线现场环境有变频器干扰劣质网线会莫名丢包。第二步看IP地址触摸屏的系统设置里查看本机IPPLC的IP一般通过编程在线连接也能查到两个IP必须在同一网段子网掩码一致。第三步看PLC的远程访问设置S7-200 SMART的CPU属性里有一个允许远程访问的选项如果没勾选外部设备连不上。第四步才看MCGS驱动配置父设备IP有没有填错、子设备选型有没有选成S7-200老型号或者S7-300这些驱动虽然都很像但协议并不兼容。我处理过的通讯故障里最常见的就是IP不在同一网段其次是PLC属性里没勾选允许远程访问。这两个问题用一根网线、一台笔记本装个IP扫描工具就能定位。故障现象可能原因排查方法MCGS设备窗口红色报警父设备IP填错或PLC未通电用笔记本ping PLC的IP地址ping不通PLCPLC与触摸屏IP不在同一网段查看双方IP和子网掩码ping通但通讯还是失败PLC未勾选允许远程访问用编程软件检查CPU属性通讯时断时续网线质量差或受变频器干扰更换带屏蔽层的成品网线数据全部为0通道地址对应错误核对V区地址映射表顺带说一句热搜词里那个RS485通讯提示传输格式不正确的问题我在别的项目里碰到过现象是MCGS串口驱动连接PLC时报传输格式错误。这种问题一般指向串口参数不匹配波特率、数据位、停止位、校验方式里有一项和PLC侧不一致或者从站地址填错。解法就是对照PLC的通讯设置逐项核对尤其注意西门子的PPI协议默认波特率是9600而很多国产触摸屏默认是19200。虽然这次项目用的以太网不存在这个坑但如果你用S7-200 SMART的485口组Modbus RTU这个经验同样适用。6.2 数据错乱、字节序、地址边界这些暗坑通讯通了不代表万事大吉数据错乱才真正烧脑。联调时我遇到过一个现象触摸屏上当前重量一会在2000多公斤跳一会变成负数但PLC程序监控的数值明明是正常的。排查后确认问题出在VD4浮点数在MCGS驱动里的字节顺序解析上。这个坑在4.2节详细说过最终方案是用整数传输绕开。另一个容易忽略的坑是地址边界对齐。西门子的VW、VD起始地址必须是偶数这是CPU的寻址规则。我在设计V区分配表的时候就已经把所有字变量、双字变量安排到偶数地址上去了才避免了后续联调时出现数据互相踩踏的问题。如果你拿到一个别人写的程序发现某些变量地址是VW1、VW3这种奇数地址大概率会引起数据混乱建议直接改地址。还有一个常见问题是通道类型不匹配。PLC里VB9是8位字节MCGS通道配置却选成了16位整数结果命令字和状态字在触摸屏上显示的值怎么都不对。这类问题通常靠逐条核对地址映射表就能查出来没什么技术含量但很耗耐心。我的办法是把第三章那张表格打印出来组态和PLC编程各拿一份双方对着表检查效率会高很多。6.3 现场抗干扰屏蔽、接地和布线牛场喂料机环境的干扰源主要是两台电机和可能存在的变频器。绞龙电机启动瞬间的电流冲击会让同一配电柜里的PLC模拟量读数发生几十公斤的跳动。最初用默认工厂参数调试时称重数值在电机启动瞬间会猛跳一下虽然滤波程序过滤了一部分但幅度太大时还是会误触发。解决办法有三层。第一层是硬件隔离称重变送器用单独的24V开关电源供电不要和电机控制回路共用电源模拟量信号线用双绞屏蔽线屏蔽层在PLC柜内单端接地。第二层是布线把模拟量线和动力线在桥架里分开敷设间距至少20厘米避免强电对弱电的感应耦合。第三层是程序滤波我在采样滤波的基础上又加了一个变化率限制单次采样变化超过每周期5公斤的数值一律丢弃这个逻辑在干扰大的时候非常管用。如果你用的是带变频器的方案还要注意变频器和PLC之间要共地良好变频器的载波频率调低一点能减少高频干扰。这台设备目前没有用变频器绞龙是直接工频启停但如果后期甲方要改成变频调速接线和干扰处理一定要提前规划好。6.4 跑了一个月后的现场反馈项目交付一个多月后我回访了一次。甲方的工人反馈之前最担心的自动投料会不会不准的问题基本没有出现慢速补料投下来的批次误差可以稳定控制在正负0.5公斤以内比手工操作强太多。管理者在触摸屏上查批次记录和报警记录终于能说清楚每天到底喂了多少料、哪台设备出过什么故障。夜班工人确实轻松了启动按下去之后机器自己跑完整个流程快到尾声时声光报警提醒一下工人过去看看放料情况就行。甲方老板还说下一步想把三台喂料机的数据都集中到一个办公室监控画面上这正好是用PLC加组态软件方案的扩展潜力所在——在现有S7-200 SMART和MCGS架构下多台设备组网只是加交换机、加数据库点数的事不需要换核心控制器。我自己的体会是这种中小型畜牧设备的监控改造最忌讳一上来就堆高配置。S7-200 SMART加MCGS 7.7这套组合恰好卡在够用、好维护、低成本的平衡点上。无论你打算用它做个牛场喂料机还是类似的饲料线、烘干线、搅拌站项目上面这套从需求分析、寄存器规划到MCGS独立仿真的工作流都可以直接平移过去。照着V区分配表把地址管好把通讯链路按顺序排查清楚这个项目就成功了一大半。