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

引言

在工业自动化系统中,数字量输入信号的监控是控制系统稳定性和可靠性的关键。PLC(可编程逻辑控制器)作为工业控制的核心工具,能够通过实时监控数字输入信号,确保设备按照预期模式运行。本篇文章将介绍一个数字量输入组监控的 PLC 程序,通过这个程序,我们可以监控一组数字量输入的状态,检查其是否符合期望模式,检测变化,并识别是否存在故障。通过对该程序的解析,您将了解如何高效、精确地实现这一监控功能。

1  程序代码及介绍

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

  • FUNCTION_BLOCK FB_DigitalInputGroupMonitor
  • VAR_INPUT   
  •         IN_Inputs : ARRAY[1..cMaxInputs] OF BOOL; // 数字量输入组   
  •         IN_ExpectedPattern : ARRAY[1..cMaxInputs] OF BOOL; // 期望状态模式   
  •         IN_MonitorEnable : BOOL;   // 监控使能
  • END_VAR
  • VAR_OUTPUT   
  •         OUT_AllOnes : BOOL;        // 所有输入为1   
  •         OUT_AllZeros : BOOL;       // 所有输入为0   
  •         OUT_AnyChange : BOOL;      // 任何输入发生变化   
  •         OUT_PatternMatch : BOOL;   // 输入与期望模式匹配   
  •         OUT_FaultDetected : BOOL;  // 检测到故障(与期望模式不匹配)
  • END_VAR
  • VAR   
  •         LastInputs : ARRAY[1..cMaxInputs] OF BOOL;   
  •         ChangeDetected : BOOL;   
  •         PatternMatch : BOOL;    
  •         i : INT;
  • END_VAR
  • VAR CONSTANT   
  •         cMaxInputs : INT := 16;
  • END_VAR
  • // 功能说明:监控一组数字量输入的状态,提供整体状态、变化检测和故障监测。
  • OUT_AllOnes := TRUE;
  • OUT_AllZeros := TRUE;
  • ChangeDetected := FALSE;
  • PatternMatch := TRUE;
  • FOR i := 1 TO cMaxInputs DO   
  •         // 检查全1和全0   
  •         IF NOT IN_Inputs[i] THEN       
  •                 OUT_AllOnes := FALSE;   
  •         END_IF   
  •         IF IN_Inputs[i] THEN       
  •                 OUT_AllZeros := FALSE;   
  •         END_IF   
  •         // 检查变化   
  •         IF IN_Inputs[i] <> LastInputs[i] THEN       
  •                 ChangeDetected := TRUE;   
  •         END_IF   
  •         // 检查模式匹配   
  •         IF IN_MonitorEnable THEN       
  •                 IF IN_Inputs[i] <> IN_ExpectedPattern[i] THEN           
  •                         PatternMatch := FALSE;       
  •                 END_IF   
  •         END_IF   
  •         LastInputs[i] := IN_Inputs[i];
  • END_FOR
  • OUT_AnyChange := ChangeDetected;
  • OUT_PatternMatch := PatternMatch;
  • OUT_FaultDetected := IN_MonitorEnable AND NOT PatternMatch;

2  程序功能介绍

该程序主要实现了对数字量输入组状态的监控,并提供了以下几个功能:

检查输入是否全为 1(OUT_AllOnes):如果输入组中的所有信号都为TRUE(即 1),则输出OUT_AllOnes为TRUE,否则为FALSE。

检查输入是否全为 0(OUT_AllZeros):如果输入组中的所有信号都为FALSE(即 0),则输出OUT_AllZeros为TRUE,否则为FALSE。

变化检测(OUT_AnyChange):如果任意一个输入信号发生变化,输出OUT_AnyChange为TRUE,否则为FALSE。

模式匹配检测(OUT_PatternMatch):将输入与期望的模式进行比较,若所有输入符合预期模式,则输出OUT_PatternMatch为TRUE,否则为FALSE。

故障检测(OUT_FaultDetected):如果监控使能(IN_MonitorEnable)为TRUE,但输入信号与期望模式不匹配,则输出OUT_FaultDetected为TRUE,表示检测到故障。

3  应用场景

这个数字量输入组监控程序在许多工业自动化系统中都能找到实际应用,尤其是在以下场景中:

自动化生产线的监控:在自动化生产过程中,数字量输入信号用于传感器、开关、按钮等设备的状态监测。使用此程序可以实时检测各个设备的状态变化,确保生产线的正常运行。

故障诊断系统:对于大型工业系统,任何小小的故障都可能导致生产中断。通过此程序的故障检测功能,可以在输入信号与期望模式不匹配时及时报警,从而快速定位问题。

智能家居系统:在智能家居中,数字输入信号常用于开关、门窗传感器等设备。此程序能够实时检测并反馈设备状态变化,确保家居环境的智能化管理。

电力监控系统:在电力系统中,数字量输入信号用于监测电气设备的开关状态,程序能够监控电力设备的状态变化,并及时发现可能的故障。

4  拓展思考

这个监控程序可以根据实际需求进行多方面的扩展和优化:

多种输入模式支持:目前程序仅支持与期望模式的匹配检测,未来可以扩展为支持更多种类的输入模式(如脉冲模式、连续模式等)。

故障分类:除了简单的故障检测,还可以引入更精细的故障分类机制,针对不同的故障类型提供不同的反馈和处理方式。

报警与通知系统:可以将程序与报警系统集成,当检测到故障时自动发送通知(如短信、邮件等),以便人员及时处理。

动态调整监控模式:根据现场情况动态调整监控模式,例如根据设备的运行状态调整期望模式,提高程序的灵活性和适应性。

总结

本篇文章介绍的数字量输入组监控 PLC 程序,通过实时监控输入信号的状态变化、模式匹配以及故障检测,为工业自动化系统提供了一个高效可靠的解决方案。通过进一步优化和扩展,程序可以适应更多复杂的应用场景,帮助企业提高生产效率、降低故障率,并实现更智能化的设备管理。

图片

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

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

图片

往期回顾

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

2026年1月

Tags: