1. 项目背景与工具准备
第一次接触PLC电梯控制系统时,我也被复杂的逻辑关系绕晕过。直到发现用博图(TIA Portal)搭配虚拟工厂(FactoryIO)做仿真,调试效率直接提升三倍。这个组合就像搭积木——博图负责编写控制逻辑,虚拟工厂提供可视化场景,两者通过PLCSIM驱动实时交互。
必装软件清单:
- 西门子TIA Portal V16(建议专业版)
- FactoryIO 2.5.2以上版本
- PLCSIM Advanced(用于高级仿真功能)
安装时有个坑要注意:必须先装TIA Portal再装FactoryIO,否则驱动模板无法自动识别。我曾在重装系统后搞反顺序,结果排查了整整一下午连接问题。另外建议给C盘留至少50GB空间,这两个软件加上仿真环境非常吃存储。
2. 电梯控制核心逻辑拆解
2.1 运动控制三要素
电梯的本质是状态机,需要明确三个核心状态:
- 位置状态:通过SQ1-SQ3限位开关检测楼层
- 运行方向:由UP/DOWN输出控制电机转向
- 门控状态:OPEN/CLOSE控制门机动作
在博图中用"电梯位置+运行方向"作为主控变量最稳妥。实测发现若只用楼层信号判断,会出现电梯未完全停稳就触发开门的情况。
2.2 优先级调度算法
当多个呼叫信号同时到达时,我采用的判断逻辑是:
IF 当前方向=上升 THEN 优先响应所有上升呼叫 再响应更高楼层的下降呼叫 ELSIF 当前方向=下降 THEN 优先响应所有下降呼叫 再响应更低楼层的上升呼叫 END_IF这个逻辑完美复现了现实电梯的"同向优先"原则。在FactoryIO场景中测试时,可以故意快速连续点击不同楼层按钮,观察电梯是否按预期响应。
3. 虚拟工厂场景搭建技巧
3.1 元件布局规范
在FactoryIO中搭建三层电梯场景时,建议按这个顺序布置元件:
- 拖入Elevator元件作为轿厢
- 添加3个Cylindrical Sensor作限位开关
- 每层放置Call Button(外呼)和Floor Button(内选)
- 用Indicator Light实现楼层/方向指示灯
关键细节:所有元件的Z轴坐标必须相同!我有次把二层按钮的Z值设错2cm,导致PLC无法检测到信号。正确的坐标参考值:
- 一层元件:Z=0
- 二层元件:Z=3(单位米)
- 三层元件:Z=6
3.2 变量映射诀窍
在导出变量到博图前,务必做两件事:
- 将所有英文变量名改为中文(双击即可编辑)
- 为每个按钮添加"_Pressed"后缀(如"一层上呼_Pressed")
这样在博图里编程时,变量表会自动按功能分组,后期维护方便很多。导出的CSV文件建议用"电梯_日期"格式命名,避免版本混乱。
4. 博图编程实战解析
4.1 模块化程序架构
我的程序结构分为5个FC块:
graph TD FC1[初始化块] --> FC2[按钮扫描] FC2 --> FC3[调度决策] FC3 --> FC4[运动控制] FC4 --> FC5[门控管理]每个FC块都有详细的接口注释,比如运动控制块的输入输出:
// 输入参数 IN CurrentFloor : INT // 当前楼层(1-3) IN TargetFloor : INT // 目标楼层(1-3) // 输出参数 OUT MotorUp : BOOL // 上升信号 OUT MotorDown : BOOL // 下降信号4.2 关键程序段示例
这是门控管理的核心逻辑,实现开门→延时→关门→自锁:
// 开门触发条件 IF (Arrival_Signal OR Call_Response) THEN Door_Timer(IN:=TRUE, PT:=T#1S); OPEN := TRUE; END_IF // 定时关门逻辑 IF Door_Timer.Q THEN Close_Timer(IN:=TRUE, PT:=T#2S); OPEN := FALSE; END_IF IF Close_Timer.Q THEN CLOSE := TRUE; // 复位所有相关标志位 END_IF注意要使用TONR型定时器,防止PLC停止时计时丢失。实际调试时,建议把延时时间先缩短为0.5S和1S,快速验证逻辑正确性。
5. 联调问题排查指南
5.1 常见故障现象
- 现象1:电梯到层后不停车 → 检查限位开关变量是否正确绑定到SQ1-SQ3
- 现象2:按钮按下无反应
→ 在博图监控表查看对应输入点是否触发 - 现象3:运行方向与预期相反 → 核对电机输出线序是否接反
5.2 高级调试技巧
在PLCSIM Advanced中启用Trace功能,可以录制以下关键信号:
- 所有限位开关状态
- 上升/下降输出
- 定时器当前值
录制一个完整的1→3→2运行周期,通过波形图能清晰看到状态切换是否满足时序要求。这个功能帮我定位过一个诡异的竞争条件问题——当两个楼层呼叫间隔小于100ms时,调度算法会漏判。
6. 效果优化与功能扩展
6.1 视觉反馈增强
在FactoryIO中给电梯井添加了半透明材质,运行时能清楚看到轿厢位置。还在每层门厅加了数字显示屏,用Text Display元件显示"▲"或"▼"表示电梯当前运行方向。
6.2 扩展功能实现
在基础功能稳定后,可以尝试:
- 增加超载报警功能(添加Weight Sensor)
- 实现消防模式(所有呼叫直通首层)
- 添加语音播报(通过ALARM_SQ指令)
记得每添加一个新功能就新建一个FC块,保持程序模块化。有次我把所有逻辑写在一个块里,结果调试时找了两个小时才定位到一个变量重复使用的问题。