☰
五层电梯PLC控制系统设计:三菱FX与组态王实战
2026/10/5 8:24:20 网站建设 项目流程

五层电梯控制,是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 方向决策规则

方向决策可以归纳成一套规则:

  1. 电梯停在待梯状态时,扫描所有停车请求。
  2. 如果请求层全部在当前层上方,则上行。
  3. 如果请求层全部在当前层下方,则下行。
  4. 如果上下方都有请求,比较哪边离当前层更近;距离相等时默认优先上行。
  5. 电梯已经在运行过程中,每到一个楼层就清除该层同向请求,然后检查前方还有没有同方向请求。有就继续走,没有就准备反向,反向也没有就进入待梯状态。

这套规则在PLC里的实现不复杂。先把当前楼层D0取出来,然后用比较指令逐个判断:所有停车请求所在的楼层号是否大于D0。只要有任何一个大于D0,就置位“有高层请求”标志;有任何一个小于D0,就置位“有低层请求”标志。然后再根据这两个标志决定方向。

有人可能会问,为什么距离相同时默认优先上行?这是我做小型电梯时的习惯,主要是避免电梯在两个楼层之间来回试探。如果你希望优先下行也完全可以,只要逻辑一致就行,不影响整体结构。

2.4 平层停车和开关门联锁

电梯停车不能写成“到了楼层就立即刹车”,否则轿厢会有很强的顿挫感,乘客也容易摔倒。正确的停车时序是:

  1. 电梯高速运行,接近目标楼层时先切到低速爬行。
  2. 低速状态下等待平层感应信号。
  3. 平层信号一到,立即停止运行。
  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里定义了一个故障代码寄存器D200,PLC检测到门锁断开、安全回路断开、平层超时、变频器故障等情况时,都向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,或者把编码器闭环放进去做更平滑的曲线启停。手边的项目记录就这些,希望对做类似五层电梯控制设计的朋友有帮助。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询