1. 项目概述:西门子杯三部十层电梯控制程序开发实录
去年参加西门子杯工业自动化竞赛时,我选择了电梯控制这个经典课题。用博图V18给S7-1200 PLC编写三部十层电梯的联控程序,配合WinCC人机界面实现完整监控功能。这个项目最考验对PLC顺序控制、多机通信和HMI组态的综合运用能力,过程中踩过的坑比预想的多得多。
三部电梯的协同调度是核心难点——要处理楼层呼叫分配、运行方向判断、优先响应逻辑,还得考虑节能模式和紧急状态处理。下面我就从硬件选型到软件实现,把整个开发过程的关键技术点拆解给大家,特别是那些官方手册不会告诉你的实战经验。
2. 硬件架构与通信配置
2.1 设备选型方案
-
PLC主机:S7-1214C DC/DC/DC(6ES7 214-1AG40-0XB0)
- 关键参数:14点DI/10点DO,2个PN口,支持PROFINET通信
- 选型理由:三部电梯需要至少18个输入(每层上行/下行按钮)和12个输出(每层指示灯),通过扩展信号板满足需求
-
HMI设备:KTP700 Basic(6AV2 123-2GB03-0AX0)
- 7寸触摸屏,集成PROFINET接口,与PLC直接通信延迟<50ms
-
网络拓扑:
plaintext复制
[工程师站PC]---[交换机]---[PLC#1]---[PLC#2]---[PLC#3] | [HMI触摸屏]
2.2 PROFINET实时通信配置
在博图V18中建立PROFINET网络时需要注意:
- 每个PLC的设备名称必须唯一(如Elevator_1/2/3)
- 设置相同的子网(如192.168.0.x)
- 通信周期设置为2ms(默认16ms不满足实时性要求)
关键技巧:在PLC属性中勾选"优先处理通信中断",可减少多机通信时的响应延迟
3. 控制程序设计详解
3.1 程序结构设计
采用模块化编程架构:
pascal复制// OB块组织
OB1:主循环(调用各FC块)
OB35:100ms定时中断(处理按钮扫描)
OB82:故障处理
// FC功能块
FC1:单梯控制核心逻辑
FC2:多梯调度算法
FC3:安全保护程序
FC4:HMI数据交互
3.2 核心算法实现
楼层呼叫分配逻辑:
STL复制// 在FC2中实现的伪代码
IF 外部呼叫信号 THEN
FOR 每部电梯计算:
当前运行方向
待停靠楼层数
与呼叫楼层的距离
END_FOR
选择综合得分最高的电梯响应
设置目标楼层寄存器
END_IF
方向判断真值表:
| 当前方向 | 目标楼层 | 动作 |
|---|---|---|
| 上行 | >当前层 | 继续上行 |
| 上行 | <当前层 | 完成当前任务后下行 |
| 下行 | <当前层 | 继续下行 |
| 下行 | >当前层 | 完成当前任务后上行 |
3.3 关键数据结构
在DB1中定义电梯状态数据块:
pascal复制STRUCT
CurrentFloor : INT; // 当前楼层(1-10)
TargetFloor : ARRAY[1..5] OF INT; // 目标楼层队列
Direction : INT; // 0停止,1上行,2下行
DoorStatus : BOOL; // 门状态
Emergency : BOOL; // 急停状态
END_STRUCT
4. WinCC人机界面开发
4.1 画面组态要点
- 楼层状态显示:用"符号IO域"绑定PLC的楼层寄存器
- 运行方向指示:箭头图形颜色关联Direction变量
- 呼叫按钮处理:按钮事件直接写PLC的M寄存器
vbscript复制// 按钮点击VBS脚本示例
Sub Button_Click()
Dim tag
Set tag = HMIRuntime.Tags("Call_Floor5")
tag.Write 1
End Sub
4.2 实时监控功能实现
- 趋势图:显示三台电梯的楼层变化曲线
- 报警记录:配置电梯故障报警(超时、急停等)
- 操作日志:记录所有楼层呼叫事件
避坑指南:WinCC变量刷新周期建议设为500ms,过高的刷新率会导致通信负载过大
5. 调试与优化实录
5.1 典型问题排查
-
问题现象:电梯偶尔会跳过某些楼层
- 原因:扫描周期过长导致按钮信号丢失
- 解决:在OB35中断中处理按钮扫描,周期改为100ms
-
问题现象:多机通信时数据不同步
- 原因:PROFINET IO设备未配置为同步模式
- 解决:在设备配置中启用"同步域"功能
5.2 性能优化措施
- 将频繁访问的DB块复制到M存储区
- 使用"边沿检测"指令处理按钮信号
- 在调度算法中加入空载返基站逻辑
6. 安全功能实现
6.1 急停电路设计
plaintext复制[急停按钮]---[安全继电器]---[PLC安全输入]
|
[接触器线圈]
6.2 软件保护逻辑
- 超速检测(>1.5m/s触发制动)
- 平层校正(±10mm误差补偿)
- 门锁互锁(未关门禁止运行)
7. 项目交付与测试
7.1 测试用例设计
| 测试场景 | 预期结果 | 实际记录 |
|---|---|---|
| 同向截梯 | 最近电梯响应 | 通过 |
| 反向呼叫 | 完成当前方向后响应 | 通过 |
| 两部电梯同层呼叫 | 空闲电梯优先 | 通过 |
7.2 现场调试心得
- 务必先单独测试每部电梯基本功能
- 网络通信测试要用物理断开网线的方式模拟故障
- WinCC画面变量建议添加质量码显示
这个项目让我深刻体会到工业控制程序的严谨性——一个简单的楼层判断逻辑错误就可能导致电梯"抽风"。最实用的建议是:在编写核心算法前,先用流程图把所有的状态转换画清楚,这比直接写代码效率高得多。另外,博图V18的交叉引用功能一定要善用,它能帮你快速定位变量冲突问题。
