资讯动态

PLC仿真与组态:玻璃冲洗与交通灯联合控制模型

发布时间:2026/9/9 21:10:14 来源:尧图企业网站定制
搞自动化项目的人都有个共同痛点程序写完了不敢直接往设备上跑。玻璃冲洗线这种带水泵、风机、传送带的产线逻辑一旦写错轻则工件卡滞重则烧接触器。我自己的习惯是任何新写的PLC程序先过一遍仿真再用组态把过程可视化确认无误才允许动现场。这套“PLC 仿真 组态”的组合其实完全可以在一个模型里跑通。这次要拆解的模型是把“玻璃冲洗”和“十字路口交通灯”两个控制对象放到同一个PLC程序里外加仿真调试和MCGS组态画面。适合正在学PLC编程的初学者、准备课程设计和毕业设计的学生以及想给客户做方案演示的电气工程师。别看这两个对象一个偏产线、一个偏市政放到PLC里它们的控制逻辑高度同构顺序步进、定时循环、多输出互锁一个模型全练到了。1. 这个组合模型为什么值得做从产线到路口的控制逻辑共性1.1 两个控制对象一套控制逻辑内核玻璃冲洗完整的工步是启动传送带 → 玻璃到位 → 传送带停止 → 喷淋加刷洗 → 停止喷淋 → 风机吹干 → 再次启动传送带送出。这是一个典型的顺序控制每一步都要等上一步的完成条件成立才能切换否则产品流程就会乱套。十字路口交通灯则是典型的时序循环控制东西绿30秒、东西黄3秒、南北绿30秒、南北黄3秒然后循环。判断一个交通灯程序写得好不好第一个指标就是红绿是否互锁——绝对不允许出现东西方向和南北方向同时亮绿灯。第二个指标是相位切换是否严格按时间走黄灯作为过渡灯绝对不能省。把这两个对象放在一个PLC程序里不是猎奇而是因为它们恰好覆盖了PLC编程的三项底层技能启保停逻辑自锁、多输出互锁、定时器循环。三者是任何一本PLC教材都会讲的东西但能在一道题里同时用上并且用到“组态可视化”来验证并不多见。对初学者来说玻璃冲洗帮你理解“步进顺序”怎么搭交通灯帮你理解“时间循环”怎么转两者合在一起就是一个完整的控制思维训练。1.2 为什么选择仿真而不是直接上硬件我一直跟身边的人说仿真不是为了偷懒是为了保命。这里说的保命有两层意思一是保设备二是保调试工期。从成本角度看一套实物PLC加触摸屏加模型流水线少说几千块如果还要做交通灯沙盘又得加LED灯组和路面模型。而GX Works2加GX Simulator这套仿真环境软件本身学习用途免费可用MCGS组态软件也有学习版整条链路几乎零成本就能跑起来。从安全角度看仿真的电气回路不会因为接线错误烧PLC输出点更不会因为程序里把正反转同时接通而崩掉。从可重复性角度看仿真环境里可以反复修改程序、强制信号、加速时间想怎么折腾都行实物设备可经不起这样反复测试。还有一个容易被忽略的价值演示效果。组态画面比实物模型更容易被非专业人员看懂。你做个投标方案或者课程答辩评委和客户更愿意看到的是屏幕上一个路口红绿灯在自动切换、一条流水线上玻璃片在往前运送而不是一块只有指示灯在闪的PLC控制柜。这个模型做出来就是一套可以直接拿去讲方案的演示系统。1.3 模型的整体构成整个模型分三层PLC程序层用三菱FX3U-32MR作为目标机型编写控制程序。FX系列是三菱经典系列指令系统教学资源多GX Works2对它的支持非常成熟。仿真验证层用GX Simulator V2把写好的程序加载进虚拟PLC通过软元件监视、强制信号、时序图等功能验证逻辑正确性。组态呈现层用MCGS嵌入版组态软件建立两个画面一个玻璃冲洗监控画面、一个十字路口交通灯画面把PLC里的Y输出和M中间变量映射成动画、指示灯和倒计时数字。这三层可以独立工作也可以串联联调。独立工作时GX Simulator负责验证程序逻辑MCGS可以用内部变量先做界面动画串联联调时MCGS通过设备驱动读取虚拟PLC的软元件状态做到“屏幕上的画面跟着PLC程序走”。2. 控制需求拆解与I/O资源规划先把动作流程翻译成PLC信号2.1 玻璃冲洗工艺的完整动作链玻璃冲洗线在不同工厂里细节会有差异但核心工艺基本一致玻璃基板从上料区放到传送带上进入冲洗段先用喷淋水加上滚刷把表面污渍刷掉然后用风机或者热风把水渍吹干最后输送到下料区。在这个模型里我把它简化成六个动作每一步都对应明确的输入输出步骤动作描述执行元件反馈信号持续时间1按下启动按钮按钮SB1X0保持2传送带启动玻璃向冲洗区移动传送带电机无到位置为止3玻璃到位传送带停止光电传感器SQ1X2瞬时4喷淋电磁阀打开同时刷洗电机启动电磁阀YV1、刷洗电机M3无5秒5喷淋停止风机启动吹干风机M4无3秒6吹干完成传送带再次启动送出传送带电机无直到下一次复位按下停止按钮时系统需要在当前步骤执行完后停下来而不是立即切断所有输出。这个需求很容易被忽略如果直接用X1常闭触点串在总电源上就会导致程序跑到一半设备急停这在真实产线上很容易造成工件卡在冲洗段里泡水。2.2 交通灯的四相位时序交通灯部分采用经典的双向四相位模型不考虑左转箭头灯保持和大多数教材一致的复杂度相位东西方向南北方向持续时间相位1绿灯红灯30秒相位2黄灯红灯3秒相位3红灯绿灯30秒相位4红灯黄灯3秒相位1到相位4循环执行。注意一点南北方向的绿灯亮的时候南北方向的红灯必须熄灭但因为南北红灯和东西红灯分别由不同逻辑段驱动很容易出现一个红灯线圈在多个输出行中被重复控制的情况。这是后面程序设计的重点。2.3 I/O分配表三菱FX的八进制陷阱I/O分配是初学者最容易出问题的地方主要原因是三菱FX系列的输入输出编号是八进制不是十进制。也就是说X0到X7之后不是X8、X9而是X10、X11Y0到Y7之后是Y10、Y11。很多人第一次写程序编到X8就变红了以为是软件出错其实就是编号规则没搞清。本模型的I/O分配如下输入信号地址用途输出信号地址用途SB1X0系统启动传送带电机Y0玻璃输送SB2X1系统停止喷淋电磁阀Y1冲洗喷淋SQ1X2玻璃到位检测刷洗电机Y2滚刷刷洗SB3X3急停风机Y3吹干———东西绿灯Y4交通灯———东西黄灯Y5交通灯———东西红灯Y6交通灯———南北绿灯Y7交通灯———南北黄灯Y10交通灯———南北红灯Y11交通灯输出部分特意把玻璃冲洗的Y0到Y3放在一组交通灯的Y4到Y11放在另一组这样写程序时思路清晰后面做组态变量映射也方便。2.4 为什么这样分配I/O有人会问玻璃冲洗三个执行元件为什么把刷洗电机单独占一个输出点而不是和喷淋电磁阀共用一个从工艺上讲喷淋和刷洗应该同时启动但它们属于不同负载类型电磁阀是交流220V线圈刷洗电机是三相电机走接触器电气回路上必须分开程序上也占两个独立输出点方便单独检修和组态显示。输入X3急停则是一个安全冗余。急停用常闭触点接入程序里用常开指令ANI读取这样一旦急停线断了PLC读到的是断开状态系统会立刻进入停止逻辑符合安全回路设计原则。3. 梯形图核心逻辑玻璃冲洗步进控制与交通灯时序循环怎么写3.1 玻璃冲洗用SET/RST搭步进而不是在一行里堆定时器玻璃冲洗的顺序逻辑新手最容易写成“一行一个定时器全部串联”的接力式结构。这种写法在只有两三个步骤时勉强能跑但一旦步骤多了程序读起来就像一团浆糊而且后面想插入一个暂停条件非常痛苦。我的做法是引入中间继电器M作为步进标志用SET和RST指令实现步进切换步进标志对应状态M10待机等待玻璃到位M11输送中M12冲洗中M13吹干中M14送出中核心逻辑用指令表表述大概是// 启动X0常开触发M0自锁X1常闭停止 LD X0 OR M0 ANI X1 OUT M0 // 输送步按下启动后进入输送中 LD M0 ANI X2 SET M11 RST M10 // 到位后停止输送进入冲洗步 LD X2 SET M12 RST M11 // 冲洗步输出Y1、Y2T0计时5秒 LD M12 AND M0 OUT Y1 OUT Y2 OUT T0 K50 // 冲洗结束进入吹干步 LD T0 SET M13 RST M12 // 吹干步输出Y3T1计时3秒 LD M13 AND M0 OUT Y3 OUT T1 K30 // 吹干结束进入送出步 LD T1 SET M14 RST M13注意一个细节我在M12和M13的线圈条件里串了M0运行标志。这样做是为了实现前面说的“停止按钮不立即断输出而是当前步骤完成后停下”。当X1按下后M0断开虽然此时还在冲洗步但Y1、Y2不会继续输出T0也不会继续计时程序就被“冻结”在当前步骤。再次按下启动时M0重新闭合当前步骤继续执行。3.2 交通灯用相位标志法替代定时器串联交通灯的程序最常见的错误写法是把四个定时器首尾串联LD M0 OUT T2 K300 LD T2 OUT T3 K30 LD T3 OUT T4 K300 LD T4 OUT T5 K30 LD T5 RST T2这种写法在仿真器里能跑但存在一个隐患T5动作后RST T2T2从0开始重新计时而T3、T4、T5的状态切换可能因为扫描周期的原因出现一两个扫描周期的瞬间状态混乱。特别是当你后面想加“倒计时显示”时这种结构很难取出“当前相位剩余时间”。我改用相位标志法和玻璃冲洗同一个套路相位标志对应相位对应定时器M20东西绿南北红T230秒M21东西黄南北红T33秒M22东西红南北绿T430秒M23东西红南北黄T53秒程序核心逻辑// M20置位后T2开始计时 LD M20 OUT T2 K300 // T2计时到切换到M21 LD T2 SET M21 RST M20 // M21置位后T3开始计时 LD M21 OUT T3 K30 // T3计时到切换到M22 LD T3 SET M22 RST M21 // M22置位后T4开始计时 LD M22 OUT T4 K300 // T4计时到切换到M23 LD T4 SET M23 RST M22 // M23置位后T5开始计时 LD M23 OUT T5 K30 // T5计时到回到M20 LD T5 SET M20 RST M23输出部分用相位标志组合LD M20 OUT Y4 // 东西绿 LD M21 OUT Y5 // 东西黄 LD M22 OR M23 OUT Y6 // 东西红 LD M22 OUT Y7 // 南北绿 LD M23 OUT Y10 // 南北黄 LD M20 OR M21 OUT Y11 // 南北红这套写法的好处是任何时候只有一个相位标志为ON红绿灯输出天然互锁因为东西绿只在M20时输出南北绿只在M22时输出M20和M22在SET/RST的严格互斥下不可能同时为ON。3.3 为什么不用“步进指令STL”来实现三菱FX系列有专门的步进指令STL和状态继电器S很多教材里交通灯就是用STL写的。但我在这个模型中刻意用中间继电器M加SET/RST实现优先保证两个控制对象用同一种编程思路方便初学者对照学习。实际工程里如果程序步骤超过10步我会建议改用STL或者转移到子程序结构因为S继电器的状态继承和自动复位机制能减少代码量。3.4 定时器资源分配与仿真提速技巧玻璃冲洗用了T0、T1交通灯用了T2到T5两者互不干扰。三菱FX3U的定时器默认是100ms单位所以K50代表5秒K30代表3秒K300代表30秒。仿真调试时如果不想盯着红灯等30秒可以把K300改成K30把K50改成K5逻辑不变只是时间缩短。正式演示前再改回来。还有一个小技巧用M80131秒脉冲可以给交通灯加“黄灯闪烁”或者“绿灯闪烁提醒”功能只要把某个Y输出的条件从相位标志改成“相位标志 AND M8013”就会变成1秒亮1秒灭的闪烁效果后面扩展夜间模式时直接套用。4. 仿真运行与在线调试让虚拟PLC先替你在仿真环境里跑4.1 GX Simulator V2的环境准备GX Works2安装完成后GX Simulator V2是独立安装的。装好之后在GX Works2里写完程序执行“变换”编译然后点击工具栏上的“模拟开始”按钮写好的程序就会加载进虚拟PLC并自动进入运行状态。很多人第一次用会找不到这个按钮。GX Works2的界面里“调试”菜单下有一个“开始/停止模拟”的选项快捷键是CtrlF2。点击后梯形图编辑器下方会多出一个小窗口显示虚拟PLC的运行状态。此时X、Y、M、T、C、D这些软元件就全部进入仿真状态了。4.2 用软元件监视和强制信号排查逻辑仿真启动后在梯形图编辑器里右键选择“软元件监视”或者直接打开“监视模式”就能看到每个触点和线圈的实时通断。此时程序的逻辑执行情况一目了然。强制信号是调试神器。比如玻璃冲洗程序真实设备上你需要用手去挡一下光电传感器才能产生X2信号仿真里直接右键X2选“强制ON”程序就会认为玻璃到位了。交通灯调试也一样你可以强制X0为ON让系统启动然后观察Y4到Y11的切换顺序是否符合预期。这里要提醒一句强制信号用完一定要全部解除否则后续联调时某几个X点一直被强制在ON状态会造成程序行为完全混乱。GX Works2里“调试”菜单有“软元件强制清除”的功能一键复位。4.3 仿真中最容易暴露的三类程序问题第一类是双线圈问题。同一个Y输出在程序里出现两次仿真时因为扫描周期的原因输出状态会取决于最后一条指令的执行结果看起来就是“时亮时灭”或者“一直不亮”。这种情况在实物PLC上更难查仿真时用软元件监视就能直接看到继电器状态在跳动。第二类是定时器误复位问题。玻璃冲洗程序里如果T0的线圈条件里有一个瞬间断开的触点比如直接用X2常开去驱动T0而X2在玻璃离开后马上变OFFT0的当前值立刻清零冲洗时间永远走不完。正确做法是用M12步进标志去驱动T0M12一旦置位就会保持T0能完整计时。第三类是互锁缺失。交通灯部分如果你忘了把东西红和南北红分别用对方相位的组合来输出而是直接用一个独立的Y6、Y11去接就可能出现逻辑混乱。仿真跑起来后组态画面上红绿同亮的瞬间会非常显眼。4.4 用时序图功能验证相位时长GX Works2的“时序图”功能我真的建议每个人都用起来。它能把Y0到Y11、M20到M23、T2到T5这些软元件的状态变化按照扫描周期记录成波形曲线配合时间轴看比肉眼盯监视窗口高效得多。交通灯调试时我会把T2到T5的当前值也加进时序图这样能直接看到四个定时器的当前值变化曲线确认相位切换的时间点是否准确。比如T2的当前值到300后M20从ON变OFF、M21从OFF变ON同时T3当前值从0开始增加这一连串动作必须严格同步。4.5 仿真通过后还需要做什么仿真通过不代表联调就能顺利。我的习惯是在仿真确认逻辑正确之后先把所有时间参数从提速状态恢复到设计值再把所有强制信号清除然后做一轮连续运行测试。玻璃冲洗程序连续跑10个循环交通灯程序连续跑两个完整周期大约66秒确保步进不会卡在某个中间状态。这一步看起来费时间但能避免后面接上组态后还在一遍遍改程序重新编译的麻烦。组态联调时你希望程序是稳定的把调试精力集中在通讯和画面上。5. MCGS组态画面构建把软元件状态变成看得见的动效5.1 MCGS工程结构的理解MCGS嵌入版组态软件初次打开会觉得界面有点老但它的工程结构其实很清晰设备窗口负责和PLC通讯用户窗口负责画面绘制实时数据库负责变量管理运行策略负责脚本和联动逻辑。有一个概念必须提前弄清楚MCGS里不能直接用Y0、M10这种PLC地址去绑画面你必须先在实时数据库里建立变量然后在设备窗口里把变量和PLC的软元件地址关联起来最后在用户窗口里把图元的动画属性绑定到这些变量上。整个链路就是“PLC软元件 → 设备通道 → 实时数据库变量 → 图元动画”。5.2 设备组态让MCGS认识你的PLC在设备窗口里双击“设备0”打开设备组态添加设备驱动。MCGS自带三菱FX系列编程口驱动如果你的PLC是FX3U实物通过编程口线连接选好COM口号和通讯参数就行。这里要特别说一个很多人卡住的地方MCGS的“连接方式”下拉框是灰色的无法选择。这个问题的根因通常是当前选中的设备驱动不支持你选择的通讯方式或者驱动类型没选对。你先在设备工具箱里确认添加的是“三菱FX系列编程口”而不是“三菱Q系列”或者其他型号然后在设备属性里把“通讯方式”选成“RS-232”连接方式才能激活。如果是纯仿真环境联调也就是PLC那边是GX Simulator虚拟PLCMCGS是不能直接通过真实COM口读到数据的。我有三种方案可以绕过去方案一用虚拟串口工具比如VSPD创建一对互联的COM口GX Simulator的通讯设置指向其中一个MCGS设备驱动指向另一个。这个方案在部分驱动版本下能用但配置步骤繁琐通讯稳定性一般。方案二MCGS不连虚拟PLC直接改用“模拟运行”方式在MCGS内部用脚本模拟PLC状态变化把画面先做出来。这个方案适合先开发界面、验证显示逻辑。方案三最简单也最推荐——程序逻辑验证用GX Simulator完成组态联调时如果有实物PLC更好没有实物PLC就用MCGS的模拟运行方式。毕竟这篇文章的核心是“模型和组态”而不是纠结通讯协议。5.3 玻璃冲洗画面的组态对象与动画连接新建一个用户窗口命名为“玻璃冲洗画面”。用MCGS图元工具箱里的矩形、椭圆、线条把传送带、玻璃片、喷淋头、风机画出来。动画连接的关键点传送带电机Y0为ON时传送带上的玻璃片图形沿水平方向移动。选中玻璃片图元在“动画连接”属性里选择“水平移动”连接变量设为Y0对应的实时数据库变量移动距离按画面像素设置。喷淋电磁阀Y1为ON时喷淋头喷出的水柱颜色变蓝。这里我用“颜色变化”属性把水柱图元的填充颜色绑定到Y1变量ON时显示蓝色OFF时显示灰色。风机Y3为ON时风扇叶片图元做“旋转”动画。MCGS的旋转动画不支持变速只能做匀速不过演示足够。按钮控件方面在画面上放一个“启动”按钮和一个“停止”按钮。按钮的“按下动作”脚本可以写!WriteToDevice(X0, 1)这个脚本的作用是把X0强制写入为1模拟按钮被按下。松手动作里再写!WriteToDevice(X0, 0)如果你用的是模拟运行方式这串脚本同样有效因为变量最终还是映射到PLC软元件地址上。5.4 交通灯画面的组态对象与动画连接新建另一个用户窗口命名为“交通灯画面”。画一个十字路口两条道路交叉四个方向各放一组红黄绿圆灯。每个圆灯的动画连接用“可见度”属性比“颜色变化”更可靠。可见度的意思就是变量为ON时图元可见OFF时图元隐藏。具体映射图元连接变量可见条件东西绿灯Y41可见东西黄灯Y51可见东西红灯Y61可见南北绿灯Y71可见南北黄灯Y101可见南北红灯Y111可见这样当PLC里M20相位标志为ON时Y4输出为ON画面上的东西绿灯就会亮起Y6为OFF时东西红灯图元隐藏。模拟出来的效果和真实路口红绿灯切换完全一致。如果还要加倒计时显示就在PLC程序里把T2到T5的当前值换算成剩余秒数存入D0到D3寄存器。MCGS里放一个“标签显示”控件连接D0变量设置整数输出格式就能在路口旁边显示东西方向剩余秒数。5.5 组态画面的运行与常见显示问题MCGS组态环境里点击“进入运行”按钮画面就会全屏运行。此时如果硬件链路没问题画面上的动画会跟着PLC输出变化。我遇到过最常见的显示问题是变量刷新太慢画面动作看着很卡。MCGS实时数据库里每个变量都有刷新周期设置默认可能几百毫秒把关键变量比如Y0到Y11的刷新周期改成50毫秒画面动作就会流畅很多。另一个问题是按钮写了脚本但点了没反应。先检查设备是否处于运行状态再检查脚本语法最后看实时数据库变量有没有正确连到设备通道。很多时候问题出在变量名拼写错误MCGS对大小写不敏感但变量名必须和设备通道名完全一致。6. 联调踩坑记录与后续扩展方向6.1 联调最常见的三个“假故障”把GX Simulator和MCGS真正联起来的时候我踩过的坑大概能列出一页纸但最典型的是这三个。第一个通讯方式不一致。GX Simulator是一个软件PLC它没有物理串口MCGS却默认去读COM1两边自然对不上。如果你确实要做纯虚拟联调就得用虚拟串口工具先创建一对COM口然后GX Simulator的“通讯设置”指向一个MCGS设备驱动指向另一个两边参数都设成一致才能通。第二个PLC没在RUN状态。GX Simulator写入程序后默认是运行状态但如果你在调试过程中点过“停止模拟”或者触发了程序的停止条件MCGS读到的就全是OFF状态画面一动不动。这时候先回GX Works2里确认虚拟PLC的运行指示灯是亮的。第三个寄存器类型选错。MCGS设备通道里X和Y是位变量D是字变量M是位变量。如果你在设备通道里把三菱FX的X0通道类型选成了字寄存器读取回来的值就是乱码画面显示根本不正常。设备通道的寄存器类型必须和PLC软元件一一对应。6.2 程序结构上的优化建议目前这个模型是单主程序结构玻璃冲洗和交通灯的逻辑平铺在同一个主程序里。实际工程项目里建议把它们拆成两个子程序主程序里用CJ条件跳转或者CALL调用分别执行。这样做的好处是修改交通灯逻辑时不会误碰玻璃冲洗的程序段而且可以单独把某个子程序禁用调试更方便。初始化也值得专门做一步。用M8002初始脉冲把M10到M14、M20到M23全部复位确保上电后系统处于待机状态而不是卡在某个中间步进。我见过不少学生的程序上电后交通灯直接跳到南北绿就是因为少了初始化复位。6.3 时间参数的调整技巧仿真和演示场景下时间参数要有两套方案。调试方案所有时间缩短10倍K300改成K30K50改成K5两分钟内就能看完交通灯完整周期。演示方案恢复K300、K50、K30让观众看到真实的红绿灯节奏。组态画面里最好加一个“周期显示”标签把当前相位剩余秒数显示出来。这不仅是演示效果好调试时也能直接看出来时间参数是不是按预期走的。6.4 扩展方向这个模型做完再往上加功能的空间非常大。交通灯可以加夜间模式用一个定时范围判断比如晚上10点到早上6点所有方向只显示黄灯闪烁闪烁可以用M8013实现。玻璃冲洗线可以加产品计数玻璃离开冲洗区时X2下降沿触发计数器C0组态画面显示累计产量。十字路口可以加左转箭头灯相位变成四相位乃至六相位控制这才是工程现场真实需要的逻辑复杂度。如果你想把模型做得更完整还可以用MCGS的报警功能把玻璃冲洗的水泵过载、风机故障做成报警窗口PLC里用特殊辅助继电器M8000之类的状态去触发。这些扩展方向都不需要改动模型骨架程序上增加条件组态上增加画面就能不断深化。我自己的习惯是每次做完这样一个组合模型都会把梯形图程序、组态工程、I/O分配表、操作说明打包成一个完整文件夹存档。下次再遇到类似的任务改改工艺参数就能复用。这套“PLC加仿真加组态”的套路从学习到工程演示都够用而且它逼着你在写每一段逻辑时都去想“画面上要怎么显示”这恰恰是很多PLC教材不会教你的东西。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价