Skip to main content

 

引言

在现代建筑中,自动门不仅提高了通行效率,还提升了用户体验。然而,如何确保自动门在安全和便利之间取得平衡,是设计和应用中的一大挑战。本文将介绍一种基于 PLC(可编程逻辑控制器)的智能自动门控制程序,该程序结合了运动传感器和安全传感器,实现了高效且安全的门控管理。通过对该程序的解析,读者将能够理解其工作原理及应用场景。


 

1

   

程序代码及介绍

下面是完整的 PLC 程序代码(代码基于 CodeSys 平台的 ST 语言):


FUNCTION_BLOCK FB_AutomaticDoor
VAR_INPUT
    MotionSensor : BOOL;            // 运动传感器(检测行人)
    SafetySensor : BOOL;            // 安全传感器(防夹)
    ManualOpen : BOOL;              // 手动开门按钮
    ManualClose : BOOL;             // 手动关门按钮
    EmergencyStop : BOOL;           // 急停
END_VAR
VAR_OUTPUT
    DoorOpenMotor : BOOL;           // 开门电机
    DoorCloseMotor : BOOL;          // 关门电机
    OpenIndicator : BOOL;           // 门开指示灯
    ClosedIndicator : BOOL;         // 门关指示灯
    Alarm : BOOL;                   // 报警(门异常)
END_VAR
VAR
    State : (CLOSED, OPENING, OPEN, CLOSING);
    OpenTimer : TON;                // 开门保持时间
    SafetyTimer : TON;              // 安全传感器触发计时
    ClosingTimer : TON;
END_VAR
// 急停优先
IF EmergencyStop THEN
    State := CLOSED;
    DoorOpenMotor := FALSE;
    DoorCloseMotor := FALSE;
    Alarm := TRUE;
    RETURN;
