
做自动加料机这套控制系统我把西门子S7-200和MCGS触摸屏的组合从头到尾捋了一遍从IO分配、梯形图程序到组态画面再到现场接线和调试中间踩了不少坑。这篇内容就是我实际做过之后整理出来的完整记录不光是给个程序就算完事而是把每一个逻辑为什么这么写、线为什么要这么接、触摸屏变量怎么对应PLC地址都讲清楚。如果你正在做PLC毕业设计或者厂里要改造一台小型加料设备这个项目案例可以直接拿来参考照着抄作业都行。1. 项目概述与整体设计思路1.1 工艺需求拆解自动加料机到底要控什么先说清楚这套设备是干什么的。自动加料机常见于小型配料、包装、食品加工和化工混料环节典型结构是一个料斗、一套给料机构螺旋给料机或振动给料盘、一个称重计量斗以及一个卸料门。工艺上最核心的动作就三个把料从料斗送进称重斗等料到位后停止给料然后打开卸料门把这一批料放到下游设备里放完关门接着开始下一批。看起来简单但真正做控制方案的时候会发现里面有几个问题必须处理一是给料不能凭感觉要有料位检测或者称重信号来判断“加没加够”二是不能一批接着一批无脑循环得能设批次数量到了自动停三是现场工人可能随时想切手动单独点动给料机和卸料阀方便检修和应急。这些需求串起来控制系统至少要有开关量输入输出、定时控制、计数控制、手动自动切换还要有一个能显示状态和操作的人机界面。我把这套设备的IO点梳理了一下输入大概需要启动、停止、料位上下限、急停、热继保护、手动自动切换这些输出就是给料电机、卸料阀、运行指示灯、报警灯和蜂鸣器。后面做具体分配表的时候你会发现S7-200 CPU224的24点IO容量对这个项目来说刚刚好不多不少。1.2 控制方案选型为什么是S7-200加MCGS而不是别的很多人在方案阶段会纠结这么简单一台设备用继电器回路不就行了或者上一块单片机甚至直接用变频器自带的简易逻辑都可以但各自有各自的麻烦。继电器回路逻辑简单但改一个动作顺序就要重新接线批次计数和定时多起来之后控制柜里全是中间继电器故障排查能让人崩溃。单片机成本低可这东西不是电气工人能随便维护的程序烧进去之后改了逻辑还得拆设备现场根本不可控。PLC加触摸屏是这个体量的设备最合理的方案。PLC负责逻辑控制抗干扰能力强、编程修改方便梯形图让电工也能看懂逻辑触摸屏负责操作和监控启动、停止、模式切换、批次设定、报警显示全在屏上完成省掉了满柜子的按钮指示灯。选S7-200有一个很现实的理由很多厂里已经有西门子PLC的备件、编程软件和会用的电工你选一个冷门的国产PLC就算性能再好甲方一句“没人会搞”就能毙掉方案。S7-200现在属于西门子的经典老款新项目如果预算允许我更推荐用S7-200 SMART以太网口调试方便得多。但这里有个关键点S7-200和S7-200 SMART在梯形图指令上几乎一致MCGS触摸屏也同时支持这两种PLC的驱动所以老项目维护和新项目开发这套思路完全通用。MCGS选它的原因也很直接组态简单驱动库里有现成的西门子S7-200 PPI驱动省掉自己写通讯协议的麻烦而且软件免费下载学习成本极低。2. IO分配与硬件接线2.1 完整IO分配表每个点位的地址、元件和信号特征IO分配是整个控制系统的地基地址编错了后面所有程序都是白写。我做的这套系统PLC选用CPU224 DC/DC/DC14点输入10点输出对我来说完全够用。分配表的每一项都要明确三件事地址、连接什么元件、这个信号在程序中代表什么状态。地址元件/信号说明I0.0启动按钮常开自动模式启动手动模式给料点动I0.1停止按钮常闭停止自动运行常闭接线保证断线时报故障I0.2手动/自动切换开关ON为自动OFF为手动I0.3料位下限开关料斗空信号ON表示可以进料I0.4料位上限开关料斗满信号ON表示给料到位I0.5卸料点动按钮常开手动模式下点动卸料阀I0.6急停按钮常闭硬件回路和程序双重保护I0.7热继电器触点常闭给料电机过载保护Q0.0给料电机接触器KM1控制螺旋给料机启停Q0.1卸料电磁阀YV1控制卸料门开关Q0.2运行指示灯自动运行状态指示Q0.3故障报警灯急停/过载报警指示Q0.4蜂鸣器报警声音提示这里有一个很多人容易忽略的点停止按钮和急停按钮我全部选了常闭触点。原因很简单常闭触点在线断掉或者按钮线脱落的时候PLC检测到的是断开信号系统会按停止/急停处理这就是失效安全原则。如果你用了常开触点线断了系统完全不知道该停的时候停不下来那就是严重事故隐患。这一条无论做任何设备都适用。2.2 接线图绘制要点输入公共端、传感器类型和输出隔离接线图我习惯按输入回路、输出回路、电源回路三条线去画。输入回路里S7-200的输入端子分两组1M和2M公共端。S7-200支持漏型和源型两种接法如果你用的传感器是NPN型把1M接到DC24V正极传感器输出信号线接对应I点传感器负极为公共端如果用的是PNP型公共端反过来接0V。实际项目里NPN型传感器最常用价格便宜、货源多我基本统一用NPN这样备件不用备两种。输出回路是接线图里的重灾区。CPU224的继电器输出触点容量是2A对于接触器线圈这种感性负载直接驱动不是不能用但寿命会明显缩短。我的做法是中间继电器过渡PLC输出Q0.0驱动中间继电器KA1再由KA1触点去控制接触器KM1线圈。这样做的理由很简单中间继电器触点损坏了换一个才几块钱PLC的输出继电器坏了就得拆模块换点成本和麻烦程度完全不是一个级别。感性负载的反向电动势一定不能忽视。接触器、电磁阀线圈在断电瞬间会产生高压反向电动势如果不做抑制轻则干扰PLC运行重则直接打坏输出触点。交流负载用RC阻容吸收并联在线圈两端直流负载就反向并联一个续流二极管选1N4007就行注意二极管方向反了会短路。电源回路上我给CPU和输入传感器用同一个DC24V开关电源供电输出回路的中间继电器线圈也一样。但急停按钮的接线有一个讲究急停要在硬件回路上直接串联接触器KM1的线圈不能只靠PLC程序里那个I0.6信号。程序跑飞、PLC死机的时候只有硬件回路能真正把电机停下来。很多出事故的设备就是这里图省事把急停只接到了PLC输入上。2.3 主回路与电机保护配置主回路的组成很简单断路器QF1做短路保护接触器KM1控制电机通断热继电器FR1做过载保护电机采用直接启动方式。这里热继电器的整定电流要按电机额定电流的1.1倍左右设置不要拍脑袋拧到最大整定了太大等于没保护。给料电机一般1.5kW以下选DZ47断路器加CJX2-0910接触器加NR2-25热继电器就是常见搭配如果你用的是变频器调速那主回路里还要加变频器PLC输出的启停信号应该是干接点接到变频器的数字量输入端。三相电机一定注意相序问题螺旋给料机反转的话料根本送不出去。如果现场出现过这个问题在调试记录里加一条“安装完成先点动确认转向”能省掉很多莫名其妙的问题。3. 梯形图程序设计带解释的每一步逻辑3.1 程序框架和存储区规划写梯形图之前先把存储区的用途规划好不然写一半就乱了。这是老程序员和新手的最大区别。我这套程序里M0区放系统控制标志M10区放自动流程步进标志V区放触摸屏需要的参数和计数器值。存储区用途M0.0自动运行标志M0.2手动给料中间变量M0.3手动卸料中间变量M1.0故障报警标志M10.0~M10.3自动流程步进寄存器T37加料超时保护30秒T38给料停止后稳定延时3秒T39卸料时间8秒C0批次计数VW0批次目标值触摸屏设定VW2当前完成批次S7-200的定时器T37用的是100ms时基所以定时30秒就是K3003秒就是K308秒就是K80这个换算不要搞错。计数器C0是加法计数计数到设定值后触点动作可以用来在达到批次目标后自动停止整个流程。3.2 启停回路与触摸屏启动/停止的脉冲处理先看最基础的启动停止回路。这段程序和继电器电路里的自锁回路是一样的逻辑但有几个细节值得单独说。Network 1 自动运行自锁 LD I0.0 // 物理启动按钮 O M0.0 // 运行标志自锁 AN I0.1 // 物理停止按钮常闭 AN I0.6 // 急停按钮常闭 AN M1.0 // 有故障时不允许启动 M0.0 // 输出自动运行标志这里把I0.1和I0.6两个常闭触点串在回路里按下停止按钮或者急停按钮时输入从1变成0自锁回路断开M0.0变OFF。如果把常闭按钮在接线时误接成常开这个回路的逻辑就会反掉点一下启动它反而停机。程序写完后可以先在调试模式里监控I0.1的状态正常应该是常亮按下去变灭。触摸屏的启动和停止按钮我用M0.5和M0.6作为变量然后利用上升沿指令把它们变成脉冲避免MCGS按钮长时间置1导致逻辑卡死Network 2 触摸屏启动 LD M0.5 // MCGS启动按钮变量 EU // 上升沿检测只在按下瞬间导通一个扫描周期 S M0.0, 1 // 置位自动运行标志 Network 3 触摸屏停止 LD M0.6 // MCGS停止按钮变量 EU R M0.0, 1 // 复位自动运行标志为什么触摸屏按钮要做成脉冲处理这是我在现场踩过的坑。MCGS的开关型按钮如果设置成保持型按下后变量一直为1如果你在梯形图里用的是LD M0.5 O M0.0这种并联自锁结构那么停止按钮永远无法停掉系统因为M0.5只要为1M0.0就有一条导通路径。改成上升沿置复位以后M0.5即使保持1也只有按下的瞬间会产生动作。MCGS那边我建议用脚本做脉冲按下置位M0.5延时0.5秒复位M0.5这样最稳妥。3.3 自动加料步进流程用置位复位搭出状态机自动流程我用了四个步进标志位M10.0到M10.3每个步进标志位代表工序里的一个状态状态转移条件满足了就复位当前步、置位下一步。这种写法比用一堆自锁回路做流程清晰得多排查问题的时候直接看哪个M10.x位是1就知道设备卡在哪一步。Network 4 自动流程启动 LD M0.0 // 自动运行标志 EU // 启动瞬间触发的上升沿 S M10.0, 1 // 置位流程第一步等待进料 Network 5 步进第一状态等待料斗低位信号 LD M10.0 A I0.3 // 料位下限1表示料斗已空 R M10.0, 1 S M10.1, 1 // 料斗空了转到给料状态 Network 6 步进第二状态给料 LD M10.1 Q0.0 // 给料电机运行 LD M10.1 TON T37, K300 // 加料超时保护30秒 LD M10.1 A I0.4 // 料位上限料满 O T37 // 或超时保护 R M10.1, 1 S M10.2, 1 // 转入给料停止稳定状态给料这个状态里把Q0.0的输出直接放进步进标志的判断里这样只要不在M10.1状态给料电机就不会转。30秒超时是我按照给料机的输送能力算出来的正常加满一斗大概20秒如果30秒还没碰到高料位说明料斗可能堵了或者料位开关坏了这时候强制结束给料并进入卸料至少不会空转烧电机同时报警灯会亮提醒操作工过来检查。Network 7 步进第三状态给料停止稳定性延时 LD M10.2 TON T38, K30 // 停止给料后延时3秒 LD T38 R M10.2, 1 S M10.3, 1 // 延时完成转入卸料状态 Network 8 步进第四状态卸料 LD M10.3 Q0.1 // 卸料电磁阀得电卸料门打开 LD M10.3 TON T39, K80 // 卸料时间8秒 LD T39 R M10.3, 1 S M10.0, 1 // 回到第一步开始下一批次为什么要加M10.2这个稳定延时卸料门打开前给料机虽然停了但螺旋叶片里可能还有余料称重斗里的料位还没稳定如果立即开卸料门容易把没沉降好的料放走。实际调试的时候3秒够不够要看物料特性流动性好的粉末1秒就行有点粘性的物料我建议加大到5秒。批次计数加在卸料完成这个节点上每卸完一料C0加1。计数相关的比较在S7-200里可以直接用计数器触点和比较指令Network 9 批次计数 LD T39 // 卸料时间到 LD C0 CTU C0, 100 // C0为批次计数器目标值由触点比较控制 LD M0.0 AW C0, VW0 // VW0是触摸屏设定的批次目标 R M0.0, 1 // 达到设定批次数自动停止 R M10.0, 1 // 同时复位步进状态VW0里存的是批次目标值默认我写100触摸屏上可以修改。达到目标后M0.0会被复位整个流程自动停下来操作工只需要在屏上按启动重新开始新的一轮。这样用户不用天天盯着设备看有没有加够数省心很多。3.4 手动模式、报警逻辑和模拟量扩展思路手动模式的逻辑要放到自动流程之外两者互锁。我用手动自动切换开关I0.2来区分ON自动OFF手动。手动模式下启动按钮I0.0作为给料点动卸料点动按钮I0.5控制卸料阀。手动逻辑用M0.2和M0.3做中间变量最后统一驱动Q0.0和Q0.1避免双线圈输出问题。Network 10 手动给料 LDN I0.2 // 手动模式I0.2为0 A I0.0 // 按住启动按钮 AN I0.6 // 急停未动作 M0.2 // 手动给料请求 Network 11 手动卸料 LDN I0.2 A I0.5 AN I0.6 M0.3 Network 12 给料电机综合输出 LD M10.1 // 自动给料 O M0.2 // 手动给料 A M0.0 // 自动运行标志M0.0为1时才允许 O M0.2 // 手动模式不走M0.0判断直接输出 Q0.0这里需要注意手动模式下的给料不要跟自动流程抢同一个输出。所以我给Q0.0的驱动逻辑是自动给料时M10.1为1且M0.0为1手动给料时M0.2为1直接输出。两个条件并联但程序中要保证手动模式下M10.1不会被置位否则会冲突。我的做法是在自动流程启动网络里加了A I0.2条件只有拨到自动档自动流程才会启动。报警逻辑比较简单急停按钮断开或者热继电器断开就置位故障报警标志M1.0同时点亮报警灯和蜂鸣器并且把自动运行标志复位。Network 13 故障报警 LDN I0.6 // 急停按下时为0 LDN I0.7 // 热继跳闸时为0 OLD // 两个条件并联 M1.0 // 故障标志 Network 14 报警输出 LD M1.0 Q0.3 // 报警灯 Q0.4 // 蜂鸣器如果你这台加料机要求更精准的计量比如靠重量控制而不是料位开关那可以在S7-200上扩展一个EM231模拟量模块把称重传感器的变送器输出信号接到模拟量输入通道梯形图里用AIW0读取然后跟设定值做比较来控制给料。S7-200模拟量值0到32000对应0到10V或者4到20mA这个线性换算关系要记牢。程序上用VW4存当前重量值VW6存设定重量值比较指令换成AW AIW0, VW6就行。4. MCGS触摸屏组态与PPI通讯4.1 设备窗口配置S7-200 PPI驱动的关键参数MCGS触摸屏和S7-200通讯用的是串口PPI协议。在MCGS组态环境里工作台左侧找到设备窗口双击进去在工具箱里添加“通用串口父设备”然后在它的子设备里添加“西门子S7-200PPI”驱动。这两级结构不能乱父设备管串口参数子设备管PLC通讯参数。参数设置是通讯能不能成功的命门。串口父设备的参数我按下面的值设串口号根据触摸屏实际硬件选COM1波特率9600数据位8停止位1偶校验。子设备里的站号设为2这是S7-200默认的PPI地址修改PLC那边地址的话两边要一致。采样周期默认值就可以一般100到200毫秒足够设太短反而增加串口负担画面会一闪一闪的。如果用的是S7-200 SMART而不是老的S7-200MCGS这边就要换成以太网驱动了驱动名称类似“西门子S7-200SMART”通讯参数变成IP地址SMART默认IP是192.168.0.1触摸屏和PLC要配置在同一个网段。这个方法在驱动库里都有选中对应驱动就能看到IP填写的界面。4.2 用户窗口画面设计与变量连接MCGS的画面设计我习惯分三个窗口主监控画面、报警画面、参数设定画面。主监控画面是操作工最常看的界面布局按设备的物理流程来排从左到右依次是料位状态、给料机、卸料阀、批量信息。画面上方放设备名称和当前时间中间用标准图元画设备简图下方放操作按钮。每个图元都要跟PLC变量绑定。我列一个变量连接表供参考画面元件连接变量类型启动按钮M0.5开关型脚本脉冲停止按钮M0.6开关型脚本脉冲故障复位按钮M1.2开关型自动运行指示灯M0.0开关型给料电机状态Q0.0只读卸料阀状态Q0.1只读料位上限指示I0.4只读料位下限指示I0.3只读报警指示M1.0只读批次目标值输入框VW0数值型当前完成批次VW2只读接变量的时候最容易犯的错误是PVALUE里搞混地址类型。MCGS里I区、Q区、M区、V区的填写格式要对应驱动说明S7-200 PPI驱动的变量地址格式是类似I0.0、M10.1、VW0这样的写法注意VW0是整型双字节V0是单字节填错了要么通讯错误要么数据乱显示。指示灯要实现“变绿变红”的效果在同一种颜色的图元上添加颜色动画连接表达式填对应的变量地址根据值1或0切换颜色这是一个很基础但很实用的组态技巧。4.3 报警显示、数据记录和脚本脉冲的实现报警方面MCGS有专门的报警显示元件在实时数据库里定义M1.0为开关型报警变量设置报警文本“急停或过载停机”然后在报警画面放置报警显示控件PLC侧M1.0为1时触摸屏就会弹出报警记录。变量报警属性还可以设优先级急停类报警设为最高级别声音报警和画面弹窗都打开。批次数据记录我用的是MCGS的存盘数据浏览功能把VW2当前批次值按天存盘方便管理人员查看产量。这算是一个加分项很多项目需求文档里都提到“要有历史数据可查”但现场往往没时间单独做报表MCGS自带的存盘浏览就够用了。脚本脉冲这个事再强调一次。前面梯形图里说了触摸屏启动按钮不能直接保持1所以我在MCGS的用户策略里建了一个循环脚本!if M0.51 then !set M0.50 !endif实际更规范的做法是按钮按下时执行一段脚本先置位M0.5延时0.5秒后复位。用循环策略定时扫描M0.5并自动复位也一样两种都行。关键是让PLC米勒看到的是“按了一下”而不是“按着不放”。这个问题不解决你触摸屏上的启动停止按钮就是会出各种幺蛾子。5. 调试实录与常见问题排查5.1 上电前的检查顺序和程序下载步骤调试现场的规矩就是先查电再下程序最后联调。先把PLC打成STOP状态断开主回路用万用表蜂鸣档测输入公共端1M和24V电源负极是不是通的测输出回路中间继电器线圈有没有短路测急停回路是不是闭合的。这十几分钟检查能规避掉后面一大堆麻烦。程序下载用的是STEP 7-Micro/WIN软件通过PC/PPI编程电缆连接PLC的编程口。下载前在软件里设置PG/PC接口为PC/PPI cable双击通讯里的刷新能搜索到CPU才能下载。下载完成后把PLC拨到RUN在软件里用状态图表监控M0.0、M10.1这些关键位的变化。调试时我习惯先监控一段完整的自动流程看着步进状态位按顺序变化。如果流程卡在某个状态不动多半是转移条件没满足比如I0.3料位下限信号没来。这时用状态表同时监控输入点和步进标志位一眼就能看出是传感器没动作还是逻辑写错了。5.2 常见问题速查表现象可能原因排查方法MCGS和PLC通讯不上串口号选错、波特率不一致、PLC站号不对检查串口设备参数和驱动站号PC/PPI电缆要在PLC侧拔插重启下载程序时找不到CPUPC/PPI电缆选错、COM口被占用检查编程电缆是否是原装或兼容版在设备管理器确认COM口触摸屏启动按钮没反应M0.5被写成保持型导致自锁失效改为脚本脉冲按下置1延时复位自动流程卡在给料状态I0.4料位上限信号没触发先确认料位开关是否真到了位置再用表短接I0.4测试程序给料电机不转Q0.0没输出但M10.1为1检查中间继电器KA1和接触器KM1线圈电压查主回路系统间歇性乱动作接地不良、动力线干扰、屏蔽层没接传感器屏蔽层单端接地PLC电源和动力电源分开走线运行到一半自动停止批次目标VW0被误设为很小值数值变量检查VW0和C0当前值还有一个经常被忽视的问题就是M区地址冲突。S7-200的M0.0到M31.7总共只有256个位触摸屏变量、PLC程序、可能还有从站设备都在用这些地址。如果触摸屏用了M0.0做启动按钮PLC程序里M0.0又当运行标志用两边就会互相打架你按下启动触摸屏给M0.0写1PLC程序一转又给它清零画面和实际状态永远对不上。所以一定要有一个M区地址分配表哪个地址给触摸屏按钮哪个地址给程序标志开头就约定好。5.3 调完这套系统后的几点体会最后分享几个从现场带回来的经验。第一给料机和卸料电磁阀的接线端子要做好标号这点看着小实际上后期维护全靠它。我用的是线号管输入端、输出端、电源端三色区分柜内压接端子必须压紧松动是最难排查的软故障。第二S7-200的PPI通讯是主从式触摸屏做主机轮询PLC所以一台MCGS触摸屏可以同时带多台S7-200只要你给每台PLC设定不同的站号。有些项目一个屏控两台加料机就是这样做的画面里用切换窗口的方式分别操作两台设备思路是一样的IO点翻倍、步进位翻倍梯形图的结构不变。第三如果你遇到给料电机用变频器控制的改造需求可以把Q0.0改成变频器启停干接点频率给定通过S7-200的Modbus RTU口发过去S7-200本身支持Modbus从站指令库程序主体逻辑完全不用大变。MCGS那边同样可以挂Modbus驱动这意味着整套架构的扩展性比想象中宽得多从单机自动化往车间级监控再走一步也没有沟壑。做设备控制就是这样看着是一小套系统实际上从选型、画图、写程序到现场调试每一步都有讲究。把这些环节吃透了变频器、伺服、触摸屏再多也就是技术叠加的问题。你要是正在跟S7-200和MCGS打交道希望这篇记录能让你少走几个来回。