1. 项目概述
这个六层双电梯联控系统是我在工厂实际部署的一套工业级解决方案,核心在于用西门子S7-200 SMART PLC实现两台电梯的智能调度。最特别的是系统采用类似外卖平台的抢单机制——两台电梯共用外呼按钮,通过实时位置计算动态分配任务。上位机使用组态王6.53构建可视化界面,下位机PLC程序包含完整的电梯状态机、调度算法和故障处理逻辑。
关键创新点:将共享经济中的动态调度思想引入传统电梯控制,通过PLC程序实现毫秒级响应决策
系统硬件架构很简单但足够可靠:
- 控制核心:西门子S7-200 SMART CPU ST30
- 输入模块:16点DI x2(处理48个按钮信号)
- 输出模块:16点DO x2(驱动楼层指示灯和轿厢控制)
- HMI接口:通过PPI协议连接组态王上位机
2. 核心控制逻辑解析
2.1 外呼抢答机制
这个系统的灵魂在于外呼信号的动态分配。我们设计了三级判断逻辑:
-
方向优先原则:运行中的电梯只响应同方向请求
- 上行电梯(M10.0=1)仅处理更高楼层的外呼
- 下行电梯(M10.1=1)仅处理更低楼层的外呼
- 静止电梯(M10.2=1)可响应任意方向呼叫
-
距离计算算法:
st复制// 电梯1距离计算 SUB VB0, 外呼楼层, VD200 // VB0存储电梯1当前层 ABS VD200, VD204 // 取绝对距离 // 电梯2距离计算(同理) SUB VB1, 外呼楼层, VD208 ABS VD208, VD212 -
仲裁规则:
- 距离近者优先响应
- 等距时2号电梯优先(通过MOV 2#00000001强制置位)
- 空闲电梯优先于运行中电梯
2.2 状态机设计
每台电梯都实现完整的状态机控制:
code复制[IDLE] -> 外呼触发 -> [DECIDE]
-> 内呼触发 -> [DECIDE]
[DECIDE] -> 目标在上方 -> [ASCENDING]
-> 目标在下方 -> [DESCENDING]
[ASCENDING/DESCENDING] -> 到达目标 -> [DOOR_OPEN]
-> [IDLE]
关键是用S7-200的顺控指令实现状态转换:
st复制LD SM0.1 // 首次扫描
S S0.0, 1 // 初始化状态
SCRT S0.1 // 转移到空闲状态扫描
3. 程序实现细节
3.1 内存分配规划
为保证实时性,我们精心设计了变量存储区:
| 地址范围 | 用途 | 备注 |
|---|---|---|
| VB0-VB1 | 电梯1/2当前楼层 | 1-6对应实际楼层 |
| VB10-VB15 | 电梯1内呼登记 | 每位代表一个楼层 |
| VB20-VB25 | 电梯2内呼登记 | |
| VW100-VW111 | 外呼信号存储 | 每层占1字(上/下各1位) |
| VD200-VD219 | 计算缓冲区 | 存放临时距离计算结果 |
3.2 关键子程序剖析
楼层距离计算子程序:
st复制// 输入:VBx=电梯当前层,VBy=呼叫层
// 输出:VDz=绝对距离
SUB VBx, VBy, VDz+0
ABS VDz+0, VDz+4
方向判断逻辑:
st复制LD 呼叫楼层
A>= VB0 // 比较当前层
= M10.0 // 上行标志位置位
调试发现:必须用>=而非>,否则会出现楼层卡顿
4. 组态王界面开发
上位机界面采用分层设计:
- 物理层:模拟真实电梯按钮布局
- 状态层:用不同颜色箭头表示运行方向
- 红色上箭头:上行中
- 蓝色下箭头:下行中
- 绿色常亮:空闲状态
- 响应层:抢单成功的楼层会触发三次呼吸灯效果
动画实现关键脚本:
vb复制If 抢单成功 Then
For i = 1 To 3
Light.Color = RGB(0, 255/i, 0)
Delay 200
Next
End If
5. 调试经验与避坑指南
5.1 典型问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电梯不响应外呼 | VW100-VW111地址冲突 | 检查PLC与组态王地址映射 |
| 抢单逻辑失效 | 距离计算未取绝对值 | 增加ABS指令 |
| 楼层显示错乱 | VB0/VB1被意外改写 | 加写保护逻辑 |
| 呼吸灯不亮 | 动画脚本未关联变量 | 检查变量连接属性 |
5.2 三个必看调试技巧
-
强制诊断法:在状态监测表强制修改VB0/VB1的值,模拟电梯位置变化,观察抢单逻辑是否符合预期
-
时序捕捉:用组态王的趋势图功能记录M10.0-M10.2的状态变化,确保状态机转换正常
-
压力测试:快速连续触发不同楼层外呼,测试系统是否会出现死锁(实测最多处理12个并发请求)
6. 系统优化方向
这套系统在实际运行中还可以进一步优化:
-
能耗优先模式:在距离相同时,选择静止电梯而非运行电梯,减少启停损耗
-
高峰调度算法:早高峰时段自动切换为"向上优先"模式,提高运输效率
-
故障自恢复:增加看门狗定时器,当电梯卡在某个状态超过30秒时自动复位
我在现场测试时发现个有趣现象:当两台电梯同时到达同一楼层时,它们的开关门动作会自然同步,就像在跳机械舞。这种 emergent behavior 虽然不在原设计范围内,但却意外提升了用户体验。