1. 项目概述:三层电梯控制系统开发实录
去年接手了一个三层电梯控制系统的改造项目,客户要求保留原有机械结构,但需要全面升级控制系统。最终方案采用了西门子S7-1200 PLC作为下位机,组态王6.55作为上位监控系统,开发平台使用TIA Portal V15.1。这个组合在中小型工业控制项目中非常典型,既有西门子PLC的稳定可靠,又能通过组态王实现友好的人机交互。
整个项目周期约两周,其中硬件接线和基础功能实现只用了3天,大部分时间都花在了通讯调试和异常处理上。这也是工业控制项目的典型特点——核心逻辑可能很简单,但要让系统在各种工况下稳定运行,需要处理大量细节问题。下面我就从硬件配置、通讯建立、PLC编程、HMI设计四个维度,详细拆解这个项目的实现过程。
2. 硬件配置与网络架构
2.1 设备选型考量
选择S7-1200 PLC(1214C DC/DC/DC型号)主要基于三点考虑:
- I/O点数需求:三层电梯需要6个楼层呼叫按钮(每层上下)、3个楼层限位开关、2个电机控制输出(正反转)、门机控制等,总计约20个数字量点,1214C的14输入/10输出完全够用
- 通讯能力:内置PROFINET接口支持S7协议,与组态王通讯时无需额外通讯模块
- 成本因素:相比S7-1500系列性价比更高,适合这种小型控制场景
实际项目中特别提醒:1214C有继电器和晶体管两种输出类型,电梯控制建议选用晶体管输出型(DC/DC/DC),因为电机控制需要高频开关,继电器触点容易烧蚀。
2.2 网络拓扑设计
系统采用最简星型拓扑:
code复制[工程师电脑]---[交换机]---[S7-1200 PLC]
|
[组态王HMI电脑]
- 所有设备IP设置为同一网段(如192.168.1.x)
- 子网掩码统一为255.255.255.0
- 交换机选用普通百兆工业交换机即可
3. S7通讯协议配置详解
3.1 PLC端通讯设置
在TIA Portal中需要完成以下配置:
- 在设备视图中为PLC添加新子网
- 设置IP地址(如192.168.1.100)和子网掩码
- 在"防护与安全"中关闭防火墙(仅调试阶段)
- 在"连接机制"中勾选"允许来自远程对象的PUT/GET通信访问"
pascal复制// 博途中对应的SCL配置代码
"PLC_1"[0].IP_Address := '192.168.1.100';
"PLC_1"[0].Subnet_Mask := '255.255.255.0';
"PLC_1"[0].Firewall := FALSE;
3.2 组态王通讯配置实战
组态王6.55通过S7驱动连接PLC,具体参数设置:
- 新建设备→选择"西门子_S7系列TCP"驱动
- 设备地址填写PLC的IP:192.168.1.100
- 机架号(Rack)填0,插槽号(Slot)填1(这是S7-1200的固定值)
- 通讯超时建议设为2000ms
- 采集周期根据需求设置,电梯控制建议500ms
常见连接问题排查:
- 连接超时:检查物理链路、IP设置、防火墙
- 数据不更新:检查变量地址映射是否正确
- 通讯中断:检查网线质量,工业现场建议使用带屏蔽的网线
4. PLC控制程序设计
4.1 电梯状态机设计
采用有限状态机(FSM)模型设计控制逻辑,定义5个主要状态:
- 空闲状态(IDLE)
- 上行状态(UP)
- 下行状态(DOWN)
- 开门状态(DOOR_OPEN)
- 关门状态(DOOR_CLOSE)
pascal复制// 状态转换逻辑示例(SCL语言)
CASE #Elevator_State OF
IDLE:
IF #Call_Up OR #Call_Down THEN
#Elevator_State := MOVING;
END_IF;
MOVING:
IF #At_Target_Floor THEN
#Elevator_State := DOOR_OPEN;
ELSIF #Emergency_Stop THEN
#Elevator_State := IDLE;
END_IF;
DOOR_OPEN:
#Timer_Door_Open(IN := TRUE);
IF #Timer_Door_Open.Q THEN
#Elevator_State := DOOR_CLOSE;
END_IF;
END_CASE;
4.2 楼层定位逻辑
使用三个接近开关(1F/2F/3F)检测电梯当前位置:
- 每个开关对应一个DB块中的布尔变量
- 通过开关组合确定精确位置:
- 1F: 仅1F_SW为TRUE
- 2F: 仅2F_SW为TRUE
- 1-2F之间: 1F_SW和2F_SW都为FALSE
- 其他楼层间同理
实际调试中发现的问题:接近开关安装位置需要精确调整,距离轿厢太远会检测不到,太近可能误触发。建议先手动移动电梯,用博途的监控表观察开关信号。
5. 组态王HMI设计要点
5.1 界面布局规划
采用分层设计:
- 主界面:显示电梯三维模型、当前楼层、运行方向
- 控制面板:包含所有楼层按钮、开关门按钮、急停按钮
- 状态监控页:显示所有I/O点实时状态,用于调试
cpp复制// 按钮创建示例(组态王脚本)
LONG CreateElevatorButton(LONG x, LONG y, LONG floor, BOOL isUp)
{
LONG btnID = CreateButton(x, y, 50, 30, "");
SetButtonText(btnID, isUp ? "▲" : "▼");
SetButtonColor(btnID, RGB(200,200,200));
return btnID;
}
5.2 动画效果实现
电梯轿厢移动动画通过以下步骤实现:
- 在画面中插入电梯井道背景图
- 添加轿厢图形并设置为可移动对象
- 建立变量关联:
- Y坐标 = 基准值 - (当前楼层-1)*层高
- 门状态 = 根据PLC的Door_Open信号控制门图形宽度
cpp复制// 动画刷新脚本
void OnTimer()
{
int floor = GetTagValue("Actual_Floor");
int yPos = 300 - (floor-1)*100; // 每层高100像素
SetObjectPos("Elevator_Car", 150, yPos);
if(GetTagValue("Door_Open")) {
AnimateDoor(OPEN);
} else {
AnimateDoor(CLOSE);
}
}
6. 调试经验与问题解决
6.1 通讯延迟优化
初期测试发现按钮响应有约1秒延迟,通过以下措施优化:
- 将组态王的采集周期从1000ms降为300ms
- 在PLC中优化DB块结构,将控制变量集中存放
- 使用S7协议的"异步传输"模式
优化前后对比:
| 参数 | 优化前 | 优化后 |
|---|---|---|
| 按钮响应延迟 | 1200ms | 300ms |
| CPU负载 | 15% | 22% |
6.2 紧急停止逻辑测试
安全测试时发现的问题:
- 直接切断电机电源会导致轿厢滑移
- 解决方案:在急停程序中加入制动控制序列
- 切断电机电源
- 激活电磁制动器
- 保持制动直到手动复位
pascal复制// 急停处理程序
IF #Emergency_Stop THEN
#Motor_Up := FALSE;
#Motor_Down := FALSE;
#Brake := TRUE;
#Emergency_Active := TRUE;
END_IF;
7. 系统扩展思考
当前系统还可进一步优化:
- 增加Modbus RTU接口连接变频器,实现电机调速
- 通过OPC UA将数据上传至MES系统
- 加入人脸识别模块实现楼层权限控制
- 用WinCC Advanced替代组态王,获得更好的3D效果
实际项目中的体会是,电梯控制系统看似简单,但要考虑的安全因素非常多。建议在正式运行前至少进行200次全行程测试,特别要模拟各种异常情况,如断电恢复、按钮卡死、超载等场景。