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

引言

在工业自动化过程中,监控和报警系统是确保设备和过程安全的重要手段。模拟量信号经常用于表示温度、压力、流量等关键工艺参数,及时发现异常并触发报警,可以有效避免设备损坏或生产事故。本文将介绍一个 PLC 功能块——FB_AnalogAlarm,它用于对模拟量信号进行多级报警监测,能够灵活处理不同级别的报警需求(如高高报警、低低报警等),并且支持死区设置以避免频繁的报警触发。

1  程序代码及介绍

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

  • FUNCTION_BLOCK FB_AnalogAlarm
  • VAR_INPUT   
  •         ProcessValue : REAL;           // 过程值   
  •         HighHighLimit : REAL;          // 高高限   
  •         HighLimit : REAL;              // 高限   
  •         LowLimit : REAL;               // 低限   
  •         LowLowLimit : REAL;            // 低低限   
  •         Deadband : REAL := 1.0;        // 死区
  • END_VAR
  • VAR_OUTPUT   
  •         HighHighAlarm : BOOL;          // 高高报警   
  •         HighAlarm : BOOL;              // 高报警   
  •         LowAlarm : BOOL;               // 低报警   
  •         LowLowAlarm : BOOL;            // 低低报警   
  •         AlarmActive : BOOL;            // 任何报警激活
  • END_VAR
  • VAR   
  •         HighHighFlag : BOOL;   
  •         HighFlag : BOOL;   
  •         LowFlag : BOOL;   
  •         LowLowFlag : BOOL;
  • END_VAR
  • // 功能说明:对模拟量信号进行报警监测,支持高报、高高报、低报、低低报。
  • // 高高报警(带死区)
  • IF ProcessValue > HighHighLimit THEN   
  •         HighHighFlag := TRUE;
  • ELSIF ProcessValue < (HighHighLimit - Deadband) THEN   
  •         HighHighFlag := FALSE;
  • END_IF
  • // 高报警(带死区)
  • IF ProcessValue > HighLimit THEN   
  •         HighFlag := TRUE;
  • ELSIF ProcessValue < (HighLimit - Deadband) THEN   
  •         HighFlag := FALSE;
  • END_IF
  • // 低报警(带死区)
  • IF ProcessValue < LowLimit THEN   
  •         LowFlag := TRUE;
  • ELSIF ProcessValue > (LowLimit + Deadband) THEN   
  •         LowFlag := FALSE;
  • END_IF
  • // 低低报警(带死区)
  • IF ProcessValue < LowLowLimit THEN   
  •         LowLowFlag := TRUE;
  • ELSIF ProcessValue > (LowLowLimit + Deadband) THEN   
  •         LowLowFlag := FALSE;
  • END_IF
  • HighHighAlarm := HighHighFlag;
  • HighAlarm := HighFlag AND NOT HighHighFlag; // 高高报警优先
  • LowAlarm := LowFlag AND NOT LowLowFlag;     // 低低报警优先
  • LowLowAlarm := LowLowFlag;
  • AlarmActive := HighHighAlarm OR HighAlarm OR LowAlarm OR LowLowAlarm;

2  程序介绍

输入变量

  • ProcessValue:模拟量信号的当前值,如温度、压力或其他工艺参数。

  • HighHighLimit、HighLimit、LowLimit、LowLowLimit:分别为高高限、高限、低限、低低限,定义了不同级别的报警阈值。

  • Deadband:死区,用于避免频繁的报警触发。例如,当过程值稍微超出报警阈值时,死区可以防止报警的频繁波动。

输出变量

  • HighHighAlarm、HighAlarm、LowAlarm、LowLowAlarm:表示各个报警级别的状态,TRUE表示报警激活,FALSE表示没有报警。

  • AlarmActive:任何报警激活时,值为 TRUE,否则为 FALSE。

内部变量

  • HighHighFlag、HighFlag、LowFlag、LowLowFlag:内部标志,用于表示各个报警条件是否满足。

功能实现

  • 程序根据输入的模拟量信号和设置的阈值进行判断,判断过程是否超出设定的报警范围。

  • 每个报警级别都带有死区设置,这意味着信号稍微波动不会立即触发报警,只有当信号持续超过或低于死区范围时才会触发报警。

  • 通过 IF 语句,程序检查模拟量信号是否超出对应的限值,并设置相应的报警标志。

  • 高报警和低报警在处理时优先考虑高高报警和低低报警。例如,当高高报警触发时,高报警将不被激活。

  • 最终,通过将各个报警标志组合,确定是否有任何报警被激活,并输出 AlarmActive。

3  应用场景

工业自动化控制:在化工、电力、制造等行业,常常需要监测和报警系统来保证设备运行在安全范围内。此功能块可以用于温度、压力、流量等参数的实时监控。

安全系统:对于需要对极限值进行严格控制的过程,例如气体泄漏监测、压力过载保护等,本功能块可帮助及时响应,防止事故发生。

设备故障预测:通过模拟量信号监控设备状态,当过程值接近或超出安全范围时,可以提前发出报警,提示操作人员进行检查和维护。

4  拓展思考

报警联动:可以在报警触发后,自动联动执行其他操作,如关闭阀门、启动备用设备或切换工作模式,以最大限度地避免事故发生。

报警历史记录:功能块可以扩展为记录报警事件,包括报警时间、过程值、报警级别等,方便后续分析和故障诊断。

多级报警扩展:目前的程序支持四个级别的报警,未来可以增加更多级别的报警,例如设置警告级别(如“注意”),以帮助操作员提前采取预防措施。

总结

FB_AnalogAlarm 功能块提供了一个高效、灵活的模拟量信号报警监控解决方案,能够根据不同的需求生成多级报警,避免因频繁波动而产生误报,并且带有死区设置以保证系统稳定性。它适用于各类工业过程控制系统,能够及时监测和响应异常情况,从而提高系统的安全性和可靠性。随着技术的不断发展,未来可以进一步扩展功能,加入更多报警功能和智能化控制,提高系统的整体性能。

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

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

图片

往期回顾

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

2026年2月

 

Tags: