五层电梯三菱plc程序有注释,有io分配表,电气接线图。 实现的功能如下。 (提供学习,由于文件形式发送) 功能:1、外呼梯功能:电梯门外有呼叫信号时,电梯运行到呼叫楼层停止,然后电梯开门到达一段时间后电梯关门,消去呼叫信号。 2、内呼梯功能:电梯门内有呼叫信号时,电梯运行到呼叫楼层停止,然后电梯开门到达一段时间后电梯关门,消去呼叫信号。 3、电梯门联锁功能:电梯运行时处于关门状态,不能开门。 电梯开门时电梯关门不运行,。 电梯关门时电梯开门不运行 4、顺向截梯功能:在电梯向上或向下运行时,当出现同方向的内、外呼梯信号出现时,电梯运行到相应的楼层停下响应呼叫后消去呼叫信号,而相反方向的呼叫信号不响应。 5、有优先级。
IO信号分配骚操作
按钮信号直接采用矩阵扫描节省输入点,比如X0-X4接1-5层上行按钮,X5-X9接下行按钮。电梯内部楼层选择用Y0-Y4直接对应1-5层,开门信号用Y10配合光电传感器X20做互锁。
// 外呼梯信号锁存(以3楼上行为例) LD M8000 // PLC运行常ON OUT TR0 // 临时寄存器 LD X2 // 3楼外呼上行按钮 OR M100 // 自保持触点 ANI T0 // 开门完成定时器 OUT M100 // 外呼信号保持这里用T0定时器实现开门保持3秒逻辑,M100作为外呼信号记忆。注意用ANI闭点确保关门后自动复位呼叫信号。
方向决策是重头戏:
// 运行方向判断(当前层=D0,目标层=D1) CMP D0 D1 M50 // 比较当前层与目标层 MOV K1 D2 // 方向寄存器初始化 LD M50 // D0 < D1时置位上行 OUT Y20 // 上行输出 LD M51 // D0 > D1时置位下行 OUT Y21 // 下行输出这段用到了三菱PLC的比较指令,M50/M51分别对应大于/小于状态。D2寄存器的妙处在于存储临时目标层,配合MOV指令动态更新。
门锁互锁必须够狠:
// 门机安全互锁 LD Y20 // 上行运行中 OR Y21 // 或下行运行中 OUT M30 // 运行状态标志 LD M30 ANI X20 // 门位置传感器(0=关到位) OUT Y10 // 开门动作禁止当M30=1(电梯移动时),直接切断开门输出回路。这里用了硬件互锁+软件互锁双重保险,实测中遇到过光电传感器误触发,多加了个T5延时判断。
顺向截梯的代码骚套路:
// 上行时响应同向呼叫 LD Y20 // 上行状态 CPS <= D0 D1 M60 // 当前层<=目标层 LD M60 AND M100 // 外呼上行信号 OUT M101 // 有效截梯信号 MOV D1 D3 // 更新临时目标层这里用了CPS指令实现动态范围比较,重点在于只更新比当前运行方向更远的目标层。比如电梯在2楼上升时,4楼外呼会被响应,但1楼外呼直接无视。
优先级处理的黑魔法:
- 内呼 > 同向外呼 > 反向外呼
- 紧急停止信号直接切断所有输出
// 内呼优先处理 LD Y0-Y4 // 内呼楼层按钮 ORB // 或逻辑块 MOV K5 D10 // 优先级权重赋值 CMP D10 D11 M70 // 与当前目标优先级比较 LD M70 OUT M200 // 抢占执行标志用D10-D14寄存器做优先级权重池,实时比较当前执行指令与新信号的权重值。实测发现用浮点数运算反而容易丢信号,直接上整数比较稳如老狗。
避坑指南:
- 层高脉冲计数必须加毛刺滤波(建议用T192定时器做10ms滤波)
- 电机抱闸输出记得加0.5秒延时防止溜车
- 开关门力矩用PWM控制比单纯定时更靠谱
完整IO表:
X0-X4 | 1-5层外呼上行 X5-X9 | 1-5层外呼下行 X10-X14 | 轿厢内选层 X20 | 门关到位信号 Y0-Y4 | 楼层指示灯 Y10 | 开门动作 Y11 | 关门动作 Y20/Y21 | 上行/下行输出接线图要点:
- 所有按钮COM端接24V-
- 输出端继电器线圈并接续流二极管
- 门机变频器控制线必须双绞+屏蔽接地
这程序最秀的地方在于用D寄存器玩出了数组效果,后期扩展楼层数只需要改比较值域。曾经在工地被甲方逼着加了个消防迫降功能,其实就是在优先级里插了个最高权重信号,下次可以单独唠这个。