
先回答标题那个问题能真能而且六层电梯的完整逻辑我就在电脑上跑通过轿厢移动、楼层显示、内外呼按钮、开关门动画全部实时联动。搞工控的都清楚实物调试电梯是最磨人的活之一井道里放线、限位开关对位置、安全回路一遍遍确认经常两个人忙活一整天改一版程序还得楼上楼下跑个没完。三菱FX系列PLC加上GX Works2离线仿真再接一套MCGS组态画面就是典型的“不上电、不接线、不下井道”先把逻辑全验证明白的路子。这篇文章适合做毕设、备战技能竞赛、项目前期预调试的朋友照着做你也能在电脑上把六层电梯完整仿真出来。这套方案最核心的价值不是省了一台PLC的钱而是把“程序逻辑验证”和“人机界面调试”这两件事完全解耦。程序不对在仿真里改一次只需要几秒钟。画面按钮没反应不用怀疑是接线松了还是保险烧了直接看通信和变量地址就行。我这边用MCGS嵌入版组态环境通过虚拟串口和三菱GX Simulator2通信整个调试过程肉眼可见、逻辑流畅完全不比实物调试差多少。1. 为什么非要用仿真跑电梯实物调试到底卡在哪1.1 实物调试电梯的坑搞过的人都懂电梯控制是工控里典型的“逻辑不难、环境要命”的项目。拿到现场一看六层电梯从井道到轿厢再到每层的呼梯盒满打满算几十个输入输出点。每一层要装平层感应、上下行限位、门区开关轿厢上还要挂随行电缆光把这些线理顺就得大半天。最难受的是调试阶段一个人在轿顶看信号一个人在控制柜改程序两个人对讲机沟通改一次输出逻辑就要上下跑一趟效率别提多低。还有个隐蔽的坑是安全回路。实物调试时门锁回路、急停、限位一不对整个系统就是不动排查半天发现就是一根线虚接。这种问题在程序逻辑层面根本看不出任何毛病白白消耗大量时间。更别说有些场合电梯井道还没完全完工现场环境灰尘大、光线暗工具都展不开。所以很多老工程师现在都养成了习惯不管项目多急先在电脑上把程序和人机界面彻底调通再带着验证过的方案去现场。1.2 为什么选三菱FX系列加MCGS这套组合我接触过的仿真方案不少西门子Smart系列也能做类似的事三菱FX的优势主要在几个方面。首先是GX Works2自带GX Simulator2仿真器不需要额外装第三方模拟软件梯形图写完直接就能跑。而且这个仿真器支持通过串口外部通信这正好给MCGS留了接口两个软件在电脑上就能互相读写数据。MCGS就更不用说了国产组态软件里上手最快的之一做按钮、指示灯、动画连接都是拖拽式的比那些要写一大堆脚本的组态工具友好太多。MCGS的嵌入版可以模拟运行不需要接真实触摸屏硬件工程做完直接点“模拟运行”就能和人机交互。两个软件加一个虚拟串口工具硬件成本基本是零一台普通办公电脑就能跑起来。1.3 这套仿真方案的完整工作原理很多第一次接触的朋友会问GX Simulator2不是PLC仿真器吗MCGS不是触摸屏组态软件吗这两者怎么通信其实原理特别简单GX Simulator2在电脑里模拟出一台PLCMCGS模拟出一台触摸屏中间用虚拟串口软件把两台“虚拟设备”连起来。具体数据流向是这样的你在MCGS画面上点击一个楼层按钮MCGS通过串口写入三菱PLC的M寄存器GX Simulator2里的程序扫描到这个信号经过逻辑运算把运行输出、开门输出、楼层数据等写到对应的Y或者D寄存器MCGS再从这些地址读回来驱动画面上的轿厢移动、指示灯点亮、数码管变化。这里有个非常关键的经验必须先说MCGS向仿真PLC写X输入区是写不进去的。X区是输入映像区真实PLC里X状态靠外部接线决定外部通信没法直接改。所以做联合仿真时按钮输入我全部用M寄存器程序里再映射到实际工程要用的X点。这样既能在MCGS里点按钮触发仿真以后接实物时把映射关系一换就行这个设计后面还会细讲。2. 六层电梯控制程序和画面的核心设计2.1 六层电梯的I/O点规划照着建变量就行做任何PLC项目第一步永远是列I/O表电梯也一样。六层电梯看起来功能多其实归纳下来就是三种信号呼梯、到位、运行输出。我以三菱FX3U为例给你一套可以直接用的分配方案。信号类型功能说明仿真地址实物建议地址输入1-6层内呼按钮M0-M5X10-X15输入2-6层上召按钮M6-M10X20-X24输入1-5层下召按钮M11-M15X25-X29输入开门按钮M16X30输入关门按钮M17X31输入平层信号可选M18X32输出上行运行Y0Y0输出下行运行Y1Y1输出开门输出Y2Y2输出关门输出Y3Y3输出运行指示Y4Y4寄存器当前楼层D0D0这套分配的精髓在于仿真地址和实物地址分开。内呼按钮在实物工程里接X10到X15但在仿真工程里对应M0到M5程序内部统一用一个“内呼登记位”M100到M105作为保持信号仿真和实物都去置位这些保持位。这样MCGS只管写M0程序逻辑把它转成M100保持将来接实物时只需要把X10转成M100逻辑一点不用动。2.2 方向判断与顺向截梯的核心逻辑六层电梯最难的地方不是停层而是方向判断。我给你一个经典场景电梯在3层正在上行此时4层有人按了内呼5层有人按了上召2层有人按了下召程序应该怎么响应正确顺序应该是先停4层继续上行停5层然后换向下行到2层。这个逻辑叫“同向优先、顺向截车、最远反向换向”。核心算法拆开就三步。第一步是呼叫登记和汇总每个呼梯信号都要有自保持到达对应楼层才复位。第二步是方向判断无方向时以当前楼层为基准有目标在上就上行有目标在下就下行正在上行时只要还存在比当前层高的目标就保持上行除非所有上方目标都清了才换向。第三步是停层判定当前楼层存在目标且运行方向与该目标一致就执行减速停层、开门、复位该层呼叫。我这边用指令写一个方向置位的示意逻辑你感受一下整体思路* 上行条件简化示意D1为所有登记目标中的最高层 LD D1 D0 * 有比当前层更高或等于的目标 ANI M200 * 不在开门状态 ANI M51 * 当前不在下行 SET M50 * 置位上行运行标志 * 下行条件 LD D2 D0 * 所有登记目标最低层低于当前层 ANI M200 ANI M50 SET M51D0是当前楼层D1是所有目标层的最大值D2是最小值。实际工程里D1和D2可以通过比较指令或循环扫描更新也可以在MCGS里用脚本算好了送给PLC但既然用了PLC仿真建议全部在PLC里做这样将来移植到实物工程时逻辑完全一致。2.3 MCGS画面的动画变量怎么规划MCGS画面设计有个很容易犯的错就是把标题文字、背景这些装饰先做了一大堆结果核心的变量规划一塌糊涂最后联调时到处对不上。我的习惯是先建变量表再画画面就像PLC先写I/O表再写程序一样。这一套工程我建了这么几个关键组态变量你可以对照参考MCGS变量名关联PLC地址用途InCall1-InCall6M0-M5内呼按钮动作UpCall2-UpCall6M6-M10上召按钮动作DownCall1-DownCall5M11-M15下召按钮动作CurFloorD0当前楼层显示和轿厢定位UpRunY0上行指示灯DownRunY1下行指示灯OpenDoorY2开门动画触发CloseDoorY3关门动画触发画面布局分三块左边画井道侧视图用矩形加楼层标号表示建筑结构中间放轿厢图形绑定“垂直移动”动画右边放呼梯按钮和楼层数码管显示。轿厢的垂直移动不要直接绑定CurFloor因为楼层号是跳变的轿厢会一格格瞬移太假。正确做法是脚本里做一个中间变量CarPos让它每次向目标位置逼近一定比例这样轿厢就有加速减速的平滑感后面联调那节会详细写。3. 从零搭起联合仿真环境完整实操流程3.1 准备工作和虚拟串口配置工欲善其事必先利其器。这套方案需要三样软件GX Works2安装时勾选GX Simulator2、MCGS嵌入版组态环境、虚拟串口工具我用的是VSPD体积小、操作简单网上很容易找到。安装时建议把所有软件都右键“以管理员身份运行”尤其是VSPD有些版本权限不够会创建虚拟串口失败。打开VSPD在界面里添加一对虚拟串口比如COM3和COM4。原理就是模拟一根真实串口线一头插COM3另一头插COM4两边数据互通。这里有个细节千万不要选已经被系统占用的COM口也别选你鼠标键盘用的USB转串口免得把正常工作搞乱。创建完成后可以在设备管理器里看到这对串口代表虚拟线已经拉通了。3.2 GX Works2仿真与MCGS设备通信的连接程序编写和编译通过之后点GX Works2工具栏上的“模拟开始”启动GX Simulator2。这时仿真PLC已经在后台跑了但默认状态它没有对外通信的端口需要在GX Simulator2的菜单里找到串口通信设置把模拟PLC的编程口映射到刚才创建虚拟串口的COM3。不同版本菜单名称略有差异有的叫“串口通信设置”有的直接是下拉小图标核心操作就是给这台虚拟PLC分配一个COM口。接着打开MCGS工程在设备窗口添加“三菱FX系列编程口”驱动设备串口号选COM4通信参数按三菱FX编程口默认设置9600波特率、7位数据位、偶校验、1位停止位。这里特别注意模拟器那边映射COM3时的参数要和MCGS这边改成一致否则两边鸡同鸭讲就是通信不上。MCGS实时数据库里把前面列的变量全部建好逐个关联设备通道。通道地址填法很直白M0、D0、Y0这样填。填完在设备窗口点“测试”如果看到设备状态正常、变量能读到值说明GX Simulator2和MCGS已经贯通这一整套联合仿真环境就算通了。我第一次调通的时候看到MCGS里能实时读出一个和PLC程序里一模一样的D0值那种感觉确实爽。3.3 让电梯动起来组态脚本和动画联调环境通了只是开始真正让电梯“活”起来要靠两层配合。PLC那层用定时器模拟电梯运行我是这么做的电梯上行时每1秒D0加1下行时每1秒D0减1当D0等于目标楼层时停止增减并打开开门输出。这样D0代表“电梯当前真实楼层”虽然简化了加速减速过程但逻辑层面已经完整覆盖了运行、停层、开门、延时自动关门这些动作。MCGS那层要做平滑动画。在用户窗口的循环脚本里写一个插值逻辑让轿厢位置慢慢追着D0走每执行一次脚本轿厢位置向目标位置移动一小段距离比例系数取0.3左右效果比较好移动太快有瞬移感太慢又显得拖沓。示意如下 MCGS循环脚本周期200ms CarPos CarPos (CurFloor * 100 - CarPos) * 0.3假设每层楼对应的画面高度是100像素6层就是600像素轿厢图形垂直移动的方向和量程按这个像素范围配置。联调时先从1楼呼叫到5楼观察轿厢是不是平滑上升、5层停靠后开门动画是否到位、楼层数码管是不是跟着实时变化。再试一个中途呼叫比如从1楼到5楼期间3楼来了一个上召看看电梯是否在3层临时停靠。这一步能跑通六层电梯的核心逻辑基本上就是稳的了。4. 仿真调试中我踩过的坑和排查技巧4.1 通信连不上的几种典型原因通信问题是这套方案里出现频率最高的故障我整理了一个速查表照着排一次能省半天时间故障现象可能原因解决方法MCGS设备状态显示故障红叉虚拟串口没创建成功打开VSPD确认COM3和COM4处于连接状态设备状态正常但变量值全为0PLC地址映射写错检查MCGS通道地址是否对应PLC程序实际使用的地址数据能读但写入没反应串口参数不一致确认波特率、数据位、校验位在两边完全一致启动MCGS模拟运行就卡死循环脚本周期太短把脚本周期从100ms改成200ms以上还有一个容易被忽略的坑是杀毒软件。有些安全软件会把虚拟串口驱动当成外设拦截导致MCGS一直找不到串口。安装VSPD时如果遇到驱动被拦截临时关闭防护软件装完再打开实测有效。4.2 MCGS按钮按了没反应先别怀疑程序这个问题的坑特别典型我见过不少人在程序里加了一堆调试指令结果最后发现是地址写法的问题。MCGS按钮按下没反应先排查三件事。第一按钮连接的变量是否写到了PLC可写区。如果你用的是X区那就是白写X区外部通信根本写不进去这就是前面强调要用M区做输入的原因。第二按钮类型是不是设成了“置位/复位”如果设成“按1松0”按下的时候M0会被立即复位看起来就像没反应。第三PLC程序里呼叫保持逻辑是不是写对了确认置位M0后程序里的对应登记位能自保持。我调试时习惯在MCGS画面上专门放几个“调试指示灯”直接关联PLC内部的M100这种登记位。按钮一按灯亮不亮一目了然。灯亮了程序没动作问题在逻辑灯不亮问题在通信或者按钮变量本身排查范围一下就缩小了。4.3 动画和程序动作不同步怎么办最后说一个观感上的问题。有些人做出来的仿真楼层显示已经到5楼了轿厢动画还在3楼慢慢爬主要原因就是动画直接绑定了D0而不是平滑中间量。前文提过解决办法就是加一个CarPos中间变量做插值别让画面上的轿厢“瞬移”这不仅仅是好看的问题而是能避免调试时误判电梯状态。如果你发现插值太慢轿厢总是慢半拍把0.3的系数调大一点。如果你想做得更仿真可以在PLC里增加每层的运行时间定时器模拟启动加速和减速停车运行过程用T0做时钟D0每隔固定时间增减。这样D0的变化就有快慢之分CarPos插值后的动画也会更接近真实电梯的运行节奏。关于轿厢位置的基准建议别用“楼层号乘以固定像素”这种粗算法因为井道顶部和底部还要留出电梯减速的余量。更好的做法是在MCGS里定义两个变量BottomPos和TopPos分别对应1楼和顶楼的轿厢像素位置脚本里做一个线性映射这样将来改画面布局也不用动PLC程序。5. 个人经验和几个进阶建议这套联合仿真方案我前前后后帮朋友调过好几套电梯程序从两层货梯到六层客梯都有。我自己最大的体会是仿真不是目的目的是让你在写程序的阶段就把逻辑想清楚。特别是方向判断和顺向截车这种逻辑光在纸面上画流程图很多边界情况根本想不到放到仿真里一跑什么楼层反复呼叫、上行途中又来下行召唤、开门超时自动关门这些情况全部暴露出来这时候改代码成本最低。最后分享一个小技巧做MCGS画面时把所有与PLC通信的变量集中放在一个“调试面板”窗口里用表格控件或者就是简单的数值显示把D0、M50、M51、Y2这些关键信号全部展示出来。仿真跑起来的时候一边看电梯动画一边看调试面板的数值变化心里对程序的每一步都清清楚楚。这个过程熟练之后你会发现电气调试里最花时间的“软件和界面联调”环节以后都拿到电脑上就能完成了现场接线调试的时间能压缩一大半。