ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于S7-200 PLC与MCGS触屏的运料小车自动控制系统设计

基于S7-200 PLC与MCGS触屏的运料小车自动控制系统设计

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触摸屏,负责状态显示、参数下发和报警记录。

自动运行流程按装料端和卸料端两个位置来理解,整个周期是这样的:

  1. 小车停在装料位,操作员按下启动按钮,系统进入装料状态;
  2. 装料机构开始工作,装料延时时间到或者料位传感器检测到料满,装料停止;
  3. 小车向卸料位方向前进,到达卸料位,限位开关动作,小车停下;
  4. 卸料机构动作,开始卸料,卸料延时时间到,卸料停止;
  5. 小车反向返回装料位,回到装料位限位后停下;
  6. 如果连续运行开关已合上,小车自动进入下一个装料周期;否则停在初始状态等待下一次启动。

后面讲到的所有地址分配、梯形图逻辑、触摸屏画面,都是围绕这个流程展开的。

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的A,B端接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, 1

SM0.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,同时启动卸料定时器T38:

LD 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地址规划阶段就预留这类扩展通道,同时把触摸屏的报警记录导出功能利用起来,形成一台设备一份运行台账。实际用下来,这个成本不高,对后续设备管理帮助很大。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进