END_IF
CASE State OF
    CLOSED:
        ClosedIndicator := TRUE;
        IF MotionSensor OR ManualOpen THEN
            State := OPENING;
        END_IF
    OPENING:
        DoorOpenMotor := TRUE;
        OpenTimer(IN := TRUE, PT := T#5s);
        IF OpenTimer.Q THEN
            DoorOpenMotor := FALSE;
            State := OPEN;
            OpenTimer(IN := FALSE);
        END_IF
        // 开门过程中遇到障碍物,停止并报警
        IF SafetySensor THEN
            DoorOpenMotor := FALSE;
            State := CLOSED;
            Alarm := TRUE;
        END_IF
    OPEN:
        OpenIndicator := TRUE;
        OpenTimer(IN := TRUE, PT := T#10s);  // 开门保持时间10秒
        IF OpenTimer.Q OR ManualClose THEN
            State := CLOSING;
            OpenTimer(IN := FALSE);
        END_IF
        // 在开门状态下检测到行人,重新计时
        IF MotionSensor THEN
            OpenTimer(IN := FALSE);
            OpenTimer(IN := TRUE, PT := T#10s);
        END_IF
    CLOSING:
        DoorCloseMotor := TRUE;
        IF SafetySensor THEN
            // 安全传感器触发,重新开门
            DoorCloseMotor := FALSE;
            State := OPENING;
            SafetyTimer(IN := TRUE, PT := T#2s);
            IF SafetyTimer.Q THEN
                Alarm := TRUE;  // 安全传感器持续触发,报警
            END_IF
        ELSE
            SafetyTimer(IN := FALSE);
            ClosingTimer(IN := TRUE, PT := T#5s);
            IF ClosingTimer.Q THEN
                DoorCloseMotor := FALSE;
                State := CLOSED;
            END_IF
        END_IF
END_CASE

 

2

   

程序结构解析

该程序通过不同的状态控制自动门的开关,并保障行人的安全。其主要结构包括:

输入变量

  • MotionSensor: 检测是否有行人靠近的运动传感器信号。

  • SafetySensor: 用于防止夹伤的安全传感器。

  • ManualOpenManualClose: 分别用于手动开门和关门的按钮。

  • EmergencyStop: 紧急停止按钮,用于立即停止门的所有动作。

输出变量

  • DoorOpenMotorDoorCloseMotor: 控制开门和关门的电机状态。

  • OpenIndicatorClosedIndicator: 指示门是否打开或关闭的指示灯。

  • Alarm: 当出现异常情况时触发的报警信号。

内部变量

  • State: 表示自动门的当前状态,可以为 CLOSED(关闭)、OPENING(开门中)、OPEN(打开)和 CLOSING(关门中)。

  • OpenTimerSafetyTimerClosingTimer: 定时器,用于控制门的开关时间及安全检测。

逻辑流程

  • 首先检查是否按下紧急停止按钮,若按下则立即停止门的所有动作,发出警报。

  • 根据当前状态切换门的状态,处理行人接近、手动开关和安全传感器的反馈,确保门操作的安全性与及时性。


 

3

   

应用场景

该自动门控制程序适用于多个场景,例如:

商业建筑:如购物中心、大型超市等,通过自动门提高人流通行效率,同时保障顾客的安全。

办公楼:方便员工进出,提高工作效率,避免因手动开门导致的人流拥堵。

医院:在医疗场所中,自动门不仅提供便捷,还能有效减少交叉感染的风险。


 

4

   

拓展思考

在进一步的发展中,这一自动门控制系统可以扩展出更多的功能:

远程监控:将系统数据上传至云端,实现对门的实时监控和管理,便于维护和故障排查。

智能识别:结合人脸识别或 RFID 技术,实现更加智能化的门控管理,提升安全性和便捷性。

节能模式:根据人流量自动调整门的开关频率,减少不必要的能耗,达到节能效果。


 

总结

本文介绍了基于 PLC 的智能自动门控制系统,通过运动和安全传感器的结合,实现了高效、安全的门控管理。该系统不仅提升了通行效率,还注重了用户的安全需求。随着技术的发展,未来的自动门系统将更加智能化,为人们的生活带来更多便利。通过对该程序的学习,读者可以深入理解自动门的工作原理及其在日常生活中的重要性。

图片

你来出题 我来答图片图片图片

欢迎大家在评论区提一些标准功能块的需求,如果合适,我们会在以后的文章中与大家分享。

图片

往期回顾


 

每周一个编程小例子 :Bit 到 Word 转换的两种实现方案对比

每周一个编程小例子:记录设备运行时间

每周一个编程小例子:基于长按检测的启动控制系统

每周一个编程小例子:探秘 PLC 数据记录功能块

每周一个编程小例子:心跳检测与 PLC 应用

每周一个编程小例子:斜坡发生器

每周一个编程小例子:旋转速度计算

每周一个编程小例子:计算 PLC 循环周期|例程需求征集!

每周一个编程小例子:如何优雅的分割字符串

每周一个编程小例子:带反馈的阀门控制程序

每周一个编程小例子:西门子 LGF 库中的脉冲继电器功能块

每周一个编程小例子:曲线加减速的控制应用

每周一个编程小例子:轻松去除字符串前导字符

每周一个编程小例子:根据阈值更新输入

每周一个编程小例子:官方模拟量输入处理模块

每周一个编程小例子:主从电机的时序控制

每周一个编程小例子:基于一阶滞后滤波的优化方案

每周一个编程小例子:16 进制到浮点数的神奇转换

每周一个编程小例子:PLC 长按控制程序

每周一个编程小例子:PLC 程序实现多位整数拆分

每周一个编程小例子:流量累积计算器

每周一个编程小例子:用于连锁的电机标准控制模块

每周一个编程小例子:PID 控制算法在 PLC 系统中的实现与应用

每周一个编程小例子:自定义种子生成随机数

每周一个编程小例子:可调时间的脉冲生成器

每周一个编程小例子:带滤波的标准模拟量输入功能块

每周一个编程小例子:使用 PLC 将字符串转换为日期格式

每周一个编程小例子:PLC 配方管理

每周一个编程小例子:比较两个 DB 块(STL)

每周一个编程小例子:如何使用 PLC 实现数组逆序

每周一个编程小例子:流量累计与批次控制

每周一个编程小例子:自定义循环执行控制程序

每周一个编程小例子:步进控制功能块

每周一个编程小例子:PLC 权重比例分配器

每周一个编程小例子:数字量输入组监控

每周一个编程小例子:实时数据分析

每周一个编程小例子:PLC 多轴同步控制的理解与应用

每周一个编程小例子:PLC 波形生成器 (正弦 方波 三角波)

每周一个编程小例子:模拟量信号报警

每周一个编程小例子:组合数概率的实现

每周一个编程小例子:多传感器信号融合与优化方案

每周一个编程小例子:监控模拟信号的健康状态

每周一个编程小例子:PLC 程序实现模拟信号的线性校准

每周一个编程小例子:智能报警过滤器:优化报警系统的 PLC 程序

每周一个编程小例子:使用 PLC 程序让灯光呼吸

每周一个编程小例子:自适应性滤波器:动态调整以平衡响应与稳定性

每周一个编程小例子:卡尔曼滤波器在自动化中的简单应用

每周一个编程小例子:多模式定时器

每周一个编程小例子:基于 PLC 的编码器速度计算器

每周一个编程小例子:电机顺序启动与停止程序

每周一个编程小例子:电梯控制程序

图片

2026年6月


 

Tags