ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

西门子博图五层电梯全自动仿真项目实战:从IO规划到HMI联调

西门子博图五层电梯全自动仿真项目实战:从IO规划到HMI联调 如果你正在学西门子博图TIA Portal又不想只对着书本做那些点灯、跑马的例程那“单部五层电梯全自动仿真”应该列入你的练手清单。这项目说难不难说简单也绝不简单——五层楼几乎把PLC项目常用的东西全沾了一遍数字量输入输出、定时器、置位复位、数据块、HMI画面联动、联合仿真调试。这篇文章就是我从零把它跑通的全过程记录从IO规划到梯形图逻辑再到HMI画面和PLCSIM联调最后附上我调试时踩过的坑。不管你是刚能写几段梯形图的入门选手还是想找个完整项目练手的进阶玩家这套流程都值得照着走一遍。1. 动手前先想清楚五层电梯的“逻辑骨架”是什么1.1 电梯控制的核心其实只有四个问题先别急着打开博图写程序把电梯当成一个“能自己思考的盒子”你会更快抓住重点。一台轿厢停在某层有人按了5楼内呼它要完成的是关门、上行、到5楼平层、开门、下人。拆开看整个过程就四个问题——人在哪召唤呼叫登记、电梯该往哪去方向判定、到了没有楼层检测与平层、到了之后怎么办开关门控制。这四个问题就是程序的主干。做仿真的意义在于你不能靠手速去拨动外部开关模拟电梯逐层跑得靠逻辑自己走。所以“全自动仿真”的重点不是画面做得好看而是这台电梯在逻辑上真的能自己决定去哪一层、什么时候停、什么时候开门。画面只是让你看得见这套逻辑在跑。很多新手一上来就纠结动画效果结果逻辑没闭环电梯要么不动要么像喝醉了酒一样乱窜这就是本末倒置了。1.2 为什么推荐S7-1200 PLCSIM 博图HMI这套组合我用的组合是S7-1200 PLCSIM 博图内置HMI仿真。选S7-1200不是因为不能用S7-1500而是因为入门成本最低指令集全、支持PLCSIM仿真、组态简单绝大多数教学资料都以它为蓝本。PLCSIM是博图自带的逻辑仿真器能把程序下载进去跑还支持变量表强制和定时器仿真对纯逻辑验证完全够用。如果你手头没有实物再配一个HMI画面仿真就能体验“按下呼叫按钮电梯自己动起来”的完整闭环。至于博图版本V15.1、V16、V17我都试过核心流程差异不大。唯一要注意的是PLCSIM版本必须和项目版本一致高版本打开低版本项目一般会自动升级反向就不行。另外PLCSIM Advanced和普通PLCSIM是两回事Advanced偏通信和高级仿真本案例用普通PLCSIM就够了别一开始就把工具链搞复杂。2. 先把IO清单和程序结构固化下来2.1 输入输出分配表一张表解决所有地址混乱写程序之前先把IO表和关键数据结构落实。五层电梯有一个经典陷阱1层只有上行外呼5层只有下行外呼中间层才有上和下两个外呼按钮。这个东西不在规划阶段想清楚写寄存器的时候就会漏位。我当时的IO分配表如下信号类别地址说明输入 I0.0~I0.41~5楼平层感应实体电梯由平层开关提供仿真中用中间逻辑替代输入 I0.5开门到位限位门开到底部时置1输入 I0.6关门到位限位门关严时置1输入 I0.7开门按钮轿厢内点动开启输入 I1.0关门按钮轿厢内点动关门输入 I1.1~I1.5内呼按钮轿厢内选层1~5输入 I2.0~I2.3外呼上行按钮1~4层上行召唤输入 I2.4~I2.7外呼下行按钮2~5层下行召唤输出 Q0.0上行运行接触器驱动电梯上行输出 Q0.1下行运行接触器驱动电梯下行输出 Q0.2开门输出驱动开门机构输出 Q0.3关门输出驱动关门机构输出 Q0.4~Q0.6楼层译码输出供指示灯或HMI快速读取输出 Q1.4上行方向指示点亮上行箭头输出 Q1.5下行方向指示点亮下行箭头这里说明一下内呼、外呼、楼层位置这些状态我在仿真里并不是全部塞进物理IO点而是用DB块保存再由HMI直接读取。理由很简单——如果所有状态都走输入点PLCSIM里需要强制一大批变量调试画面会非常混乱。IO点留给真正有物理对应关系的信号逻辑状态放DB块这是工程里很实用的习惯。2.2 数据块设计状态和命令要分开存数据块是整个程序的“记忆容器”。我建了一个名为Elevator_Data的全局DB里面放下列变量CurFloorINT当前逻辑楼层范围1~5TarFloorINT当前目标楼层DirectionBOOLTRUE上行FALSE下行DoorOpenBOOL门开状态Call_Inner[1..5]BOOL数组各层内呼登记Call_Up[1..4]BOOL数组各层上行外呼登记Call_Down[2..5]BOOL数组各层下行外呼登记RunTimer模拟楼层间运行的计时器剩余值为什么用DB而不全用M区一是DB块可读性强看变量名就知道含义二是HMI组态时可以直接从DB里拖变量省去转来转去的麻烦三是一直用M区程序写大了你会被地址表淹没改一处逻辑要找三处位置。对于这种带数组需求的场景DB是最合适的容器。注意在DB属性里勾选“允许从HMI进行访问”否则画面连不上。2.3 程序结构别把全部逻辑堆在OB1里拿到项目第一步不是写而是搭结构。我建议OB1只做总调度把功能拆到几个FC里FC100负责楼层位置推进FC200负责呼叫登记与复位FC300负责方向判定和目标选择FC400负责运行与开关门控制。每个FC只干一件事互相之间通过DB数据交换。拆开的最大好处是出问题时定位快。电梯不动先看FC300的方向输出对不对门一直不开就去看FC400的触发条件。如果所有Network都堆在OB1上下几百行程序滚动屏幕都累。很多人后来改程序改到怀疑人生不是逻辑有多难是结构太乱把自己绕进去了。3. 程序核心逻辑呼叫、定向、停靠、开关门怎么落地3.1 虚拟平层发生器全自动仿真的关键设计这一步可能是整个项目里最需要“想明白”的地方。真实电梯的位置信息来自安装在井道里的平层感应器或编码器电梯到了某一层该层的感应信号才会置1。但在PLCSIM仿真里没有物理传感器能给信号如果靠人工强制输入模拟楼层信号那电梯就谈不上“全自动”。我的处理办法是在PLC内部写一个“虚拟平层发生器”把CurFloor当作电梯的虚拟位置用运行定时器驱动它增减。具体逻辑是电梯接收到上行指令后Direction置TRUE此时每运行2秒用TON定时器实现CurFloor加1模拟电梯上升一层下行时每2秒减1到达TarFloor时停止并触发开门。这样电梯会真的“自己跑”而且跑的时候可以在HMI上看到当前楼层实时变化。这个设计相当于用内部逻辑替代了实体传感器。要清楚它和真实工程的区别实梯的速度、减速、平层精度靠变频器和编码器闭环仿真里简化成定时器固定推进。但这套做法对逻辑验证来说完全够用它也解释了为什么很多仿真项目能“无人值守”地跑起来。代码上就是一个TON和一个上升沿加计数非常直接。3.2 呼叫登记与复位自锁保持千万别搞丢呼叫登记的逻辑用一句话概括按下按钮置位对应的呼叫位保持住直到该层响应完成才复位。很多人写的第一个版本用纯触点判断松开按钮呼叫就没了电梯当然不动。内呼登记当电梯停靠在某层并且该层内呼位为TRUE时开门后复位该内呼位。外呼登记要分方向上行外呼由电梯上行停靠时复位下行外呼由下行停靠时复位。这里有个很微妙的细节——如果电梯上行经过2楼而2楼登记的是下行外呼那么本次不停呼叫要保留到电梯换向下行时再响应。这也是外呼为什么要分上下方向的原因。复位时机同样关键。我最初做的时候电梯刚到站就把呼叫位复位了结果开门动作还没执行程序已经不知道这层为什么停的导致门开了一下又立刻关门走了。正确做法是停靠信号触发后先开门开门到位后再复位该层的相应呼叫位。把复位动作和门动作绑定就不会出现“到了不停留”的尴尬。3.3 方向判定与目标选择学会“顺路优先”方向判定是电梯的灵魂我的要求不高——先做“顺向就近、逐层响应”。电梯每完成一次开关门都会重新扫描所有呼叫当前方向为上行时如果楼上任一楼层有未响应的内呼或上行外呼就继续上行所有同向呼叫都响应完了再检查低楼层有没有下行外呼有则换向两头都没有呼叫电梯待机在当前楼层。用梯形图写这套扫描会有一点绕因为要连续比较多个楼层位。我的经验是方向判断和目标选择这种“数学味道重”的逻辑用SCL语言写FC300最舒服写出来的可读性比梯形图高一个档次。举个例子在SCL里判断“哪一层有呼”只要一句条件筛选就能算出新的目标楼层而梯形图要写一大堆比较和OR串接调试时眼睛看花。还有一个经典误区目标楼层不是一上来就定死的。电梯上行时先扫描高于当前层的所有呼叫取最高一层作为“行程终点”沿途哪层有顺路呼叫就在哪层停靠。到了最高呼叫层再检查反向呼叫。注意“顺路”两个字它决定了电梯不会在2楼上行途中跑去停3楼的下行外呼——明明方向都不对停了只是浪费大家时间。3.4 运行与开关门控制互锁和门区必须较真运行控制的核心是“安全”两个字。虽然只是仿真程序里也要体现职业习惯上行接触器和下行接触器必须互锁即上行输出为ON时下行输出强制为OFF反过来也一样。没有这个互锁真实电梯里就是短路事故仿真里也是逻辑错误。用普通常闭触点互相串在对方的线圈回路里就可以轻松实现。门的控制我按这个顺序写开门信号开门按钮或停在正确楼层→ 开门输出 → 开门到位位 → 开门延时5秒 → 关门输出 → 关门到位 → 门内禁止运行解除。关键条件是只要门没有完全关闭运行输出就不能释放。所以在运行逻辑里我把DoorClose信号串在运行允许线路上门不到位电梯就是不动。这是最容易被忽略的环节很多人调试遇到“电梯门开着一动不动”就是门信号和运行允许没挂上钩。4. HMI画面设计让仿真看得见、可操作4.1 画面布局一个简单的井道示意就够了画面不需要花哨但要把关键信息都放进去。我的主画面布局从上到下是楼层显示区、电梯井道示意图、操作按钮区。井道示意图是一张五层的简笔画每层标注1~5楼轿厢位置用一个方块表示放在对应的楼层中间。旁边配上方向箭头指示“上行中”和“下行中”。操作按钮区包含内呼1~5按钮、外呼上行按钮1~4层、外呼下行按钮2~5层、开门和关门按钮。每个外呼按钮旁边加一个状态显示圈灯亮表示该呼已经被登记灯灭表示已响应复位。这样一眼就能看清楚电梯当前要响应哪些呼叫调试时特别有成就感——你按下5楼内呼按钮灯亮电梯自己上行到5楼开门灯灭整个闭环看得清清楚楚。4.2 变量连接与动画让画面跟着PLC动起来HMI画面和PLC的“对话”完全靠变量连接。楼层显示我用两种方式同时做一个是数字量显示直接把CurFloor送到IO域另一个是井道里的轿厢方块用“移动”动画配合Y方向位置属性让它从1楼平滑移到5楼。方向指示用两个图形元素绑定Direction变量的可见性属性上行时为绿色箭头下行时为红色箭头。这里有一个博图HMI的小技巧按钮的“按下”事件不要选SetBit半吊子操作直接置位对应的DB变量但注意HMI上的按钮是点动操作程序里的呼叫登记是自锁保持所以按一下后位就置1了之后的保持逻辑交给PLC不要用HMI脚本反复写值否则容易和PLC程序打架。变量连接最容易翻车的点在于DB变量在HMI里能不能访问取决于前面说的“允许HMI访问”勾选项。还有数据类型必须严格一致CurFloor是INTHMI IO域格式也要选十进制整数选成字符串或实数都会显示异常或连不上。4.3 三步启动联合仿真PLCSIM和HMI手拉手跑起来联合仿真启动顺序是有讲究的我惯用的三步流程是先启动PLCSIM把PLC程序编译下载进去点运行。确认变量表里CPU处于RUN状态各DB变量能正常监控。右键HMI画面选择“启动仿真”或者在运行系统设置里勾选仿真模式此时HMI运行界面会自动弹出并尝试连接PLC。如果HMI画面显示通信中断优先检查三件事PLC的IP地址和HMI连接组态里是否一致S7连接是否处于“在线”状态HMI设备版本是否超出当前画面组态支持范围。绝大多数联调失败都是这三点和复杂的逻辑关系不大。5. 仿真调试实录与高频问题排查5.1 最常翻车的三个场景第一个是“电梯完全不动”。我调试时出现过方向变量一直是FALSE查了半天发现是呼叫数组的索引写错——我用1~5的数组来做内呼但索引从0开始的值忘了处理导致5楼呼叫永远访问不到。这种情况在SCL里最坑数组索引越界不会报错但逻辑就是不对。第二个是“电梯一路狂奔不经过中间层”。这是因为我的停靠判断条件里用了CurFloor TarFloor的等值比较但虚拟平层发生器是绝对位置递增一旦中途由于上升沿漏掉目标楼层这一帧等值条件永远不成立。解决方法是把停靠条件改成“当前位置在目标楼层范围内”或者保证楼层推进和停靠判断在同一扫描周期内同步执行。第三个是“门开后就再也不关门”。原因是关门定时器逻辑放在开门到位位之后但仿真中开门到位位我没有正确置位导致整个关门分支从未被激活。排查时用变量表监控开门输出和开门到位位马上就会发现其中一个信号是死的。5.2 用变量表当“照妖镜”调试PLCSIM变量表就是你的示波器。我把所有关键中间量都拖进一个监控表CurFloor、TarFloor、Direction、内呼数组、外呼数组、开门到位、关门到位。运行中按一下内呼按钮观察这些变量的联动变化逻辑就一点一点显形了。我最常用的排查方法是“单向追踪”先确认呼叫位有没有置1没有就是按钮或登记逻辑问题呼叫位是1但方向不变就去查方向判定条件方向有了但楼层不动去查虚拟平层发生器有没有被触发楼层动了但不停去查停靠判断条件。一步一步追一次解决一个问题千万不要同时怀疑三四处可能的原因否则你会抓狂。5.3 避坑清单与经验心得我把这次项目遇到的坑整理成清单给准备照做的朋友避雷虚拟平层发生器的时间基准建议用TIME类型不要用计数器的INT累加仿真里容易受扫描周期影响。所有呼叫位必须有且仅有一个复位位置复位位置不要放在“到站瞬间”放在“开门到位后”更稳。门未关好禁止运行这条必须写在运行允许条件最前面。PLCSIM下载程序后会重置DB初值如果你的电梯初始楼层不是想启动的楼层应该用一个初始化FC在第一个扫描周期写CurFloor : 1。HMI按钮置位DB变量之后实际动作还要靠PLC扫描周期执行不要在HMI上连续快速点击同一个按钮会造成重复置位但无法复位。仿真中一切正常不代表实机安全尤其是接触器互锁和急停逻辑仿真里看效果实机里保安全。调试时我会在程序里故意加入“故障注入”——比如强行少置一个楼层信号观察电梯会不会误判楼层。全自动仿真项目最怕的不是逻辑复杂而是你以为逻辑对了实际上系统在“假跑”只是因为输入信号凑巧没触发问题分支。6. 从仿真到实机还差这几步仿真项目跑通后离一台能进井道的真实电梯还有很长的路但从技术角度看你已经掌握了电梯控制的主干。实机与仿真的差异集中在三个方面一是传感器换成真实的平层开关、门区开关和限位开关程序里要把“虚拟平层发生器”替换成传感器输入读取二是运行控制要加变频器速度曲线和制动过程由驱动层完成PLC只管方向和使能三是安全回路必须完整急停、超载、断绳保护等信号都要接入硬接线电路不能只在程序里模拟。编程习惯上我特别想强调注释和版本管理。电梯这项目看起来小但一个DB块从初版到最终版变量语义会改很多次。我资料包里留下的版本记录显示光是方向判定逻辑我就改过五版。每次修改都写一句注释事后回看能省两个小时的回忆时间。如果你也准备拿这个项目练手我建议按这个顺序推进先IO表再数据块再逻辑最后画面。别反过来画面做完回头改逻辑会改到怀疑人生。仿真这个环境最大的好处就是允许你反复试错改错了重新下载就行把错误都炸在PLCSIM里比炸在真实设备上舒服太多了。
返回列表