资讯动态

PLC电梯控制从状态机到组态王:S7-200 SMART梯形图与顺向截梯实战解析

发布时间:2026/10/13 16:04:10 来源:尧图企业网站定制
1. 电梯控制的第一个认知门槛它不是一个程序而是一套状态机1.1 从乘客视角拆解一只三层电梯到底要什么我第一次带学生做PLC电梯控制的时候大部分人的第一反应是电梯不就是一个电机转上去、转下来嘛。真接通电之后才发现电梯复杂的不是电机而是它必须同时应对一堆谁在几楼按了什么按钮的请求并且在正确的位置停下来、打开门、等够时间、再关门继续走。先别急着写梯形图把一只三层电梯的输入输出理清楚再说。输入侧至少有这些轿厢内呼按钮1楼、2楼、3楼对应三个离散输入点外呼按钮1楼只有上行2楼有上行和下行3楼只有下行加起来又是四个离散输入点楼层位置信号每层一个接近开关或干簧管用于告诉PLC轿厢当前停在哪层平层/门区信号轿厢进入楼层感应区后给出允许开门的信号开门到位、关门到位限位用来结束开关门动作。输出侧就比较直白了上行接触器、下行接触器、开门电机/继电器、关门电机/继电器如果带变频器还要输出启停信号和速度给定。模型电梯通常没有真正变频器就用低速点动平层开关停车也能跑通。这套东西拆完你会发现PLC本质上在做的事只有一件不停地回答现在该往哪走到了该停还是该走。这就是状态机思路——每一个时刻系统都处在某个明确的状态里比如上行中、下行中、开门中、关闭等待中状态之间靠输入信号来触发切换。1.2 用步进指令还是用置位复位两种思路都能跑很多教材喜欢把电梯写成一个大梯形图上百行网络从头到尾排下来。我实际用下来觉得对模型电梯来说最稳妥的是把流程分成几个状态块然后用步进继电器或者类似SCR的指令去切换。S7-200 SMART里就是SCR三菱那边叫STL都是干这件事的。你也可以不用步进指令完全靠置位复位做状态机。把上行中下行中开门中各做一个输出标志位程序开头先判断条件再决定要不要把这些标志位置起来或复位。第一次做的话步进指令的优点是逻辑直观调试时翻梯形图容易看懂置位复位的优点是灵活临时加消防返回、检修模式要容易一些。我的建议是初学者先走步进指令跑通以后再用置位复位重构一遍对比一下两种写法的差异这个对比本身就是理解PLC编程最好的练习。1.3 方向判断和顺向截梯电梯最核心的情商很多人的电梯程序能跑但跑起来很傻明明3楼有人往下走电梯刚上行到2楼就折返了或者3楼的人按完下行电梯已经到了1楼还在往上跑。这就要说到方向决策规则也就是工控里常说的顺向截梯、反向不鸟。简化版规则可以写成这样如果当前有上行请求且请求楼层高于当前楼层则进入上行状态上行过程中凡是高于当前楼层的请求都登记按由低到高的顺序逐个响应如果所有高于当前楼层的请求都处理完了才开始响应低于当前楼层的请求下行同理。在我写的三层电梯里外层输入只有5个按钮2楼两个外呼、1楼一个、3楼一个加上内呼三个所以不需要把调度算法弄得太复杂。我用了四个辅助继电器分别表示本层是否有未响应的上行请求和本层是否有未响应的下行请求然后用比较指令找出最高请求楼层和最低请求楼层按方向去响应。这个做法调度三层绰绰有余如果你后续要扩展成五层、八层建议改成数组加循环扫描不过那就是另外一个话题了。2. PLC选型与I/O分配一次性把硬件接线想清楚2.1 为什么选了S7-200 SMART而不是其他品牌市面上能跑电梯控制的PLC很多但做这种教学/毕设项目选型首要考虑不是性能而是你手头有什么工具、有没有现成例程、组态王那边好不好连。我推荐西门子S7-200 SMART的理由很现实价格便宜二手拆机件一大把做模型完全够用官方编程软件自带以太网下载调试配合组态王连TCP/IP很方便学习资料多遇到问题随便一搜就能搜到解决方案。如果你手头是汇川、台达、信捷或者三菱、欧姆龙也完全可以做只是通信参数、软件操作习惯不同。给张表供参考PLC品牌编程软件与组态王连接方式适合场景西门子S7-200 SMARTSTEP 7-MicroWIN SMARTTCP/IPS7协议或Modbus TCP教程多、上手快汇川InoProShopModbus TCP / 串口性价比高运动控制强台达WPLSoft / ISPSoftModbus TCP / 串口老项目多资料不少三菱FX系列GX Works串口 / 以太网需加模块日系产线兼容性好欧姆龙CP系列CX-OneHostLink / Ethernet老牌稳定文本资料少一些我实际写这套程序用的是S7-200 SMART的SR20型号。不带扩展模块14个数字量输入、10个继电器输出三层电梯的输入输出全接上还剩了三四个点富余量很舒服。2.2 I/O分配表动手接线之前先画这张表很多同学喜欢直接拿图纸接线线接完之后脑子里一团乱程序不知道用哪个点。我习惯先把I/O分配表画在纸上接到哪个端子、程序里对应哪个地址全部提前定死。下面是当时用的分配表信号功能PLC地址类型备注1楼外呼上行I0.0常开按钮并联指示灯时注意公共端2楼外呼上行I0.1常开按钮2楼外呼下行I0.2常开按钮3楼外呼下行I0.3常开按钮轿厢内呼1楼I0.4常开按钮轿厢内呼2楼I0.5常开按钮轿厢内呼3楼I0.6常开按钮1楼平层感应I0.7接近开关模型用干簧管就行2楼平层感应I1.0接近开关3楼平层感应I1.1接近开关开门到位I1.2常开触点关门到位I1.3常开触点上行接触器Q0.0继电器输出必须经中间继电器下行接触器Q0.1继电器输出开门信号Q0.2继电器输出关门信号Q0.3继电器输出上行指示灯Q0.4继电器输出可并入按钮灯下行指示灯Q0.5继电器输出这个表看着简单但无数人的程序写不对就是因为按钮的公共端接错了平层开关和楼层位置信号混在一起了。接线前把这张表确认好后面能省掉很多找茬时间。2.3 接线私房经验源型漏型、中间继电器和安全链接线这里有几个点教材不会细讲但通电之后就知道了。第一个是PLC输入公共端的接法。S7-200 SMART的输入分源型漏型和汇型源型两种接法我习惯用源型输入按钮一端接24V正极另一端接到输入点公共端M接0V。好处是按钮不好使的时候用万用表去测逻辑比较直观。第二个是输出点千万不要直接驱动接触器线圈。继电器输出型PLC的触点标称电流一般就2A左右接触器线圈在吸合瞬间的电流很容易超过这个值触点烧蚀只是时间问题。我是在输出点和接触器线圈之间加了一排直流中间继电器让PLC触点只负责驱动继电器线圈触点烧了换个继电器座子就行PLC本体不容易受伤。第三个是安全信号要串联进安全链而不是单独接一个输入点就算完。模型电梯至少要把上极限位、下极限位、紧急停止按钮串在一起形成一个安全回路这个回路没通主接触器就别想吸合。真梯还要把各个门锁触点都串进去。顺序错了急停按钮放在程序里处理也行但硬回路永远比程序可靠。3. PLC程序三层电梯的核心梯形图与关键参数3.1 先写一个管用的按钮去抖不然你会被自己坑哭我第一版程序用的是最直白的写法按钮输入点直接接置位指令。结果是按一下呼梯信号有时候登记了有时候没登记偶尔还会一次登记好几遍。原因很简单——机械按钮的抖动配合PLC扫描周期一个看起来干净的按下去在程序里可能被当成好几个脉冲。所以不管用什么品牌呼梯按钮处理前必须先加去抖。我的做法是输入点I0.0先送给一个定时器TON定时10到50毫秒定时器输出再去置位呼梯标志。这样手按一次只有抖动结束后的稳定电平才能触发置位。定时时间别太长太长会让人觉得按钮不跟手也别太短太短失去意义。20毫秒是我常用的折中值。3.2 呼梯登记与消除置位复位的典型场景登记的逻辑很好理解按下1楼外呼上行M0.0置位表示1楼有上行请求当电梯到达1楼开门、乘客进出完毕、关门动作完成之后M0.0复位。内呼也是同样处理。这里的消除时机要跟开关门联动最好在确认电梯已经平层、开门动作结束后再复位否则电梯还没停稳请求就被清掉门开了一半又要走程序看起来就像个急性子。我在实际项目中是把开门到位信号和关门到位信号配合使用开门到位后延时1.5秒乘客上下讲不清模型里就按固定延时算关门到位后再延时0.5秒让门彻底关好。把呼梯复位放在关门到位后逻辑上最接近真梯行为。这里有个容易踩坑的细节复位时别用输出点或者楼层信号去做主判断。有人习惯用电梯到达1楼直接复位所有1楼请求但如果电梯只是在1楼经过不停请求就被误清了。正确的做法是平层停车开门三者都成立才复位。3.3 方向判断电梯怎么知道下一步该去哪说透一点PLC本身没有数组这种高级概念所以三层电梯我直接用四个中间继电器的组合来表示每层是否有待响应的上行/下行请求。程序每次扫描都做这么几件事把所有当前存在的请求楼层扫描一遍找出比当前楼层高且存在请求的最小楼层和比当前楼层低且存在请求的最大楼层如果电梯处于空闲状态有高楼层请求就上行有低楼层请求就下行如果电梯正在上行只要还存在高层请求就不转向直到所有高于当前层的请求清零才开始响应低于当前层的请求。在S7-200 SMART里这串逻辑用比较指令加或指令就能写完。比如上行条件可以写成存在上行请求且请求楼层大于当前楼层并且当前不在下行状态下行条件类似。有同学问如果同时有1楼内呼和3楼外呼上行要怎么办按上面的逻辑电梯先去3楼因为在从1楼往上的过程中只有3楼是顺路的。1楼的请求如果同层也按了开门响应一下就行如果不是同层就等回头下行再处理。这就是顺向截梯的模型级实现。3.4 平层停车减速信号比停车信号更重要模型电梯如果不讲究舒适性可以全速到平层开关才断电停车。但真梯不是这样真梯需要在接近目标楼层前先减速再低速平层。我给模型加了两档速度的模拟方案没有变频器就用两个输出点控制高低速继电器——高速接近到了减速点切低速平层信号到了再断电抱闸。S7-200 SMART如果带了模拟量模块可以直接输出0到10V给变频器做速度给定程序里先用比较指令判断是否到达目标楼层-1的减速点然后改变给定值实现两级甚至连续调速。最开始做的时候不需要追求完美一个减速点加一个停车点就够了。3.5 先仿真还是先上真机S7-PLCSIM Advanced 的坑有人习惯先仿真再把程序下载到真机S7-200 SMART自带的仿真工具可以做简单梯形图逻辑验证。但如果你用的是博途 S7-PLCSIM Advanced连仿真下载都可能卡在在线检查保护机密PLC组态数据的密码时出错这类报错上——这种情况多和软件版本、密码保护、WinCC项目运行环境有关。我的经验是模型电梯这种东西不用太执着于仿真。只要I/O分配没搞错梯形图逻辑分成状态块上真机前把程序状态监控打开单步观察状态切换比仿真还直观。等以后做大型非标设备再认真学仿真工具不迟。4. 组态王上位机协议组件失败、变量映射、动画连接每一步都可能翻车4.1 创建协议组件失败八成是安装环境问题组态王这个软件功能确实强大但装上以后各种奇奇怪怪的报错也特别多。最常见的就是我这些年被问烂了的创建协议组件失败。这个报错出现的时候你打开工程、进入设备配置、新建IO设备点上下一步或者完成它就弹出来。网上有种说法是装个驱动就好了不全对。我排查下来原因大概集中在三处第一安装组态王的时候杀毒软件拦截了一部分驱动文件注册表没写好。解决方法是关闭杀软以管理员身份重新运行安装程序装完别急着开重启一次电脑。第二安装的是精简版或者绿色版驱动DLL文件缺失。这个只能换完整安装包重装没有捷径。判断方法很简单看组态王安装目录下的驱动文件夹比如安装路径里有没有Driver相关的目录如果里面文件少得可怜基本就是精简版。第三个别情况下是系统环境问题比如Win10以上系统权限收紧驱动DLL没有被成功注册。可以手动去命令行里用regsvr32把对应DLL重新注册一下但具体文件每次版本不一样还是重装来得干净。我自己的做法很笨但很有效先卸载组态王然后清理安装目录和注册表残留关掉杀毒和系统防护再用管理员身份重装。装了十来次这个问题再也没出现过。4.2 内存变量与IO变量先搞清楚这个画面才会动组态王里面有两类变量很多第一次用的人会混淆。内存变量只在组态王内部有效用来做中间计算、界面切换标志IO变量则是和PLC里的某个地址对应数据要靠通信从PLC读进来或者写过去。电梯的当前楼层、呼梯按钮状态、开关门状态这些必须建为IO变量并且要指定正确的设备地址。例如PLC里M0.0存储1楼外呼上行标志位组态王里就要建一个离散型IO变量地址写成类似M0.0设备选择连接PLC的驱动设备。VW100存放当前楼层数值组态王里建整型IO变量地址写VW100数据类型选无符号整数。这里最容易翻车的是变量类型不匹配。PLC里明明是实数组态王建了个整型读过来的数据就成乱码PLC里用了一个字节组态王里当成双字去读画面就会跳得毫无规律。4.3 画面动画连接让电梯轿厢在组态王里真的上上下下画面这块最核心的是电梯轿厢的动态显示。我用的方法是在组态王画面里画一个矩形代表轿厢再画几条竖线代表楼层给轿厢矩形加垂直移动动画连接绑定当前楼层的整型IO变量设置好垂直移动的距离范围我一般让轿厢从1楼到3楼移动200个像素变量从1变化到3就等于每层100像素。这一步很多人做完发现轿厢不动或者动起来只有上下跳没有移动过程。组态王的垂直移动是按变量值直接定位的不是平滑动画所以它天然就是跳变的。你看到轿厢从1楼瞬间跳到3楼其实说明通信和数据本身是正常的这不算故障。想要平滑效果就要在PLC里加一个虚拟轿厢位置变量让程序扫描时一点点逼近真实楼层组态王再用这个中间变量做动画。楼层数字显示更简单放一个文本动画连接选字符串输出或者数值输出绑到当前楼层变量上。指示灯用填充颜色或者可见性来绑按钮呼梯状态是离散变量灯亮了就说明请求已经登记上了。4.4 数据不动、闪烁、乱跳按这个顺序去查组态王连上PLC以后画面数据出了问题我建议按下面这个顺序查不要一上来就怀疑PLC程序。先看驱动设备有没有在线。组态王的工程浏览器里有设备运行状态的显示如果显示离线或者通信失败那PLC通信配置或者驱动安装先有问题。再看数据字典里变量的设备地址是不是填对了。地址写错了数据自然不对。然后看刷新周期别把扫描时间设得太短100毫秒以下反而容易造成变量闪烁我一般设500毫秒到1秒。最后才需要怀疑PLC程序比如变量地址和PLC里的实际存储区是不是同一块区域。故障现象大概率原因解决办法画面完全无数据驱动设备离线、变量地址错检查设备运行状态和地址配置数据随机乱跳变量类型不匹配、地址重叠核对数据字典统一类型数值能读但不能写权限没勾选写了只读属性变量属性里选读写画面反应特别慢刷新周期太长或通信压力大调整扫描周期删除没用的变量这里插一句组态王的变量连接有时候需要运行系统里重新加载一次画面千万别在开发系统里写完就以为完事了运行系统没刷新改的东西一概不生效。5. 联调排错的高频现场从PLC不动到组态王乱跳5.1 通信参数一个都不能错IP、端口和厂商特有参数组态王连S7-200 SMART一般走TCP/IP的S7协议或者Modbus TCP。很多第一次接的人卡在参数上PLC的IP地址要对、端口要对、站号要对。S7-200 SMART默认IP是192.168.2.1端口常用的102如果走Modbus TCP端口是502。组态王里新建设备时一定要把这些填对。有些PLC不走普通TCP/IP比如连接倍福、欧姆龙NJ或者部分Codesys设备时会要求填AMS NetID6字节网络标识符和端口号——这是它们自己的一套通信寻址体系你填普通的IP地址没用。我当时第一次接触这些词也头大后面明白了每个PLC厂家给组态王提供的驱动都不一样你按驱动向导提示一项项填它让你填什么就对应找什么别自己脑补。通信参数里还有个坑PLC侧需要开启允许远程访问有些PLC默认关闭了外部连接权限检查模块配置时要把允许来自网络的PUT/GET通信访问勾上否则组态王能Ping通但数据就是读不到。5.2 先让PLC自己跑八成问题出在通信前联调的时候我奉行一个原则PLC不依赖组态王自己先跑通再说。把组态王先断开用PLC编程软件给程序加变量监控看梯形图里每个位状态是不是按设计切换的。操作方法是在平台里打开状态图表加入呼梯标志位、当前楼层、上下行输出、开关门状态等关键变量然后手动一个个触发按钮观察变化。如果这一步就出问题说明程序逻辑还有问题别急着连组态王连了也白连。只有当PLC自己的状态完全符合预期再去接组态王。组态王这边如果又出问题那问题就基本锁定在通信配置、变量映射和画面绑定这三块里不会牵扯到底层逻辑排查范围一下就小多了。5.3 三个让我印象最深的顽固Bug第一个是按钮抖动导致呼梯登记反复出现。加了20毫秒去抖之后基本解决了。但有个特殊情况有些机械按钮使用年限长按下时有接触电阻变化20毫秒不够要加到50毫秒。我给去抖时间做成了可调参数调试时用组态王在线修改更方便。第二个是PLC的继电器输出点烧掉了。当时图省事Q0.0直接接上行接触器线圈触点用了两三天就不行了表现为按下上行按钮接触器有时候吸合有时候不吸合。换个中间继电器进去问题解决从那以后我再也不让PLC输出点直接带接触器线圈。第三个是组态王上显示的值和PLC实际值不一样。排查了很久最后发现是组态王里变量引用的地址是VW100但PLC程序里当前楼层写的是VB100一个字节错位导致读回来的数据完全不对。这类地址错位问题非常隐蔽看程序看不出毛病必须把PLC状态图表和组态王数据词典并排放在一起逐行核对。6. 从三层模型到真实电梯还能往哪些方向进阶6.1 加变频器舒适性才是电梯的灵魂模型电梯可以不在乎哐当一下停车但真梯不行。所以进阶项目里变频器基本是必选项。常见做法是PLC用多段速或者模拟量输出给变频器给定频率接近目标楼层前先切到低频爬行平层信号到了再零速抱闸。ABB变频器和西门子PLC之间的Modbus RTU通信目前也是很多项目的标配PLC直接读写变频器的频率和状态字可以省去硬接线的麻烦。多段速方式最简单PLC三个输出点组合出四档频率高速、中速、爬行、零速。模拟量方式需要PLC带模拟量输出模块程序里用目标楼层和当前楼层的差来实时算给定值效果更顺滑但调试量更大。6.2 安全回路、消防返回和检修模式做真实项目时这些东西没法跳过。安全链要把所有门锁触点、上下极限开关、安全钳信号、断绳保护信号全都串起来任何一环断开接触器必须立刻失电。消防返回是收到消防信号后屏蔽所有呼梯立即返回基站开门放人。检修模式则要求所有自动逻辑失效只能靠机房和轿顶的点动按钮控制轿厢低速移动。对一个模型项目来说至少要留出这些功能的输入输出点位和程序框架哪怕暂时不接实际硬件逻辑也建议写进去。不写的话以后扩展起来几乎等于重写程序。6.3 换国产PLC或者换组态软件迁移成本怎么评估不少同学在学校用西门子到了公司发现车间里全是台达、汇川、信捷心里有点慌。其实PLC编程的核心逻辑是相通的换品牌主要重学三件事编程软件的操作习惯、指令集差异、通信驱动的配置方式。你用过的置位复位、定时器、比较指令换个平台基本上都有对应功能相当于换个操作界面而已。组态王在国内工控圈占有率确实不小但工业项目里也常见WinCC、力控、杰控。从一个组态软件迁移到另一个画面重画是甩不掉的成本数据关联也要重新做一遍。有件事可以先做把整套系统的变量表整理成标准Excel不管换什么组态软件变量表是通用的能省掉大量重复沟通的时间。最后说点个人感受。做这个三层电梯项目最值钱的不是那几十行梯形图而是你终于明白PLC程序不是写出来的而是被工艺逼出来的。电梯看起来复杂但掰开揉碎了就是一套严格的先后逻辑——先看有没有请求再看该不该停最后才去想怎么开门关门。先把这套逻辑在纸上画清楚再去碰软件基本就不会翻大车。如果你也在做类似的模型我建议把手头那台旧PLC和一个小模型利用起来亲自调一次通信、踩一次协议组件的坑比看十遍教程都值。

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

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

免费获取报价 →
↑