Skip to main content


 

引言

在汽车焊装、3C 装配、冲压加工、物流仓储等工业场景中,设备的安全联锁是避免人员伤亡、设备损坏的核心底线。一旦安全逻辑出现漏洞,轻则造成产线长时间停机,重则引发严重的安全事故。随着功能安全标准(如 ISO 13849、IEC 62061)的普及,工业设备的安全控制逻辑需要满足「故障导向安全」原则:即任何元件故障、信号异常时,设备优先进入安全状态,而非继续运行。

今天分享的FB_SafetyMonitor是一款轻量化的冗余安全监控功能块,逻辑简洁清晰,覆盖了急停冗余校验、安全门/光幕联锁、安全状态机管理、复位确认等核心安全功能,可直接嵌入中小型设备的安全控制程序中,满足 PLd/SIL2 及以下等级的安全需求。

1

   

程序代码及逻辑介绍

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

1.1

   

完整代码

 

FUNCTION_BLOCK FB_SafetyMonitor
VAR_INPUT
    estop1 : BOOL;      // 急停按钮1(常闭触点,未按下为1,按下为0)
    estop2 : BOOL;      // 急停按钮2(冗余,常闭触点)
    lightCurtain : BOOL; // 光幕(常闭触点,未被遮挡为1,被遮挡为0)
    safetyDoor : BOOL;   // 安全门(常闭触点,关闭为1,打开为0)
    resetButton : BOOL;  // 复位按钮(上升沿触发)
    acknowledge : BOOL;  // 确认按钮(预留接口,可用于扩展权限校验)
END_VAR
VAR_OUTPUT
    safeState : BOOL;    // 整体安全状态:1=所有安全条件满足,可正常运行
    safeTorqueOff : BOOL;// 安全扭矩关闭信号:输出给伺服驱动器,切断电机扭矩
    safeStop1 : BOOL;    // 安全停止1(IEC 61800-5-2标准,Category 1停止,断电制动)
    safeStop2 : BOOL;    // 安全停止2(Category 2停止,断电后保持位置)
    alarm : BOOL;        // 安全报警标志:1=当前存在安全故障
    estopActive : BOOL;  // 急停触发标志:1=当前有急停被按下
    resetAcknowledged : BOOL; // 复位完成标志:1=已完成安全复位,可重启设备
END_VAR
VAR
    estopRedundant : BOOL; // 冗余急停校验结果:1=双急停均正常,0=至少一个急停触发
    safetyRequest : BOOL;  // 安全请求标志:1=存在安全风险,需进入安全状态
    lastReset : BOOL;      // 上一次复位按钮状态,用于上升沿检测
    timer : TIME;          // 复位延时定时器
END_VAR
// 1. 冗余急停检查:双通道急停需同时正常才判定为无急停故障
// 注:急停采用常闭触点,未按下时为高电平,因此用AND逻辑判断两个均未触发
estopRedundant := estop1 AND estop2;
// 2. 安全请求生成:采用「与逻辑取反+或逻辑」实现多条件联锁
// 安全条件要求:急停正常、光幕无遮挡、安全门关闭,三者同时满足才安全
// 根据德摩根定律,只要有一个条件不满足,就触发安全请求
safetyRequest := NOT estopRedundant OR NOT lightCurtain OR NOT safetyDoor;
// 3. 安全状态机逻辑
IF safetyRequest THEN
    // 场景1:存在安全风险,立即进入安全状态
    safeTorqueOff := TRUE;  // 切断伺服扭矩,电机立即失力
    safeStop1 := TRUE;      // 触发 Category 1 停止,设备立即制动
    safeStop2 := TRUE;      // 触发 Category 2 停止,用于需要保持位置的场景
    alarm := TRUE;          // 上报报警
    estopActive := NOT estopRedundant; // 标记急停触发状态
    resetAcknowledged := FALSE; // 复位完成标志清零,需重新复位才能恢复
ELSIF alarm THEN
    // 场景2:已触发报警,等待复位操作
    // 检测复位按钮上升沿,避免长按复位按钮重复触发定时器
    IF resetButton AND NOT lastReset THEN
        timer := T#2s;  // 启动2秒复位延时,避免光幕/安全门瞬间抖动导致误恢复
    END_IF;
    IF timer > T#0s THEN
        // 复位延时期间保持安全状态,不恢复运行
        timer := timer - T#10ms; // 假设PLC循环周期为10ms,递减定时器
        safeTorqueOff := TRUE;
        safeStop1 := TRUE;
        safeStop2 := TRUE;
        // 延时结束,校验所有安全条件是否已恢复
        IF timer <= T#0s THEN
            IF estopRedundant AND lightCurtain AND safetyDoor THEN
                // 所有安全条件满足,清除报警,恢复运行
                alarm := FALSE;
                safeTorqueOff := FALSE;
                safeStop1 := FALSE;
                safeStop2 := FALSE;
                resetAcknowledged := TRUE;
            END_IF;
        END_IF
    END_IF;
ELSE
    // 场景3:所有安全条件满足,正常运行
    safeTorqueOff := FALSE;
    safeStop1 := FALSE;
    safeStop2 := FALSE;
    alarm := FALSE;
    estopActive := FALSE;
END_IF;
// 4. 边沿检测存储:保存本次循环的复位按钮状态,供下次循环做上升沿判断
lastReset := resetButton;

 

1.2

   

