1. 项目背景与行业现状
电梯控制系统作为现代建筑的核心设备之一,其程序设计与实现直接关系到乘客的安全体验和建筑运营效率。西门子S7-1200系列PLC凭借其稳定的性能和灵活的编程环境,已成为电梯控制领域的主流选择。在实际工程项目中,二部和三部六层电梯的配置非常常见于中小型商业综合体、写字楼和住宅小区。
我曾在多个现场项目中负责这类电梯控制系统的调试工作。相比单部电梯,多部电梯联动的程序复杂度呈几何级数增长,需要处理轿厢调度、群控逻辑、安全互锁等关键技术点。特别是当遇到高峰时段的人流压力时,合理的控制算法能显著提升运输效率20%以上。
2. 硬件架构解析
2.1 典型系统组成
一套完整的S7-1200电梯控制系统通常包含:
- 主控单元:CPU 1214C DC/DC/DC(建议固件版本V4.2以上)
- 数字量扩展模块:SM1223 DI16/DQ16 ×2(每部电梯需独立配置)
- 模拟量输入模块:SM1231 AI8 ×1(用于称重传感器信号采集)
- HMI设备:KTP700 Basic触摸屏(每部电梯轿厢内安装)
- 通信网络:Profinet环网(需配置SCALANCE XB005交换机)
关键提示:DI模块的输入滤波时间建议设置为3ms,既能有效消除触点抖动,又不会影响响应速度。这个参数在电梯门机控制中尤为重要。
2.2 安全回路设计
安全回路必须采用独立于PLC的硬线连接,包含:
- 安全继电器:3TK2828-1CB30(强制导向触点型)
- 急停按钮:常闭触点串联接入
- 限速器开关:每部电梯独立检测
- 厅门/轿门锁触点:采用双通道检测
在程序内部需要建立对应的安全状态监测:
ST复制// 安全回路状态监测
IF "急停按钮" OR NOT "安全继电器反馈" OR "限速器触发" THEN
"安全回路断开" := TRUE;
"运行使能" := FALSE;
END_IF;
3. 核心控制逻辑实现
3.1 呼叫分配算法
对于三部六层电梯的群控系统,我采用改进的最短等待时间算法(SWT):
ST复制// 呼叫分配函数
FUNCTION "分配呼叫" : VOID
VAR_INPUT
新呼叫楼层 : INT;
呼叫方向 : BOOL; // TRUE=上行, FALSE=下行
END_VAR
VAR
最优电梯 : INT := 1;
最小等待时间 : TIME := T#1H;
END_VAR
FOR i := 1 TO 3 DO
当前等待 := 计算预估时间(i, 新呼叫楼层, 呼叫方向);
IF 当前等待 < 最小等待时间 THEN
最小等待时间 := 当前等待;
最优电梯 := i;
END_IF;
END_FOR;
// 记录分配结果
"电梯"[最优电梯]."分配呼叫"(新呼叫楼层, 呼叫方向);
3.2 运动控制程序
电梯运行状态机采用经典的5态模型:
- 空闲状态:等待呼叫
- 关门状态:检测障碍物
- 加速状态:S曲线速度规划
- 匀速状态:位置闭环控制
- 减速状态:精确平层
速度曲线生成算法示例:
ST复制// S曲线速度规划
FUNCTION "生成速度曲线" : REAL
VAR_INPUT
当前距离 : REAL; // 距离目标楼层的脉冲数
最大加速度 : REAL := 0.8; // m/s²
额定速度 : REAL := 1.75; // m/s
END_VAR
VAR
加速段距离 : REAL := (额定速度^2)/(2*最大加速度);
当前速度 : REAL;
END_VAR
IF 当前距离 > 加速段距离 THEN
// 匀速段
当前速度 := 额定速度;
ELSE
// 加速段
当前速度 := SQRT(2 * 最大加速度 * 当前距离);
END_IF;
// 开始减速的判断
IF 剩余距离 <= 加速段Distance THEN
当前速度 := SQRT(2 * 最大加速度 * 剩余距离);
END_IF;
RETURN 当前速度;
4. 关键问题解决方案
4.1 轿厢位置校准
现场调试中最常见的问题是编码器累积误差,我的解决方案是:
- 每层设置双光电开关(强减速+精确定位)
- 采用绝对值编码器+软件校验算法
- 每周自动执行一次全楼层自学习
校准程序核心逻辑:
ST复制IF "到达强减速开关" THEN
"当前楼层" := 开关对应楼层;
"脉冲计数器" := 楼层基准值;
"速度设定值" := 0.2; // 进入低速搜索模式
END_IF;
IF "到达精确定位开关" THEN
"精确平层中" := TRUE;
"位置闭环使能" := TRUE;
END_IF;
4.2 多电梯通信同步
三部电梯通过Profinet实现数据交换时需注意:
- 设置通信超时检测(建议300ms)
- 重要数据采用"值+时间戳"双校验
- 网络负载不超过40%
通信数据块定义示例:
ST复制TYPE "电梯状态" :
STRUCT
当前楼层 : INT;
运行方向 : BOOL; // TRUE=上行
门状态 : INT; // 0=关闭, 1=开启中, 2=开启
故障代码 : WORD;
最后更新时间 : TIME;
END_STRUCT;
END_TYPE
5. 调试技巧与经验
5.1 现场调试流程
根据我的项目经验,建议按以下顺序调试:
- 安全回路单独测试(短接PLC验证)
- 单部电梯手动模式调试
- 单部电梯自动模式调试
- 多电梯通信测试
- 群控算法验证
避坑指南:在调试门机时,务必先测试障碍物检测功能。我曾遇到因光幕灵敏度设置不当导致夹人事故,后来固定使用50mm直径测试棒进行三次重复测试。
5.2 参数优化建议
经过多个项目验证的推荐参数:
| 参数项 | 二部电梯值 | 三部电梯值 | 单位 |
|---|---|---|---|
| 加速度 | 0.7-0.8 | 0.6-0.7 | m/s² |
| 减速度 | 0.8-1.0 | 0.7-0.9 | m/s² |
| 平层精度 | ±5 | ±3 | mm |
| 开门延时 | 3-5 | 2-4 | s |
| 最大等待时间 | 30-40 | 20-30 | s |
6. 程序架构设计建议
6.1 模块化编程结构
我推荐的OB块组织方式:
code复制OB1:主循环
OB35:100ms定时中断(运动控制)
OB82:故障处理
FB1:单部电梯控制
FB2:呼叫分配
FB3:HMI接口
DB1:电梯1数据
DB2:电梯2数据
DB3:电梯3数据
6.2 报警管理系统
完善的报警处理应包含:
- 实时报警(立即停梯)
- 安全回路断开
- 超速110%
- 通信丢失
- 一般报警(记录并提示)
- 门异常
- 过载
- 位置偏差
报警处理程序示例:
ST复制IF "安全回路断开" THEN
"紧急制动" := TRUE;
"报警代码" := 16#0001;
SET_ALARM(1);
ELSIF "门异常次数" > 3 THEN
"停梯维护" := TRUE;
"报警代码" := 16#0102;
SET_ALARM(2);
END_IF;
在实际项目中,我发现将平层精度控制在±3mm以内时,乘客几乎感受不到停止时的顿挫感。这需要通过反复调整PID参数和机械制动时序来实现,建议先用空载调试,再逐步增加负载测试。