
五层电梯控制是PLC项目里特别适合完整练手的一个典型场景。规模不大却把PLC能遇到的核心问题都占了楼层判断、方向调度、召唤记忆、平层停车、门锁联锁再加上一套上位机监控。去年我帮一家小型物业改造了一台五层货梯控制器选三菱FX3U上位机用组态王做监控画面整套系统从IO规划到联调用了不到三周。这篇文章就把这套“三菱FX PLC 组态王”的五层电梯控制系统的设计过程拆开讲从设备选型、IO地址分配讲到调度逻辑、程序编写、组态王画面配置最后把调试中真实遇到的问题和排障思路一并写出来。准备做课程设计、毕业设计或者接下来要接手小电梯项目的朋友可以直接按这个框架来。1. 五层电梯项目怎么定方案控制对象、IO清单与设备选型1.1 控制对象与系统构成接项目第一件事不是写程序而是把控制对象拆清楚。五层电梯的“被控对象”并不复杂主要有四块曳引电机、轿厢门机、呼梯按钮与内呼按钮、平层定位与安全门锁。曳引电机负责轿厢上下运行通常用变频器驱动这样能实现高速运行、低速爬行和平稳停车门机则负责开门关门配合门锁回路保证“门没关好绝对不允许动车”。系统整体上分成三层。底层是井道和轿厢上的传感设备包括每层楼的位置感应开关、平层感应开关、门锁触点、急停和上下限位。中间层是三菱FX PLC所有逻辑判断、楼层识别、方向决策、开关门时序都在这里完成。上层是组态王监控画面通过RS-485或以太网读取PLC里的寄存器把当前楼层、运行方向、呼梯状态、门状态、报警信息实时显示出来同时也能下达维修模式等控制指令。之所以选三菱FX系列是因为这类小型电梯逻辑不算复杂FX3U的指令和扩展能力完全够用而且与组态王的驱动兼容性很成熟。FX3U系列的PLC指令集丰富支持STL步进指令和比较、传送、区间比较等应用指令写电梯这种状态切换频繁的控制逻辑非常顺手。1.2 设备选型和IO分配表PLC型号我选的是三菱FX3U-32MT/ES。这里不建议用继电器输出型MR电梯运行中方向切换和点动非常频繁继电器触点容易烧蚀而且接变频器多段速信号时晶体管输出响应更快更可靠。如果只做简单的教学实验台FX3G也凑合但真机使用还是FX3U更稳妥。变频器选一台支持多段速控制的普通变频器就行品牌不强制我用过三菱D700也用过国产变频器逻辑上都一样。关键是利用PLC的数字量输出点给变频器提供三个信号上行方向、下行方向、多段速选择。速度分成两档正常运行时高速档接近目标楼层时切到低速爬行档。IO分配是整个项目的骨架我在实际项目里把信号按下面这张表规划类别地址信号说明输入X0~X41~5楼层位置感应井道位置开关用于楼层定位输入X5平层感应信号轿厢进入门区时有效用于准确停车输入X6门锁回路所有厅门和轿门关闭后闭合输入X7安全回路急停、上下限位、安全钳等串联输入X10~X14轿厢内1~5楼选层按钮内呼信号输入X15~X182~5楼下呼按钮层站下行召唤输入X20~X231~4楼上呼按钮层站上行召唤输入X24开门按钮手动开门输入X25关门按钮手动关门输入X26光幕/防夹信号关门时检测障碍物输入X27维修模式开关检修点动控制输出Y0上行方向接变频器上行端子输出Y1下行方向接变频器下行端子输出Y2高速运行变频器多段速1输出Y3低速爬行变频器多段速2输出Y4开门继电器驱动门机开门输出Y5关门继电器驱动门机关门输出Y6到站钟/蜂鸣器到站声光提示眼尖的朋友会发现照这样分配下来输入点超过十六个FX3U-32MT本体不够用。这很正常真机项目要么选更大点数的FX3U-64MT要么加一块FX3U-16EX扩展输入模块。我的习惯是留出20%左右的备用点别抠抠搜搜刚刚好后期加功能时最难受的就是没有备用点。层站和轿厢的呼梯指示灯、楼层显示可以统一在组态王画面上实现现场不需要拉大量信号灯线这也是上位机系统的价值之一。1.3 为什么偏要挂着组态王有人会觉得电梯现场本来就能跑为什么非要加组态王我的看法是监控层不是给PLC用的是给人用的。调试期间组态王能把内部变量全部暴露出来当前楼层寄存器D0、呼梯记忆位M100、运行状态S10这些在面板上看不到的东西画面上全能看到定位问题快得多。交付之后物业维护人员也需要直观看到电梯在几楼、哪个方向、有没有报警而不是打开电控柜拿万用表量。组态王在这种项目里的优势有三点一是图库资源多电梯井道、轿厢、按钮、指示灯都有现成图元可以拖拽修改二是变量绑定非常快只要PLC地址规划好在组态王里配置I/O变量然后一个个绑定动画连接就行三是和三菱FX的通信驱动成熟串口驱动和Modbus驱动都有现成的不需要自己写协议解析。我平时用组态王6.60SP4比较多这个版本驱动面全工程文件管理也稳定。安装流程本身没什么特殊之处装完之后把驱动列表和帮助文档保留好后面配置通信格式和寄存器地址时要经常翻。2. 电梯运行的“核心大脑”楼层识别、呼梯优先级与方向决策逻辑2.1 楼层位置识别方案电梯必须时刻知道自己当前在哪一层这个信号是整个调度逻辑的基础。楼层识别有两种常见方案。第一种是井道每层装位置感应开关轿厢上装一块挡板。电梯经过时感应开关会给出一个瞬时信号PLC收到后刷新“当前楼层寄存器D0”。成本低接线简单五层小电梯用这个方案足够了。第二种是旋转编码器加FX3U高速计数器编码器装在曳引机或限速器上轿厢走多少距离编码器就发出多少个脉冲PLC通过脉冲数换算楼层。这个方案精度高但调试复杂还要考虑钢丝绳打滑和编码器零点校准。我实际做这个项目用的是第一种。不过必须留个心眼楼层位置感应器只负责“定位”平层精度还得靠独立的平层感应器。位置感应告诉PLC“你到了第几层”平层感应告诉PLC“轿厢正好停在层门区”。如果两者合并成一个后期调试平层时会被折磨得很惨。2.2 呼梯信号如何合并与记忆呼梯信号分两类轿厢内选层内呼和层站外呼。外呼又分上行呼梯和下行呼梯。任何呼梯信号按下后都必须“记住”直到电梯完成服务后才清除这是电梯的基本行为。五层电梯的信号数量大概是内呼5个1~4层有上行外呼共4个2~5层有下行外呼共4个。我在PLC里用M位来存储这些呼梯记忆内呼记忆M100~M104上呼记忆M105~M108下呼记忆M109~M112程序运行时要把对当前运行方向有效的呼梯合并成“本层停车请求”。比如电梯正在上行经过3楼时如果M102有内呼或者3楼的上呼信号有效那么3楼必须停车但如果3楼只有下呼信号这次就不停电梯可以继续上行等下行时再来响应3楼的向下召唤。这个合并规则的物理意义就是“顺路停、不顺路留给另一个方向”。很多刚接触电梯逻辑的人在这里容易写错把外呼信号直接当作无条件停车信号导致电梯为了响应一个反方向召唤而频繁换向效率极差。2.3 方向决策规则方向决策可以归纳成一套规则电梯停在待梯状态时扫描所有停车请求。如果请求层全部在当前层上方则上行。如果请求层全部在当前层下方则下行。如果上下方都有请求比较哪边离当前层更近距离相等时默认优先上行。电梯已经在运行过程中每到一个楼层就清除该层同向请求然后检查前方还有没有同方向请求。有就继续走没有就准备反向反向也没有就进入待梯状态。这套规则在PLC里的实现不复杂。先把当前楼层D0取出来然后用比较指令逐个判断所有停车请求所在的楼层号是否大于D0。只要有任何一个大于D0就置位“有高层请求”标志有任何一个小于D0就置位“有低层请求”标志。然后再根据这两个标志决定方向。有人可能会问为什么距离相同时默认优先上行这是我做小型电梯时的习惯主要是避免电梯在两个楼层之间来回试探。如果你希望优先下行也完全可以只要逻辑一致就行不影响整体结构。2.4 平层停车和开关门联锁电梯停车不能写成“到了楼层就立即刹车”否则轿厢会有很强的顿挫感乘客也容易摔倒。正确的停车时序是电梯高速运行接近目标楼层时先切到低速爬行。低速状态下等待平层感应信号。平层信号一到立即停止运行。停稳后执行开门动作。减速点的选择可以按“目标楼层和当前楼层差一层”来触发低速也可以单纯靠时间。调试时我习惯先用低速挡来回试观察轿厢在门区内的实际位置再微调减速触发点。低速频率一般设10Hz左右太快了平层来不及反应太慢了又像是在磨蹭。开关门顺序就一句话停稳、开门、延时、关门、门锁闭合、允许运行。光幕信号要接进关门逻辑关门过程中如果夹到人立即反转开门。这里要特别强调门锁回路必须用物理硬接线把所有厅门和轿门触点串联起来再接到PLC的X6输入点。PLC程序只负责判断“X6为ON才能开车”不能在程序里试图绕开这个回路哪怕维修模式也不行。这个原则必须在设计阶段就定死不能图省事。3. 三菱FX PLC程序实现状态机、指令表与参数整定3.1 用STL状态机组织整体流程三菱FX3U写电梯控制我最推荐用STL步进梯形图指令。STL的本质是把复杂的顺序控制拆成一个个状态每个状态只管自己的事状态之间靠条件跳转。电梯从待梯到上行、到减速、到平层、到开关门就是一个典型的状态机。状态分配可以这样规划状态继电器含义S0待梯/检修S10上行运行S20下行运行S30减速爬行S40平层停车S50开门S60关门调试时最大的好处是只要看哪个状态继电器当前是ON立刻就知道电梯卡在哪一步。我习惯把当前活动状态编号用MOV指令写入D10这样组态王画面就能直接绑定D10显示“运行中”“开门中”“关门中”这些状态文字。3.2 关键程序片段这几个程序片段是核心可以直接抄到GX Works里改。首先是楼层刷新逻辑。上行状态下检测到2楼位置感应开关的上升沿把当前楼层D0刷新成2; 上行状态下2楼位置信号上升沿触发楼层刷新 LD X1 AND M10 ; M10为上行状态标志 PLS M50 ; 上升沿脉冲 LD M50 MOV K2, D0 ; 当前楼层设为2内呼记忆逻辑; 内呼按钮按下置位对应楼层的呼梯记忆 LD X10 SET M100 ; 1楼内呼记忆 LD X11 SET M101 ; 2楼内呼记忆 ; 电梯到站开门完成后清除该楼层请求 LD M200 ; 1楼停车请求 AND M60 ; M60为开门完成标志 RST M100停车请求合并逻辑拿3楼举例; 3楼停车请求 3楼内呼或者上行的3楼上呼或者下行的3楼下呼 LD M102 ; 3楼内呼 OR M106 ; 3楼上呼 ANI M20 ; M20为下行状态下行的同时不响应上呼 OR M110 ; 3楼下呼 ANI M10 ; M10为上行状态上行的同时不响应下呼 OUT M202 ; 3楼停车请求方向判断逻辑简写如下; 有高层请求 LD M201 OR M202 OR M203 OR M204 OUT M30 ; 有高层请求标志 ; 有低层请求 LD M200 OR M201 OR M202 OR M203 OUT M31 ; 有低层请求标志 ; 只有高层请求时置位上行状态 LD M30 ANI M31 SET M10严格来说方向判断还要结合当前楼层D0和具体请求楼层号做比较不能只靠M位。实际项目里我会用CMP比较指令把D0和各个楼层请求位对应起来避免“电梯在5楼时高层请求标志仍然有效”这种逻辑矛盾。上面的片段主要是让初学者看懂思路抄到真机里时务必补上楼层比较条件。3.3 时间参数与防抖设计电梯程序里离不开定时器下面是这个项目里用到的几个关键时间参数定时器用途设定值说明T0开门保持时间K505秒可调T1关门限时K10010秒超时报警T2位置信号防抖K20.2秒延时确认T3平层爬行超时K303秒未检出平层则急停平层爬行超时定时器T3非常重要它防止意外情况下电梯一直低速运行找不到平层信号。一旦超时PLC要立即停止输出并触发故障报警绝不能让电梯在低速状态下无限制爬行。楼层感应开关的防抖不能只依赖PLC的输入滤波。FX3U输入端子本身有一定滤波时间但楼层信号对实时性要求高而且震动干扰往往发生在高速运行阶段。我的做法是双重保险物理上选接近开关而不是机械行程开关程序里对位置信号做“延时确认方向条件判断”连续两次扫描都有效才刷新楼层。实际调试下来效果不错几乎没有出现过楼层跳变。4. 组态王监控界面设计与通信联调4.1 FX3U与组态王的通信配置监控层通信链路我推荐这样走PLC本体加装FX3U-485-BD通信扩展板通过RS-485总线接到工控机的COM口工控机上用USB转485转换器。组态王里新建设备时驱动可以选“三菱FX3U串口”或者“Modbus RTU”。PLC侧的通信参数要设置好。FX3U的串口通信格式在D8120里配置波特率设为9600数据位8位停止位1位无校验。如果选Modbus RTU协议还要把PLC的从站站号设置好FX3U-485-BD对应的站号寄存器要根据通信板手册来设。这里提醒一句我见过很多人卡在通信上不是接线反了就是站号没对上。485的A/B接反时通信会时好时坏非常折磨人排查时第一件事就是核对A/B。组态王侧安装好6.60SP4后在开发环境下新建逻辑设备选定串口和驱动类型然后配置通信参数重点是波特率、校验方式、站号必须和PLC侧完全一致。定义变量时I/O整数变量指向D寄存器I/O离散变量指向M位。如果用的是三菱FX专用驱动变量地址一般直接填D0、M100这种如果用的是Modbus驱动就要先查一下寄存器映射表把D区映射到保持寄存器、M区映射到线圈偏移量按驱动手册调整。这块是组态王通信最容易翻车的地方实际项目里一定要打开串口监控抓一下数据能收到字节就说明链路通了一半。4.2 画面组态与动画连接画面布局我是这样设计的左侧画五层楼的井道剖面右侧放轿厢矩形顶部显示当前楼层数字下方放方向箭头、门状态灯和呼梯按钮。用组态王图库拖图元很快。把井道、楼层横梁、轿厢门板这些基础图元拖进画面然后新建I/O变量并绑定PLC地址\本站点\当前楼层整数绑定D0\本站点\上行运行离散绑定M10\本站点\下行运行离散绑定M20\本站点\开门信号离散绑定Y4\本站点\关门信号离散绑定Y5动画连接是画面组态的精华。轿厢矩形要做“垂直移动”动画表达式直接写当前楼层变量乘以每层间距。比如每层高度是80像素表达式就写“当前楼层*80”轿厢就会随D0变化在井道里上下移动。楼层数字显示用“模拟值输出”绑定当前楼层。方向箭头用“闪烁”动画连接上行/下行变量。开关门状态用“填充颜色”动画开门信号为ON显示绿色OFF显示红色。呼梯按钮如果做成组态王画面上的虚拟按钮通过左键动作脚本写入PLC的M位就能替代一部分物理按钮适合做实验台或教学演示。但真机项目我不会用虚拟按钮完全取代物理呼梯物理按钮在电梯安全规范里是必须保留的。组态王上的按钮可以作为复显和辅助控制但不该成为唯一输入手段。4.3 报警、历史记录与脚本补充报警功能是组态王这类上位机的强项。我在PLC里定义了一个故障代码寄存器D200PLC检测到门锁断开、安全回路断开、平层超时、变频器故障等情况时都向D200写入对应的故障编号正常情况D200为0。组态王把D200绑定为报警变量只要D200不等于0就触发报警报警文本里写明对应故障含义。这样维护人员不用查程序也能知道电梯到底哪里出了问题。历史数据记录也很有用。比如记录电梯每天的运行次数、每次开门时间、电机累计运行时间。组态王可以配合数据库或内置变量做简单统计写个数据改变命令语言类似这样if (\本站点\当前楼层 ! \本站点\上次楼层) { \本站点\运行次数 \本站点\运行次数 1; \本站点\上次楼层 \本站点\当前楼层; }还可以利用组态王的定时命令语言定期把工控机的当前时间写入PLC的数据寄存器这样PLC内部记录故障时就能留下准确时间戳后面分析故障原因方便很多。5. 现场调试总翻车的几个点楼层计数、平层精度和通信掉线5.1 楼层计数跳变第一次通电调试时我最先碰到的问题就是楼层显示乱跳。电梯明明停在2楼画面有时候跳到3楼有时候跳到4楼偶尔还回跳。排查思路是这样一步步来的。先不运行电梯把PLC切到监控模式盯着X0~X4看静止状态下有没有输入点闪动。如果有闪动先判断是接线问题还是干扰问题。接近开关的电源我用独立开关电源供电不跟变频器共用否则变频器启动瞬间的电压跌落很容易让开关误动作。接线正常就把挡板和感应开关的距离重新调整间隙调到3~5毫米太近会刮擦太远会感应不稳定。硬件都没问题后还有软件层面的防抖。我在楼层刷新逻辑里加上了方向条件判断必须处于上行或下行状态时才允许楼层刷新同时位置信号经过T2定时器延时确认。这样即使有瞬间干扰只要持续时间不足0.2秒就不会被当作有效楼层信号。三管齐下之后楼层计数就稳定了。5.2 平层精度不达标第二个困扰我的问题是平层停不准。轿厢停下来后要么高出地面一截要么低于地面一截开门后乘客进出明显不舒服。这个问题的根子通常在两个地方一个是低速爬行频率太高一个是减速点太晚。我把变频器的低速频率从15Hz下调到10Hz左右给平层感应器留出足够的反应距离。减速触发点也往前挪了一下保证高速挡在距离目标楼层还有一层的时候就切到低速爬行而不是等平层信号出现了才减速。调整平层感应器挡板位置时不要图快一次次大范围移动。每次断电调整3毫米上电后观察停车位置反复微调。变频器减速时间也要配合我习惯设0.5秒到1秒太短会导致轿厢急停太长会让低速段拖泥带水。这一整套参数配合下来平层误差基本能控制在门区允许范围内。5.3 组态王掉线通信掉线是组态王项目里的老问题。现象是画面上所有变量变成灰色数值全部不动过一会儿又自己恢复严重的时候直接断死。排查链路我建议按顺序走。先用万用表或串口调试工具确认485总线上有没有数据在发送这能排除PLC和通信板是否正常工作。然后检查组态王里设置的通信超时时间和恢复时间不要设成负数超时时间设3000毫秒左右比较合理。接着检查485的正负接线A/B接反是最常见的原因。如果总线上还接了其他设备距离又比较长电缆末端要并联一只120欧姆终端电阻不然信号反射会导致通信时断时续。还有过一个非常坑的情况调试时GX Works2开着在线监控组态王这边就疯狂掉线。两个软件同时占用同一个COM口不冲突才怪。后来我把调试流程改成在线改PLC程序时先把组态王的通信停掉等程序下载完毕再恢复组态王运行两者不再抢串口。5.4 安全回路与维修模式安全回路和维修模式这块我只讲原则不讲侥幸。门锁触点、急停按钮、上下限位、安全钳开关必须用物理硬接线串联成一条完整的安全链再进PLC的X7输入。任何程序逻辑都不能替代这条物理回路。PLC负责读状态负责联锁但绝对不应该负责“判断安全回路是否有效”这种判断只能靠硬接线保证。维修模式开关X27置ON之后PLC要禁止自动运行逻辑只允许通过检修按钮点动上行或下行且点动速度强制为低速。维修模式下开门运行是绝对禁止的。组态王上可以做一个维修模式切换按钮但必须设置操作权限和二次确认同时即便在组态王画面里写了强制置位输出之类的脚本也不能在门锁开路情况下绕过PLC的联锁。这不是技术问题是安全底线。我在调试中还犯过一个低级错误用GX Works在线修改程序时不小心让上行和下行输出同时接通变频器当场报过流。从那以后凡是涉及正反转输出的程序在线修改我一定会先把总电源断开或者至少把Y0、Y1的输出回路从变频器端子上拆下来。电梯这种设备输出方向搞错不是程序报错的问题是会出事故的问题。整套系统从选型、画图、写程序到联调前后大概三周。最大的体会是电梯控制系统的难点不在PLC指令而在逻辑与安全边界的取舍。组态王把监控屏幕做得再漂亮也只是锦上添花真正决定电梯能不能安全运行的还是每层位置感应器的安装精度、门锁回路的硬接线和低速爬行那段程序。以后如果要在这个基础上扩展可以考虑把FX3U换成支持更大程序的FX5U或者把编码器闭环放进去做更平滑的曲线启停。手边的项目记录就这些希望对做类似五层电梯控制设计的朋友有帮助。