1. 项目概述:PLC控制的自动门系统
在商场、写字楼和医院等公共场所,自动门已经成为标配设施。作为一名工业自动化工程师,我经常需要设计和调试这类系统。PLC(可编程逻辑控制器)因其稳定性和可靠性,成为自动门控制的首选方案。今天我要分享的是基于西门子S7-1200 PLC的自动门控制系统开发经验,包含完整的PLC程序设计和仿真验证过程。
这个系统主要由三部分组成:传感器检测单元(红外传感器)、控制单元(PLC)和执行单元(门电机)。当红外传感器检测到有人接近时,PLC会发出开门指令;当人员离开后,经过预设延时,PLC会控制门自动关闭。看似简单的逻辑背后,其实需要考虑很多工程细节,比如防夹保护、紧急停止、故障报警等安全机制。
2. 硬件配置与信号定义
2.1 PLC选型与硬件连接
西门子S7-1200系列PLC是中小型自动化项目的理想选择。对于自动门控制,我们选用CPU 1214C DC/DC/DC型号,它具有14点数字量输入和10点数字量输出,完全满足需求。
硬件连接方案如下:
- 红外传感器:接在I0.0(常开触点,检测到人时闭合)
- 防夹光电开关:接在I0.1(门关闭过程中如检测到障碍物则断开)
- 紧急停止按钮:接在I0.2(常闭触点,按下时断开)
- 门开到位限位开关:接在I0.3(门完全打开时闭合)
- 门关到位限位开关:接在I0.4(门完全关闭时闭合)
- 门电机正转控制:Q0.0(控制电机正转开门)
- 门电机反转控制:Q0.1(控制电机反转关门)
- 故障指示灯:Q0.2(系统故障时点亮)
注意:实际接线时务必确保所有安全回路采用常闭触点设计,这样在断线或电源故障时系统会自动进入安全状态。
2.2 I/O地址分配表
为便于编程和维护,我通常会建立详细的I/O地址分配表:
| 信号名称 | 类型 | 地址 | 说明 |
|---|---|---|---|
| People_Detect | DI | I0.0 | 红外人体检测信号 |
| Safety_Screen | DI | I0.1 | 防夹光电开关信号 |
| Emergency_Stop | DI | I0.2 | 紧急停止按钮信号 |
| Door_Open_LS | DI | I0.3 | 门开到位限位开关 |
| Door_Close_LS | DI | I0.4 | 门关到位限位开关 |
| Motor_Open | DO | Q0.0 | 门电机正转(开门)控制 |
| Motor_Close | DO | Q0.1 | 门电机反转(关门)控制 |
| Fault_Indicator | DO | Q0.2 | 系统故障指示灯 |
3. PLC程序设计详解
3.1 程序结构设计
采用模块化编程思想,将程序分为以下几个功能块:
- OB1:主循环组织块
- FC1:门控制逻辑功能
- FC2:安全监控功能
- DB1:数据块存储系统参数和状态
这种结构使程序更清晰,便于后期维护和功能扩展。
3.2 主控制逻辑实现
以下是使用SCL语言编写的主控制逻辑(FC1):
scl复制// 自动门控制逻辑功能块
FUNCTION "Door_Control" : VOID
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
People_Detect : Bool; // 人体检测信号
Door_Open_LS : Bool; // 门开到位信号
Door_Close_LS : Bool; // 门关到位信号
Safety_OK : Bool; // 安全条件满足
Auto_Mode : Bool; // 自动模式使能
END_VAR
VAR_OUTPUT
Cmd_Open : Bool; // 开门命令
Cmd_Close : Bool; // 关门命令
END_VAR
VAR
Open_Timer : TON; // 开门延时定时器
Close_Delay_Timer : TON; // 关门延时定时器
END_VAR
BEGIN
// 初始化输出
Cmd_Open := FALSE;
Cmd_Close := FALSE;
// 自动模式下的控制逻辑
IF Auto_Mode AND Safety_OK THEN
// 有人靠近且门未完全打开时,执行开门动作
IF People_Detect AND NOT Door_Open_LS THEN
Cmd_Open := TRUE;
Cmd_Close := FALSE;
Open_Timer(IN := TRUE, PT := T#2S);
END_IF;
// 开门到位后保持2秒
IF Door_Open_LS THEN
Open_Timer(IN := TRUE, PT := T#2S);
IF Open_Timer.Q THEN
Cmd_Open := FALSE;
Close_Delay_Timer(IN := TRUE, PT := T#5S);
END_IF;
END_IF;
// 无人且延时时间到,执行关门动作
IF NOT People_Detect AND Close_Delay_Timer.Q AND NOT Door_Close_LS THEN
Cmd_Close := TRUE;
END_IF;
// 关门到位后停止
IF Door_Close_LS THEN
Cmd_Close := FALSE;
END_IF;
END_IF;
END_FUNCTION
3.3 安全功能实现
安全功能单独放在FC2中实现,确保即使主逻辑出现问题,安全功能仍然有效:
scl复制FUNCTION "Safety_Monitor" : Bool
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Emergency_Stop : Bool; // 急停信号
Safety_Screen : Bool; // 防夹光电信号
Door_Open_LS : Bool; // 门开到位
Door_Close_LS : Bool; // 门关到位
Motor_Open : Bool; // 实际开门输出
Motor_Close : Bool; // 实际关门输出
END_VAR
VAR_OUTPUT
Safety_OK : Bool; // 安全条件满足
Fault_State : Bool; // 故障状态
END_VAR
VAR
Safety_Timer : TON; // 安全延时定时器
END_VAR
BEGIN
// 默认状态
Safety_OK := TRUE;
Fault_State := FALSE;
// 急停触发时立即切断所有输出
IF NOT Emergency_Stop THEN
Safety_OK := FALSE;
Fault_State := TRUE;
END_IF;
// 防夹保护
IF NOT Safety_Screen AND Motor_Close THEN
Safety_OK := FALSE;
END_IF;
// 门位置异常检测(开门和关门信号同时有效)
IF Door_Open_LS AND Door_Close_LS THEN
Fault_State := TRUE;
END_IF;
// 电机输出异常检测(同时输出正反转信号)
IF Motor_Open AND Motor_Close THEN
Fault_State := TRUE;
END_IF;
// 门运动超时检测
IF (Motor_Open AND NOT Door_Open_LS) THEN
Safety_Timer(IN := TRUE, PT := T#10S);
IF Safety_Timer.Q THEN
Fault_State := TRUE;
END_IF;
ELSIF (Motor_Close AND NOT Door_Close_LS) THEN
Safety_Timer(IN := TRUE, PT := T#10S);
IF Safety_Timer.Q THEN
Fault_State := TRUE;
END_IF;
ELSE
Safety_Timer(IN := FALSE);
END_IF;
END_FUNCTION
4. 仿真测试与验证
4.1 PLCSIM Advanced仿真环境搭建
西门子PLCSIM Advanced提供了强大的仿真功能,可以模拟实际PLC的运行。设置步骤如下:
- 在TIA Portal中创建新项目,完成硬件配置和编程
- 在"扩展的下载到设备"对话框中选择"PLCSIM Advanced"作为目标设备
- 设置PLC实例名称和IP地址(建议使用127.0.0.1)
- 下载硬件配置和程序到仿真器
- 启动仿真实例并切换到RUN模式
4.2 仿真测试用例设计
为确保系统可靠性,我设计了以下测试用例:
| 测试场景 | 预期结果 | 验证要点 |
|---|---|---|
| 单人正常通过 | 人接近时门打开,通过后延时关闭 | 开关门时序是否正确 |
| 多人连续通过 | 门保持打开状态,最后一人通过后延时关闭 | 延时计时是否重置 |
| 门运动中有人接近 | 关门过程中有人接近应立即重新开门 | 中断关门响应时间 |
| 防夹保护触发 | 关门过程中触发防夹信号应立即停止并反转开门 | 安全响应时间(<0.5s) |
| 急停按钮按下 | 立即停止所有动作,需手动复位 | 急停优先级最高 |
| 门运动超时 | 超过10秒未到位应报故障并停止 | 防止电机堵转 |
4.3 仿真结果分析
通过仿真测试,我们发现几个需要优化的地方:
- 关门延时时间固定5秒不适合所有人流情况,应改为可调参数
- 防夹保护触发后,门应后退一定距离再停止,避免夹伤风险
- 增加"慢速关门"区域,当门接近关闭位置时降低速度
优化后的关门控制逻辑如下:
scl复制// 优化后的关门逻辑
IF NOT People_Detect AND Close_Delay_Timer.Q AND NOT Door_Close_LS THEN
// 接近关门位置时低速运行
IF Door_Position > 90 THEN
Cmd_Close_Slow := TRUE;
Cmd_Close_Fast := FALSE;
ELSE
Cmd_Close_Slow := FALSE;
Cmd_Close_Fast := TRUE;
END_IF;
// 防夹保护处理
IF NOT Safety_Screen THEN
Cmd_Close_Fast := FALSE;
Cmd_Close_Slow := FALSE;
Cmd_Open := TRUE;
Backoff_Timer(IN := TRUE, PT := T#1S);
END_IF;
END_IF;
// 防夹后退处理
IF Backoff_Timer.Q THEN
Cmd_Open := FALSE;
END_IF;
5. 现场调试与优化
5.1 现场安装注意事项
- 传感器安装高度:红外传感器建议安装高度1.2-1.5米,倾斜角度约15°向下
- 防夹光电对射距离:根据门宽选择合适型号,确保覆盖整个门口区域
- 限位开关调整:机械限位与软件限位配合使用,确保门不会撞击到头
- 电机过载保护:根据电机额定电流设置合适的热继电器参数
5.2 参数整定经验
通过多个项目实践,我总结出以下参数设置经验:
- 开门全程时间:3-5秒(大型门可适当延长)
- 关门快速段:占总行程的90%,速度0.3-0.5m/s
- 关门慢速段:最后10%行程,速度0.1-0.15m/s
- 防夹后退距离:5-10cm
- 无人保持时间:商业场所5-8秒,医院等特殊场所10-15秒
5.3 常见故障排查
根据现场维护经验,常见故障及解决方法如下:
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 门不动作 | 电源故障/急停触发 | 检查电源和急停回路 |
| 只能开不能关 | 关门限位信号异常 | 检查限位开关和接线 |
| 开关门方向反 | 电机相序接反 | 调换任意两相电机线 |
| 频繁报超时故障 | 机械阻力过大 | 检查轨道和传动机构 |
| 防夹误动作 | 光电对射不准 | 重新调整光电传感器位置 |
6. 系统扩展与升级
6.1 联网监控功能
现代自动门系统往往需要接入楼宇管理系统,可通过以下方式实现:
- 通过S7-1200的PROFINET接口连接上位机
- 使用OPC UA协议实现跨平台数据交换
- 添加Web服务器功能,支持远程监控
6.2 节能模式优化
为降低能耗,可增加以下功能:
- 人流量统计自动调整运行参数
- 非高峰时段延长关门延时
- 夜间模式完全关闭部分功能
6.3 安全功能增强
对于特殊场所,可考虑:
- 增加备用电源(UPS)
- 双路安全信号冗余设计
- 地震感应紧急全开功能
在实际项目中,我发现很多细节问题只有在现场调试时才会暴露。比如有一次,商场自动门在早晚阳光直射时红外传感器会误触发,后来我们调整了传感器角度并增加了光强过滤功能才解决问题。这也提醒我们,好的自动化系统不仅要有严谨的程序设计,还需要充分考虑各种现场环境因素。