做PLC项目这么多年,如果说哪个控制对象最考验程序员的全局思维,我会投电梯一票。前阵子刚帮朋友完成一套三层小型货梯的PLC升降控制系统,用的是三菱FX3U配合变频器拖动带抱闸的曳引电机。这套系统表面上看只是“按了按钮电梯就上下”,但实际拆开做的时候,呼梯登记、方向仲裁、平层检测、门锁安全、抱闸时序、故障保护全搅在一起,任何一个环节糊弄过去,轻则电梯停不准,重则就是实打实的安全隐患。这篇东西我就按做完一遍的真实顺序,把电梯升降的PLC控制整体方案从头到尾捋清楚,从需求层讲到梯形图落地的细节,再聊聊空载调试和现场跑车时踩过的坑。这套思路不限定品牌,换到信捷、汇川、西门子平台上,把指令体系平移过来就能用;做课程设计、毕业设计、小型货梯、电梯模型也都参考得上。
1. 三层货梯的升降需求与总体方案设计
1.1 需求拆解:升降不只是“上行和下行”
很多人第一次接触电梯控制时,脑子里想的是“上行给正转、下行给反转、到了停”。真拿到项目需求你就会发现,这只是最外层的动作,底层还有一连串问题要回答:
- 乘客在1楼按了外呼上行,轿厢正在3楼,该不该下来接?什么时候下来?
- 轿厢里同时有3楼内呼和2楼内呼,先停哪层?
- 电梯从1楼去3楼,经过2楼的时候刚好2楼有人按了上行,要不要顺路停?
- 平层信号是每层都有,怎么做才能知道轿厢“当前在几楼”?怎么防止电梯高速经过中间层时误停车?
- 门没关好,电梯绝对不能走;运行中门被意外打开,电梯必须马上停下来,这个逻辑靠软件够不够?
- 到了顶层没停住怎么办?变频器或抱闸突然故障怎么处理?
这些问题的答案不能靠拍脑袋,必须在程序设计之前先用一张控制逻辑图理清顺序。我这里只讨论控制层的设计,机械层面像曳引机、导轨、对重、限速器、缓冲器这些,默认已经有专业厂家或实训设备提供,PLC工程要解决的是检测、判断、驱动和连锁。
以这次的三层货梯为例,控制任务可以拆成几个功能模块:
- 呼梯登记与取消:内呼按钮和外呼按钮按下后要先“记住”,到达对应楼层后自动取消。
- 方向仲裁:根据当前楼层、呼梯楼层和呼梯方向决定电梯是上行、下行还是待机。
- 运行控制:启动变频器、输出高速或低速、控制抱闸开闭。
- 平层定位:通过每层平层信号判断位置,准确停层。
- 门控制:自动开/关门,检测关门到位、门锁闭合。
- 安全保护:急停、上下限位、门锁、变频器故障、抱闸反馈等逻辑。
1.2 为什么选“三菱FX3U + 变频器 + 平层感应器”这套组合
这套系统用的是三菱FX3U-32MR,整体成本可控、点数刚好,而且三菱的梯形图资料最多,后续让维护人员接手也容易。FX3U自带高速计数和通信口,以后想加旋转编码器做闭环、加MCGS触摸屏显示楼层,都不用换PLC,预留余地不小。
曳引电机选择的是带电磁抱闸的三相异步电机,由变频器驱动。不用传统继电器直接切换电机相序的原因很简单:电梯是典型的位能性负载,满载下行和空载上行时,电机会处于发电状态,母线电压会升高,必须靠变频器的能耗制动或者制动电阻来吸收能量。如果只用接触器换相,启停冲击大,制动过程不可控,舒适性和安全性都差很多。
定位这块没有上旋转编码器,而是采用每层安装平层感应器的方案。每层井道里装隔磁板或感应铁片,轿厢上装接近开关、光电开关或者干簧管,轿厢到达楼层地板齐平的位置时给出平层信号。对三层货梯来说,这个方案结构简单、调试直观,定位精度配合低速爬行也能控制在可接受范围内。
注意:如果你做的是真实载人电梯,哪怕只是别墅梯,也必须符合GB 7588等相关标准和当地特种设备要求,由有资质单位设计安装。这里讲的是技术原理和教学/实训项目实现,不能把文章里的简化方案直接照搬上真梯。
1.3 系统结构划分
整个电控系统按功能可以分成三块,调试的时候一块一块查问题会非常快:
- 主回路:三相电源 → 断路器 → 主接触器 → 变频器 → 曳引电机。制动电阻接在变频器BR/PX端。
- 控制回路:PLC输出信号经过中间继电器,再去控制变频器STF/STR/RH/RM端子、开门/关门继电器、抱闸接触器等。
- 安全回路:所有急停、上下极限、门锁、限速器开关等常闭触点串联,驱动安全继电器。安全继电器的触点再串到主接触器和抱闸接触器的线圈回路中。
这个结构中,PLC并不是唯一的安全屏障。即使PLC程序逻辑出现荒唐错误,只要安全回路断开,主接触器和抱闸线圈失电,电机就会被机械抱闸抱住,这是整套系统里最重要的一道防线。
2. I/O分配表和安全触点的接线选择
2.1 输入输出点分配
项目正式写程序之前,我习惯先把I/O表做出来,并且每个点都用中文注释标清楚。三层电梯如果外呼按钮做成“1楼只上、3楼只下、2楼上下双方向”,加上内呼和必要安全信号,点数大概是下面这样:
| PLC地址 | 信号名称 | 说明 |
|---|---|---|
| X0 | 急停按钮 | 常闭输入,接安全回路 |
| X1 | 检修/自动切换 | 检修时切低速点动 |
| X2 | 上限位 | 常闭触点,到顶层极限断开 |
| X3 | 下限位 | 常闭触点,到底层极限断开 |
| X4 | 门锁回路信号 | 所有层门、轿门锁信号串联后接入 |
| X5 | 关门到位 | 关门限位开关 |
| X6 | 1楼平层信号 | 每层一个平层感应器 |
| X7 | 2楼平层信号 | |
| X10 | 3楼平层信号 | |
| X11 | 1楼内呼按钮 | 轿厢操作箱 |
| X12 | 2楼内呼按钮 | |
| X13 | 3楼内呼按钮 | |
| X14 | 1楼外呼上行 | |
| X15 | 2楼外呼上行 | |
| X16 | 2楼外呼下行 | |
| X17 | 3楼外呼下行 | |
| X20 | 开门按钮 | 轿厢操作箱 |
| X21 | 关门按钮 | |
| X22 | 变频器故障输出 | 变频器正常时常闭 |
| X23 | 抱闸反馈触点 | 用于判断抱闸是否打开或闭合 |
| PLC地址 | 信号名称 | 说明 |
|---|---|---|
| Y0 | 变频器正转/上行 | 经中间继电器到STF端子 |
| Y1 | 变频器反转/下行 | 经中间继电器到STR端子 |
| Y2 | 高速运行 | 多段速1,接RH端子 |
| Y3 | 低速运行 | 多段速2,接RM端子 |
| Y4 | 主接触器允许输出 | 与安全继电器触点串联后控制KM |
| Y5 | 开门继电器 | 控制开门接触器 |
| Y6 | 关门继电器 | 控制关门接触器 |
| Y7 | 抱闸释放输出 | 经安全继电器触点控制抱闸接触器 |
| Y10 | 运行指示灯 | 轿厢/机房显示 |
| Y11 | 蜂鸣器/故障指示灯 | 故障报警 |
这里要特别说明Y4和Y7:PLC只是发出“允许”信号,真正驱动主接触器和抱闸线圈的回路里必须串入安全继电器触点。比如Y7得电只是表示PLC认为可以松闸,但如果这时候门锁动作导致安全继电器掉电,抱闸接触器线圈回路照样断开,抱闸依然抱住。
2.2 为什么急停、门锁、限位开关全部接常闭
有朋友会问:既然PLC程序里可以判断常开,为什么急停之类的不用常开?这是电梯控制里最基础也最关键的一个原则:所有安全触点必须按“断线即故障”来设计。
安全回路里所有开关都用常闭触点串联,正常状态下整个回路是导通的,安全继电器线圈得电,主接触器和抱闸回路才有电。一旦急停被按下、门锁没闭合、限位开关被撞开,或者哪根线松动脱落,回路就断开,安全继电器立即失电,系统进入安全状态。
反过来如果采用常开触点,正常时回路反而是断开的,必须靠PLC程序去判断“这个点什么时候闭合”,一旦接线松脱,系统会误以为开关没动作,继续运行,那是绝对不允许出现的失效模式。
2.3 关于“PLC故障信号用常开还是常闭”的工程判断
这个点在调试时最容易把人绕晕,我把判断方法说清楚。外部急停接的是常闭触点,正常不动作时,PLC输入点是导通的,也就是X0为ON。程序里读这个信号,用的反而是一个常开指令:
LD X0 ; X0=ON 表示安全回路正常,不是“发生急停” ANI X1 ; 检修信号 OUT M100 ; 运行允许标志这里面的逻辑是:外部常闭触点的“正常状态”对应PLC输入的ON,所以程序里用LD(常开)读取“正常”。如果外部急停按下了,回路断开,X0变OFF,M100随之断开,程序就知道安全回路不满足。
很多初学者犯的错是“外部接了常闭,程序里就写常闭触点”,结果变成正常时候常闭触点断开,逻辑条件反而不通,急停动作时程序反而认为安全。遇到这种情况,不要急着改程序,先把万用表打到输入端,看看安全回路正常时X点到底是亮还是不亮,再决定程序里该用LD还是ANI。
对于变频器故障这类信号,同样如此。我一般把变频器故障继电器的常闭触点接到PLC输入,意思是“无故障时输入为ON”,程序里用LD X22作为“变频器正常”的判断,这样故障或通信断线都会导向停车。
3. 核心程序逻辑:呼梯登记、方向仲裁与平层定位
3.1 呼梯登记:按键按下去那一刻只是“开始”
电梯的呼梯按钮和普通按钮不一样,按一下松开后,系统要一直记住这个请求,直到电梯到达并开门后才清除。所以在程序里我用SET和RST配合中间继电器M来实现“登记保持”。
内呼登记的逻辑比较直观,例如1楼内呼:
LD X11 ; 1楼内呼按钮按下 SET M111 ; 登记1楼内呼 LD M111 ; 1楼有内呼登记 AND M20 ; 系统允许运行(条件简化) AND X6 ; 到达1楼平层 RST M111 ; 取消1楼内呼登记外呼登记要稍微复杂一点,因为外呼本身带方向。2楼有两个按钮,一个上行一个下行,它们必须分别存储,不能合并。原因很简单:如果电梯此时正在上行过程中,它只响应2楼上行呼梯,2楼下行呼梯要等电梯换向后才响应;如果混在一起,电梯很容易在2楼停一趟后又为了另一个方向再停一趟,或者出现“反复换向”的低效运行。
3.2 方向仲裁不是简单地“有呼梯就上下”
方向仲裁是整个程序里最难写清楚的部分。它要解决的问题是:电梯在任意时刻,面对一堆分散在不同楼层、不同方向的呼梯,选一个明确方向继续走。
我的做法是先给电梯定义一个“运行状态”:上行中、下行中、待机。然后按以下规则选择:
- 如果电梯处于上行状态,就从当前楼层往上找,只要上面任何一层有内呼或者外呼上行,就继续上行,优先停靠顺向呼梯。
- 当电梯走到最高登记楼层,处理完顺向呼梯后,如果下面还有向下的呼梯,才允许换向为下行。不允许刚处理完2楼上行呼梯,马上又响应2楼下行呼梯直接掉头。
- 如果电梯处于待机,就看所有呼梯相对当前楼层的位置:都在上方就上行,都在下方就下行。
- 如果同一楼层同时有上行和下行外呼,只要方向匹配或者到达该层时顺向,就先停一次,消掉该方向呼梯;反向呼梯留下来,等电梯换向回来再处理。
这段逻辑在梯形图里写出来就是一堆比较指令和置位指令的组合。为了清晰,我在这次程序里用的是步进梯形图STL指令,把“上行运行”“下行运行”“平层开门”“待机”拆成状态,每个状态内部处理该状态特有的动作和转移条件。用STL的好处是状态边界清楚,不会出现多个状态同时激活的混乱。
还有一点必须提醒:平层信号只能在“该楼层有目标登记”时才能作为停车条件。电梯从1楼高速去3楼时,2楼的平层感应器会短暂导通,如果程序写的是“平层信号ON就停车”,电梯就会在2楼莫名其妙停住。正确的做法是:先判断2楼有没有顺向呼梯登记,有才允许减速停车,没有就只是把它当成一个位置经过信号。
3.3 高速运行、减速爬行、平层停车:三个动作不能混
电梯平层的精度不是靠“刚好在平层信号到达时停高速”来实现的。以满载和空载两种情况为例,轿厢的惯性差别很大,抱闸动作时间也有偏差,如果高速直接刹停,电梯不是冲过头就是差一截。
我采用的方法是两段速度控制:
- 电梯启动后先输出高速,尽快运行;
- 当轿厢进入目标楼层的平层感应区域,我先让电梯切到低速爬行;
- 等平层感应器给出准确位置信号,PLC再封锁运行输出,同时让抱闸接触器失电,机械抱闸抱住。
具体到平层信号怎么设计,这里有细节。如果每层只有一个平层开关,信号给出的时刻比较难和“轿厢地板与楼层地板齐平”完全对应,不同安装位置会导致系统性偏差。这次项目里轿厢上装了两个感应器,上下间隔约10厘米,井道每层有一块足够长的隔磁板,上行时下感应器先进入隔磁板,约10厘米后上感应器也进入。我把“下感应器进入”当作本层换速点,此时切断高速、输出低速;把“两个感应器都进入且电梯已经低速爬行”当作停车点。这样平层位置有明确的机械参考,精度比一个开关可靠得多。
减速停车那一下,时机的微调很重要。如果停车点信号来得太早,轿厢还在低速爬行,离准确平层差一点,开门后会有台阶;太晚又会冲过。这里没有绝对公式,要在现场根据低速频率、负载、抱闸动作时间反复试。我的习惯是先把低速频率调到10Hz左右,让电梯慢到能看清爬行,再根据停车后轿厢地板相对楼层的偏差,微调感应器安装位置或者程序里的停车信号选择,不要急着一次跑高速。方向不同的停车偏差可能不一样,比如上行停得刚好,下行可能过一点,因为负载和机械间隙方向不同,这时就得做个折中,让正反两个方向的偏差都能控制在合理范围里。
4. 安全联锁怎么搭:软件程序之外还有三道硬件防线
4.1 安全回路做主,PLC程序做辅
电梯控制里最忌讳“所有保护都写在梯形图里”。PLC程序跑飞、输出点烧坏、中间继电器卡死,这些故障不是软件能自检的,必须有硬件兜底。这跟家里装漏电保护器是一个道理:你不能指望门口的保安用眼睛判断你有没有触电再去拉闸,必须是物理回路自己断电。
所以电梯的安全设计我始终按这个顺序来:硬件安全回路优先于PLC逻辑,PLC逻辑优先于普通功能逻辑。急停、限速器、上下极限、门锁等开关的常闭触点全部串联,最后驱动一个安全继电器。安全继电器吸合后,它的触点才会给主接触器和抱闸接触器供电。
换句话讲,就算PLC的Y4一直意外输出“主接触器允许”,只要安全回路里有个急停被拍下,主接触器线圈得不到电,变频器输入侧照样断开,电机失电被抱闸抱住。程序里再去判断X0、X4等输入,只是为了做状态显示和故障报警,不能把程序判断当成唯一保护。
4.2 上下行和门锁的硬件互锁,不能省
如果电梯是用接触器切换电机相序来实现换向,上下行接触器的线圈回路里必须做双重互锁:KM上行的常闭触点串到下行接触器线圈回路,KM下行的常闭触点串到上行接触器线圈回路,再加机械互锁。哪怕PLC程序已经写了Y0和Y1互锁,硬件上也要再锁一道,防止接触器卡死或者PLC输出故障导致两个方向同时得电。
用变频器的情况稍有不同,上下行信号是接到变频器的STF/STR端子,电机相序由变频器内部切换。但PLC输出Y0、Y1依然可能因为程序BUG同时为ON,所以梯形图里要互相闭锁:
LD M100 ; 运行允许 ANI Y1 ; 未输出下行 ANI M20 ; 未到达下限位 AND M50 ; 有上行请求 OUT Y0 ; 输出上行关键并不在于用什么品牌PLC,而在于“同一时刻只允许一个方向”这个约束要在每一层都成立。接中间继电器的时候,我也会把Y0和Y1对应的继电器触点互相串一下,作为驱动层的额外保险。
门锁环节同样如此。所有厅门、轿门门锁验证开关导通后,门锁继电器吸合,这个继电器的触点一方面给PLC提供X4输入,另一方面直接串在主接触器控制回路上。这样门没有锁好时,即使程序误判“门已关好”并输出运行,主接触器回路也不通,电梯动弹不了。
4.3 抱闸控制顺序比大多数人想象的更讲究
带电磁抱闸的曳引电机,线圈得电松闸、失电抱闸,这个特性本身就是一个机械安全装置。正因为如此,抱闸的控制时刻非常关键。
我遇到过不止一次现场问题:电梯刚启动的时候,如果先松抱闸后给速度,或者给速度和松抱闸同时进行,满载轿厢会先溜一下再被拉起来,钢丝绳会“嘣”地一声,冲击感很强。原因是电机还没建立起足够力矩,抱闸已经松了,轿厢靠重力往下溜。
正确做法是启动时先让变频器输出方向并开始建立频率,延时大概0.3到0.5秒,等电机有输出力矩了,再让Y7得电松抱闸。停车则反过来,平层信号到后,先撤掉速度输出,同时让抱闸接触器失电,让机械抱闸立即抱住,随后变频器封锁输出。整个过程顺序错了,舒适性差是小问题,溜车才是大问题。
当然,这个延时不能一刀切,要根据现场负载、曳引机特性和钢丝绳伸缩情况来调。我的调试方法是先在检修状态做低速试验,观察启动瞬间有没有溜车或过冲,再逐步把延时推向正常值。变频器如果能设置“频率到达”信号,也可以把该信号作为松抱闸的允许条件,比单纯延时更可靠。
5. 从空载调试到带载跑车:实测中最容易翻车的细节
5.1 模拟调试阶段拦下来的逻辑BUG
正式通电前,我在实验台上用按钮、开关和指示灯模拟了整个井道系统。这个阶段不需要真的电梯,把每层平层信号、门锁信号、上下限位信号分别接到对应的PLC输入端,再用DC24V指示灯代替接触器和变频器输出,就能把大部分逻辑错误找出来。
第一轮模拟就发现了一个典型问题:2楼同时有人按上行和下行,电梯从1楼上到2楼停靠,消掉了2楼上行呼梯和2楼内呼,开门再关门后,程序立即判断出“2楼还有下行呼梯”,准备换向下行。从逻辑上讲这不算错,但在真实的电梯使用场景里,乘客不可能同时按两个方向,这个呼梯多半是不同乘客在不同时间按的,电梯确实应该下一趟再下来接。问题出在我最初的方向仲裁条件里没有加“至少完成一次运行或者换向锁定时间”,导致电梯处理完2楼上行后立刻反向下行,从1楼出发本来只需要停一次,实际却可能为了同一个楼层停两次。修正方案是:在一个运行周期内,同一楼层的反向呼梯不参与当前换向判断,必须等电梯到达顶层/底层后重新分配方向时才被纳入。
第二轮模拟又查出一个更隐蔽的错误:运行中如果按了急停,我最初的程序会让所有输出清零,但M1xx呼梯登记不丢失。结果就是复位后电梯马上继续执行原来的呼梯,突然又走了,乘客根本来不及反应。正确的做法是急停复位后必须重新检测门锁、方向、位置,并且建议把当前的自动运行状态切回待机,让电梯需要重新召唤才运行,而不是把中断前的任务继续跑完。
5.2 抱闸时序、起动频率与平层精度的现场调整
把程序搬到真实设备上后,问题开始变得很“物理”。第一次低速跑车,轿厢空载上行时还好,空载下行时明显听到电机启动瞬间有一声闷响,像是钢丝绳被猛拽了一下。检查发现是松抱闸太早,电机输出频率还很低,力矩不足。我把Y7输出在运行指令后延时了0.4秒,同时把变频器启动频率适当提高一点,让曳引机在抱闸松开前已经建立足够的力矩,这个现象立刻减轻了。
平层精度也调了好几轮。最初两次跑车,电梯上行到2楼停车后,轿厢地板比楼层地板高出大概2厘米,下行时又低1厘米左右。这个差异主要来自抱闸动作方向和机械间隙。我把低速运行频率从15Hz降到8Hz,让停车前速度更慢,同时调整了停车信号触发的时机。最终把上行和下行停车误差都控制在了±1厘米以内,对货梯场景已经够用。
另一个让我印象深刻的是高速切低速瞬间的顿挫感。最开始我是“高速输出断开后马上输出低速”,变频器突然从高频切换到低频,电梯像被踩了一脚刹车,轿厢晃动很厉害。后来修改成“先断开高速,延时0.2秒再输出低速”,中间这段短暂滑行让电梯自然减速,切换冲击明显小了很多。这类问题没法完全靠梯形图推演,必须在现场反复试,记录每次参数修改后的现象。
5.3 楼层位置丢失后的恢复策略
楼层位置丢失是我一开始没充分考虑的情况。现场调试时检修人员把电梯手动开到两层之间,然后又上下移动了几次,PLC里的“当前楼层”就和实际位置对不上了。如果这时候有呼梯进来,PLC按错误楼层去判断方向,轻则电梯乱跑,重则可能往极限位置撞。
解决思路并不复杂,但必须在程序里提前做。我的做法是:
- 每经过一个平层感应器,就刷新“当前楼层”变量,让位置在正常运行时随时得到校正。
- 在上端站和下端站各装一个强迫换速开关。当电梯向上运行接近顶层时,即使PLC还不知道自己在几楼,只要这个开关动作,就强制切到低速,不能再高速冲顶;如果连这个开关都没被触发,最后还有极限开关切断安全回路。
- 如果PLC上电后发现没有楼层位置记忆,就只允许检修低速运行,不允许自动高速运行。检修状态下手动把电梯开到端站