核心逻辑说明

  1. 冗余急停设计:采用双通道急停并联校验,只有两个急停同时正常(均未按下)才判定为无急停风险,避免单急停线路断线、触点粘连等故障导致安全失效。

  2. 多条件联锁:光幕、安全门、急停三个安全装置采用「与逻辑」校验,只要有一个触发,设备立即进入安全状态,完全符合故障导向安全原则。

  3. 安全状态机:逻辑分为「安全请求触发→报警等待复位→条件校验恢复→正常运行」四个阶段,状态切换清晰,避免逻辑混乱导致的安全漏洞。

  4. 防误操作设计:复位按钮采用上升沿触发,配合 2 秒延时,避免人员短暂遮挡光幕、瞬间开门导致的误复位,同时防止长按复位按钮重复触发逻辑。

  5. 标准接口兼容:输出的safeTorqueOffsafeStop1safeStop2完全符合 IEC 61800-5-2 伺服安全标准,可直接对接主流品牌的伺服驱动器,无需额外转换逻辑。

2

   

典型应用场景

该功能块通用性极强,可覆盖绝大多数工业设备的安全联锁需求,典型场景包括:

  1. 冲压/注塑设备:冲压机工作区域安装安全门和光幕,只要安全门打开、光幕被遮挡,设备立即停止冲压动作,切断伺服扭矩,避免人手伸入模具区域造成伤残;双冗余急停避免单急停故障导致设备无法停机。

  2. 工业机器人工作站:协作机器人、码垛机器人周边安装光幕和安全门,人员进入工作区域时,机器人立即进入安全停止状态,等待人员离开、复位确认后才能重新启动,符合 ISO 10218 机器人安全标准。

  3. 物流仓储设备:堆垛机、分拣机的检修平台安装安全门,人员进入检修区域时自动停机,避免设备意外运行砸伤人员;双急停设计可在设备两侧紧急停机,提升应急响应效率。

  4. 非标自动化装配线:工位的安全门、光幕与设备控制逻辑联锁,装配过程中人员误入工位时自动停机,避免装配工具、运动部件造成人身伤害。

3

   

拓展思考

本功能块作为轻量化的安全监控方案,逻辑清晰易修改,但针对更高安全等级、更复杂的工业场景,还可以从以下几个方向拓展优化:

  1. 功能安全合规性优化原代码的冗余急停逻辑存在单点故障隐患:如果某路急停的常闭触点断线(输入信号始终为 1),即使另一路急停按下,也无法触发安全请求,不符合功能安全要求的「单点故障不导致安全失效」。优化方案包括:① 使用带断线检测的安全 IO 模块,定期检测急停线路通断;② 增加急停线路诊断逻辑,若某路急停信号长时间保持高电平(无论另一路状态),立即上报线路故障;③ 高安全等级场景下采用双 CPU 冗余运行本逻辑,通过投票机制避免单 CPU 故障导致的安全失效。

  2. 可配置性优化当前代码中的 2 秒复位时间、安全停止类型等参数为固定值,可改为输入变量,支持不同场景自定义参数;同时可增加故障码输出(WORD 类型),每一位对应一个安全装置的状态(如急停 1 故障、光幕故障、安全门故障等),方便上位机快速排查故障原因,缩短停机时间。

  3. 分布式场景适配若安全装置(急停、光幕、安全门)通过远程分布式 IO 接入,需增加通信超时判断逻辑:若 IO 站通信超时,立即触发安全请求,避免通信故障导致安全联锁失效;同时可增加安全逻辑同步机制,确保多 CPU 下的安全状态一致。

  4. 响应时间优化当前代码的定时器依赖 PLC 循环周期递减,若 PLC 循环周期不稳定,可能导致复位时间偏差。可替换为系统级 TON 定时器,或使用安全 PLC 的专用定时模块,确保安全响应时间符合标准要求(如安全停止响应时间需小于 100ms)。


 

总结

FB_SafetyMonitor是一款「小而全」的安全监控功能块,用不到 100 行的逻辑就实现了冗余急停、多条件联锁、状态机管理、复位确认等核心安全功能,非常适合中小型非标设备、低安全等级场景快速实现安全联锁需求。

但需要特别注意的是:安全逻辑没有「通用解」,所有安全设计都需要结合实际场景的风险评估结果来优化。如果是高安全等级的场景(如 PLe/SIL3),需要基于功能安全标准做完整的故障诊断、冗余设计、认证测试,不可直接套用通用逻辑。安全是工业现场的底线,每一行控制逻辑都要考虑「最坏情况下的故障状态」,确保故障时设备一定处于安全状态,才能真正守护人员与设备的安全。

图片

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

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

图片

往期回顾


 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

每周一个编程小例子:自动门控制系统

每周一个编程小例子:智能停车场计数系统

每周一个编程小例子:智能照明控制系统

每周一个编程小例子:变频器控制

每周一个编程小例子:比例阀控制

每周一个编程小例子:脉冲输出的灵活控制

每周一个编程小例子:计算移动平均值

每周一个编程小例子:速率限制器

每周一个编程小例子:线性插值法线性化感器

每周一个编程小例子:循环队列FIFO

每周一个编程小例子:温度均匀性控制

每周一个编程小例子:设备安全计时功能

每周一个编程小例子:流量分配控制

每周一个编程小例子:数据转换的魔力

图片

2026年9月

 

 

 

Tags