
1. 项目背景与整体方案选型1.1 运料小车要解决的实际问题车间里有一台往来于原料仓和生产线之间的轨道小车原来靠人工推来回一趟将近两分钟到了位置以后装卸料还要人等效率低不说工人长期重复走路也容易疲劳。后来决定把它改成自动运行的小车控制系统核心需求就是三个自动往返、到位停止、装卸料联动。这类设备在小型包装线、装配线和物料周转场景里非常常见。看上去是个不起眼的小改造但真正落地的时候要处理的问题一点不少小车走到两头要能准确停下来不能冲过限位装料和卸料的时间要跟物料流量匹配操作工人要能随时手动干预出故障了要能快速定位。用继电器回路做这些功能也能跑通但控制柜里会塞满中间继电器和时间继电器改动一次动作顺序就得重新拆线接线现场维护特别麻烦。换成PLC方案以后中间的定时、互锁、顺序切换大部分都放到程序里了。硬件上只需要保留接触器、断路器和限位开关这些执行与检测元件控制柜清爽很多后续调工艺也方便。1.2 为什么选S7-200加MCGS这套组合选型的时候首先评估了控制规模。运料小车的输入信号主要是启动按钮、停止按钮、手动/自动切换开关、装料位限位、卸料位限位、料位传感器、手动正反转按钮满打满算十几个点输出信号是正转接触器、反转接触器、装料机构、卸料机构、运行指示灯和故障指示灯不到十个点。这种规模用小型PLC最合适S7-200的CPU模块自带输入输出加一个扩展模块都用不上。选S7-200系列PLC而不是更大型号的控制器一方面是点位够用另一方面是它的PPI通信协议与MCGS组态软件配合得很成熟不需要额外买通信模块。触摸屏选的是MCGS的7英寸嵌入式一体化屏支持开关量、数值量、报警、实时曲线这些基本功能对这个小项目来说完全够用。MCGS组态软件的操作逻辑对电气工程师很友好建变量、拖图元、连动画、配置设备驱动这几个步骤掌握以后就能在一天内搭出一个能用的画面。它跟PLC之间的通信配置也不需要写复杂脚本选定通信端口和协议把地址映射关系填对就行。这套组合不是最花哨的但在这种小设备控制场景里稳定性和性价比的平衡点抓得比较准。后期车间电工培训成本也低画面报警弹出来能直接看到是哪个环节卡住了。1.3 系统架构与自动运行流程整个系统硬件上分三层。设备层是轨道小车、电机、接触器、限位开关、料位传感器、装料和卸料机构控制层是S7-200 PLC负责接收信号、执行顺序控制、输出驱动指令监控层是MCGS触摸屏负责状态显示、参数下发和报警记录。自动运行流程按装料端和卸料端两个位置来理解整个周期是这样的小车停在装料位操作员按下启动按钮系统进入装料状态装料机构开始工作装料延时时间到或者料位传感器检测到料满装料停止小车向卸料位方向前进到达卸料位限位开关动作小车停下卸料机构动作开始卸料卸料延时时间到卸料停止小车反向返回装料位回到装料位限位后停下如果连续运行开关已合上小车自动进入下一个装料周期否则停在初始状态等待下一次启动。后面讲到的所有地址分配、梯形图逻辑、触摸屏画面都是围绕这个流程展开的。2. 控制逻辑拆解与关键参数设计2.1 I/O点表与地址分配写程序之前我习惯先把I/O点表完整列出来。这张表既是接线的依据也是后面做符号表、写梯形图的依据省得程序写一半发现地址冲突。符号名称PLC地址类型说明启动按钮I0.0常开输入启动自动流程停止按钮I0.1常闭输入停止所有动作手动/自动切换I0.2开关输入手动模式或自动模式装料位限位I0.3常开输入装料端到位信号卸料位限位I0.4常开输入卸料端到位信号手动正转按钮I0.5常开输入手动方式下前进手动反转按钮I0.6常开输入手动方式下后退料位传感器I0.7常开输入料满信号连续运行开关I1.0开关输入允许自动循环热继电器信号I1.1常开输入过载保护正转接触器Q0.0继电器输出小车前进反转接触器Q0.1继电器输出小车后退装料机构Q0.2继电器输出装料控制卸料机构Q0.3继电器输出卸料控制运行指示灯Q0.4继电器输出自动流程指示故障指示灯Q0.5继电器输出报警指示停止按钮我用的是常闭输入这样即使按钮没按信号回路也是导通的。万一停止按钮的接线断了或者插头松了PLC马上会检测到停止信号系统能停下来如果选了常开输入断线时系统会失去停机手段现场查故障会非常被动。2.2 为什么用步进指令组织顺序控制运料小车的动作有一个明显特征严格的先后顺序。装料没完成不能乱动卸料没完成不能往回跑。如果用普通的置位复位指令写这个逻辑每个动作之间要加一大堆常开常闭互锁条件程序越滚越长后期想改一个动作顺序牵一发动全身。我用的方案是S7-200的步进指令也叫SCR指令配合状态继电器S0.0到S0.4来管理流程。每个状态只负责一个阶段的动作状态的进入和跳出通过转移条件控制。这样程序段与段之间是隔离的某一步卡住了看状态继电器的当前值就能定位到是哪一段的问题。自动流程的状态分配如下S0.0初始等待状态系统复位后停留在这里S0.1装料状态输出装料机构等待装料时间到或料满信号S0.2正向运行状态输出正转接触器小车前进S0.3卸料状态输出卸料机构等待卸料延时结束S0.4反向运行状态输出反转接触器小车返回装料位。状态之间的转移条件分别是装料完成信号、卸料位限位、卸料完成延时、装料位限位。这套思路就像车间流水线上的工位一样上一道工序干完了才把工件交给下一道工序。2.3 定时器、计数器与过程参数设置装料时间和卸料时间属于典型的现场可调参数我没有写死在程序里而是放到MCGS触摸屏上供操作员调整。PLC内部用V区作为参数存储区触摸屏通过通信读写这些地址。装料时间默认值设为35秒。这个值不是拍脑袋定的是根据现场实际流量计的装料口每秒钟的出料量大约能装满约两个料箱容量车厢额定容量是六十箱算下来装满需要三十秒左右我再加五秒余量防止物料流动性变差时装不满。对应到定时器S7-200里编号T37以上的定时器是100毫秒精度的35秒对应设定值350。卸料延时默认20秒。卸料过程靠物料自重流出正常情况下十五秒能排空我留了五秒余量。对应定时器T38设定值200。这两个参数在触摸屏参数设置页里做了上下限约束装料时间限制在10到60秒之间卸料时间限制在10到40秒之间。不让操作员随便填防止误操作把延时设成几百秒导致整个生产节拍被拖垮。装料次数统计我用了一个加计数器C0每次装料状态进入一次就计数一次累加结果存到数据寄存器里画面上的“累计装车数”可以直接读取。3. 电气接线与硬件配置实操3.1 主回路与正反转接触器互锁运料小车电机要实现正反转常用的做法是两路接触器交换相序。主回路上三相电源进线经过断路器后一路接正转接触器KM1一路接反转接触器KM2。KM2输出的三相线中任意两相调换一下再进电机电机的旋转方向就反过来了。这里最容易出问题的不是主回路接线而是互锁环节。我曾经见过只做软件互锁的设备PLC程序里串了常闭触点但现场一旦由于干扰或误操作导致两个输出点同时置位两个接触器一起吸合相间短路只在瞬间发生轻则断路器跳闸重则烧接触器和电机。所以这次接线在接触器线圈控制回路里额外串了机械互锁触点KM1的辅助常闭触点串在KM2线圈回路中KM2的辅助常闭触点串在KM1线圈回路中。无论程序状态如何两个接触器在硬件上都不可能同时吸合。软件互锁是第一道防线硬件互锁是最后一层保底两层缺一不可。电机主回路里面还串了热继电器FR热继电器的辅助常开触点接PLC输入I1.1。一旦电机过载发热热继电器动作PLC切断输出并点亮故障灯。3.2 输入输出信号接线细节S7-200大多采用漏型输入公共端接直流24V电源的负极每个输入点需要外部提供正电压信号。按钮开关一端接24V正极另一端接PLC输入端子限位开关和传感器也是同样方式信号闭合时输入点内部光耦导通PLC读到1。限位开关我用的是滚轮式机械行程开关装在轨道两端。机械行程开关的好处是触动力大、接线简单、抗干扰能力强对这种低速轨道小车非常合适。接近开关用在卸料位检测料位传感器上选的是三线制NPN型常开传感器棕色线接24V正蓝色线接24V负黑色信号线接PLC输入点。这种传感器只有在金属挡铁进入感应范围时信号线才导通。接线前一定要确认传感器型号NPN型的输出低电平有效PNP型输出高电平有效接错以后信号状态永远不对排查半天才发现是选型问题。PLC输出模块我用的是继电器输出型Q0.0和Q0.1分别接两个接触器线圈。输出端子到接触器线圈之间串接了对方的机械互锁触点。接触器线圈两端并联了RC阻容吸收器用来抑制线圈断电时的反向感应电动势保护PLC输出继电器触点。这个细节很多初学者会忽略实际运行中如果触点火花偏大多半就是少装了阻容吸收。3.3 MCGS触摸屏与PLC的通信配置MCGS触摸屏和S7-200之间走的是PPI协议物理层是RS485半双工通信。触摸屏这边要把通信参数和PLC保持一致不同品牌和型号的触摸屏配置入口略有差异但核心参数是那几项通信串口号、波特率、数据位、停止位、校验方式、PLC站地址。S7-200的默认PPI站地址一般是2波特率常见9600或者19200。我在触摸屏的设备管理里选“S7-200PPI”驱动PLC站地址填2波特率和PLC保持一致数据位8、停止位1、偶校验。这一步两边参数只要有一项不一致最典型的现象就是触摸屏右上角通信指示灯不停闪烁所有变量都取不到值。通信线缆用的是屏蔽双绞线A端接触摸屏RS485的AB端接B方向不能交叉。屏蔽层在触摸屏侧单端接地。现场如果变频器干扰严重可以再套一个磁环在通信线上能过滤掉一部分高频干扰。4. 梯形图程序关键段解析4.1 手动与自动模式的切换逻辑设备调试和日常检修需要手动操作正常生产又需要全自动流程所以程序一开始就要把整个逻辑分成手动和自动两个区域。我用一个自动模式标志位M0.0来区分手动/自动切换开关I0.2闭合时M0.0置位断开时M0.0复位。自动模式下步进指令的初始状态S0.0保持激活手动模式下先把所有步进状态复位允许手动正转和反转按钮直接控制输出。手动输出的程序段也要做互锁Q0.0的线圈回路里串Q0.1的常闭触点Q0.1的线圈回路里串Q0.0的常闭触点。切换模式的时候还有一个细节任何时候从自动切到手动当前正在执行的状态必须立刻终止正反转输出立即断开不能出现切到手动以后小车还在半路继续跑的情况。所以I0.2断开的瞬间要用一个复位指令把S0.1到S0.4全部复位同时复位Q0.0到Q0.3。这个操作在PLC程序里用一条R指令加一个上升沿就可以实现。4.2 自动流程的步进指令实现步进指令的梯形图有固定的结构。程序一开始先处理初始化LD SM0.1 R S0.1, 4 R M0.0, 1SM0.1是PLC第一次扫描时导通的特殊继电器用于系统上电时把所有状态复位保证从初始状态开始运行。在S0.1装料状态里输出装料机构同时启动装料定时器LD S0.1 Q0.2 LD S0.1 TON T37, 350装料状态的转移条件有两个装料时间到或者料位传感器检测到料满。两个条件“或”在一起LD T37 O I0.7 SCRT S0.2进入S0.2后小车正向运行LD S0.2 Q0.0 LD I0.4 SCRT S0.3卸料位限位I0.4一动作程序立刻跳到卸料状态S0.3。这里的转移条件用的是普通常开触点只要限位信号存在状态就会切换不需要额外加延时因为小车到位后靠限位信号稳定保持。卸料状态S0.3里输出卸料机构Q0.3同时启动卸料定时器T38LD S0.3 Q0.3 LD S0.3 TON T38, 200 LD T38 SCRT S0.4卸料完成后小车反向返回输出反转接触器LD S0.4 Q0.1 LD I0.3 SCRT S0.1回到装料位后如果连续运行开关I1.0是闭合的就继续跳回S0.1开始下一轮装料如果没闭合就跳回S0.0等待。这个分支逻辑在梯形图里可以这样组织LD I0.3 AND I1.0 SCRT S0.1 LD I0.3 AN I1.0 SCRT S0.0这样写的好处是状态转移条件一目了然加一个连续运行功能不影响原来的步进骨架。4.3 报警与安全联锁逻辑报警和安全联锁是这类设备最容易偷懒的地方但恰恰是不能省的。我在程序里做了三路保护。第一路是正反转程序互锁。Q0.0线圈回路中串入Q0.1常闭触点Q0.1线圈回路中串入Q0.0常闭触点。这样即使手动按钮卡住或者触摸屏误下发命令两个输出也不可能同时成立。第二路是停止和过载保护。停止按钮I0.1采用常闭输入PLC程序里把它串在自动流程的允许条件中。只要I0.1断开也就是停止按钮被按下或者停止回路断线M0.0自动复位所有步进状态复位输出全部断开。热继电器信号I1.1一旦动作同样切断自动流程并使能故障指示灯Q0.5。第三路是限位保护。装料位限位和卸料位限位除了做状态转移之外我还把它们的常闭触点串在对方方向的输出回路里作为硬禁止。比如小车在装料位时I0.3的常闭触点断开程序里即使有正向运行的输出条件Q0.0也无法得电相当于双重保险。5. MCGS组态画面设计与变量关联5.1 画面分区与状态展示思路触摸屏画面我分成四个页面运行监视页、手动操作页、参数设置页、报警记录页。运行监视页是默认首页主要显示设备当前的状态。页面中间画一条水平轨道左边是装料仓右边是卸料仓中间是一个表示小车图元。小车图元的位置不是简单的静态图而是根据PLC里的运行信号做水平移动动画这样操作员扫一眼屏幕就能知道小车现在跑到哪里了。状态栏文字用“当前状态”标签显示比如“装料中”“正向运行”“卸料中”“反向运行”“待机”。这个字符串变量通过PLC程序里的一组中间继电器组合赋值。手动操作页放了正转、反转、装料、卸料、停止五个按钮按钮对应的变量连接到PLC的M区中间继电器手动运行程序段读取这些标志位执行动作。参数设置页放了装料时间、卸料时间两个数值输入框对应PLC的VW区变量。报警记录页用了MCGS自带的报警显示控件把需要监控的报警变量全部勾选进去。5.2 实时数据库变量建立与映射MCGS的“实时数据库”就是整个组态工程的变量表。新建工程后我习惯先把需要用到的变量全部建好再在画面里绑定不要边画边建容易乱。开关型变量对应PLC的位地址。比如“正向运行”变量类型选开关型连接PLC设备通道时地址填Q0.0“自动模式”变量连接M0.0。数值型变量对应PLC的V区地址装料时间变量连接VW100卸料时间变量连接VW102累计装料次数连接VW104。数值型变量最容易犯的错误是数据格式不匹配。S7-200的VW区存储的是16位整数MCGS这边如果默认选了32位整型读上来的数据可能会翻倍或者出现负数。我在设备通道属性里都会明确选择“16位无符号整数”这样读出来的数值才和PLC里的设定值一致。5.3 参数设置与报警记录的绑定参数设置页里装料时间和卸料时间两个输入框关联到VW100和VW102操作员在触摸屏上改数值PLC程序里的定时器设定值并不会自动变需要通过程序把V区的数值搬运到定时器的设定值入口。这一段梯形图写起来很简单LD SM0.0 MOVW VW100, T37预设寄存器地址实际S7-200定时器设定值可以用定时器指令直接引用VW地址写法是把TON指令的第二操作数写为VW100这样一来触摸屏写入VW100的同时定时器的设定值就更新了不需要额外的搬运逻辑。报警记录页要监控的报警变量包括热继电器动作、卸料位传感器异常、通信失败等。MCGS里新建报警变量时要设定报警产生和恢复的类型比如热继电器动作报警类型用“开报警”恢复类型也用“开恢复”。这样报警产生和解除都会有对应记录操作员可以通过报警历史查询按钮排查问题。6. 现场调试与常见问题排查实录6.1 送电前的检查顺序调试阶段最忌讳直接合闸试机。断掉电机主回路只给PLC和触摸屏送控制电先确认控制逻辑没问题再合主回路。我在现场按下面这个顺序走第一步检查PLC的RUN指示灯和触摸屏通信状态确认两者通信正常 第二步用万用表或短接线逐个短接输入点对照PLC输入状态表确认地址映射正确尤其是限位开关和传感器 第三步手动模式下分别点动正转、反转按钮注意听接触器吸合的声音确认两个接触器不会同时抖动验证机械互锁接线 第四步合上电机主回路空载运行正转和反转各三十秒观察电机转向是否符合“前进”“后退”的定义 第五步切回自动模式放一辆空车完整跑一个循环观察每一步状态切换是否按照S0.1到S0.4的顺序走。如果电机转向反了处理方法是在电机接线端任意调换两相或者在程序里把正转、反转输出定义对调但不要两边同时改否则方向又反回去了。6.2 常见故障速查表与处理现场调试常见的故障我整理成了一张速查表遇到问题照着排查会快很多故障现象可能原因排查方法触摸屏通信失败波特率不一致、COM口选错、通信线接反核对两边通信参数检查A/B接线小车到位不停车限位开关没触发、机械挡块移位看PLC输入点状态调整挡块位置自动流程卡在装料步料位传感器故障、定时器设定值过大短接传感器信号线测试检查VW100数值正反转接触器同时吸合机械互锁接错、程序互锁失效断电检查辅助触点接线触摸屏数值显示翻倍变量数据类型设成32位整型改为16位无符号整数卸料位信号偶尔丢失接近开关感应距离太近调整感应面与挡块间距通信时断时续接地不良、通信线离动力线太近屏蔽层单端接地分开布线6.3 调试中几个容易被忽略的细节第一个容易踩坑的地方是限位开关的固定。轨道小车到位时有冲击限位开关如果只用单颗螺丝固定在角钢上用不了几个星期就会松动偏位小车要么撞不到开关不停车要么撞过头冲出轨道。我这次用了双螺母背紧底座开长圆孔位置由挡块粗调、限位开关细调最后再用缓冲橡胶挡块贴在限位开关后侧。这样既方便调整又延长了限位开关的寿命。第二个容易踩坑的地方是接地。触摸屏、PLC、变频器如果共用一根地线会产生地环流通信会偶发性断线。现场的强电柜里变频器启停时通信信号经常抖动后来我把PLC和触摸屏的地线单独接到柜内接地铜排变频器主回路单独接地通信再没掉过线。很多“时好时坏”的故障根源都在接地排查时千万别忽略。第三个细节是启动信号的边沿处理。自动模式启动按钮如果用的是普通常开触点操作员按的时间稍长一点PLC在多个扫描周期内都会检测到启动条件可能造成步进状态重复触发或者跳过多步。我在启动信号前加了上升沿检测指令EU把按钮持续闭合的长信号转换成单扫描周期的脉冲这样每次按下只触发一次启动不会乱跳。第四个细节是备用地址规划。程序里的V区地址设计阶段就预留了一段备用区比如VW200到VW300全部空着不分配给任何功能。后期如果客户要增加小车运行时长统计、增加呼叫功能直接在备用区里加变量就行不用为地址冲突折腾。6.4 改造效果与扩展思路这套运料小车控制系统投入运行以后原来人工推车的环节全部省掉了操作员只需要在触摸屏上按一下启动装料、运输、卸料、返回整个周期全自动完成生产节拍稳定在每分钟一个循环左右配合两条生产线使用基本不会再卡料。从维护角度看PLC程序、触摸屏参数、机械限位三者配合比老式继电器回路好查得多。现场遇到故障时先看触摸屏报警和状态页面再配合PLC输入输出指示灯十分钟内基本能锁定问题区域。如果后面设备要接入车间级数据采集系统S7-200的通信口可以再加一个远程IO模块或数据采集网关把小车运行次数、累计运行时间、故障记录这些数据上传到更上层的信息系统。新做一个项目时我会建议在PLC地址规划阶段就预留这类扩展通道同时把触摸屏的报警记录导出功能利用起来形成一台设备一份运行台账。实际用下来这个成本不高对后续设备管理帮助很大。