Skip to main content

引言

在工业自动化和数据处理领域,实时计算平均值是分析趋势、监控设备状态的重要手段。本文将介绍一个名为FB_AverageCalculatorPLC 功能块,它用于计算输入值的移动平均值。通过对该功能块的代码解析、应用场景探讨以及未来可能的拓展思考,我们将帮助您全面理解并有效使用这一工具。


 

1

   

程序代码及介绍

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


FUNCTION_BLOCK FB68_AverageCalculator
VAR_INPUT
    Value : REAL;          // 输入值
    SampleCount : INT := 10; // 采样个数
    Reset : BOOL;          // 复位
END_VAR
VAR_OUTPUT
    Average : REAL;        // 平均值
END_VAR
VAR
    Buffer : ARRAY[1..100] OF REAL;   // 数据缓冲区
    Sumo : REAL;          // 当前总和
    Index : INT := 1;     // 当前索引
    Count : INT;          // 当前有效样本数
    i : INT;              // 循环计数器
END_VAR
// 复位
IF Reset THEN
    FOR i := 1 TO 100 DO
        Buffer[i] := 0.0; // 清空缓冲区
    END_FOR
    Sumo := 0.0;          // 重置总和
    Index := 1;          // 重置索引
    Count := 0;          // 重置样本计数
    Average := 0.0;      // 重置平均值
END_IF
// 更新缓冲区
Sumo := Sumo - Buffer[Index] + Value; // 更新总和
Buffer[Index] := Value;                 // 将当前值存入缓冲区
Index := Index MOD SampleCount + 1;     // 更新索引
// 计算平均值
Count := MIN(Count + 1, SampleCount);   // 更新有效样本数
IF Count > 0 THEN
    Average := Sumo / Count;             // 计算并更新平均值
END_IF

 

2

   

功能解析

输入变量

  • Value:需要计算平均值的输入数据,类型为实数(REAL)。

  • SampleCount:指定用于计算平均值的最新样本数量,默认为 10。

  • Reset复位信号,用于清空之前的计算结果。

输出变量

  • Average:计算得到的平均值,类型为实数(REAL)。

内部变量

  • Buffer:一个数组,用于存储最近的输入值,最大支持 100 个样本。

  • Sumo:当前有效样本的总和,用于计算平均值。

  • Index:当前缓冲区的索引位置,用于插入新的输入值。

  • Count:当前有效样本数。

  • i:循环计数器,用于复位操作时的数组遍历。

代码逻辑详解

  • 复位操作:如果接收到复位信号,则清空缓冲区,将所有元素设置为 0,并重置总和、索引和平均值。这一过程确保在新一轮数据采集开始前,状态是干净的。

  • 更新缓冲区:在每次接收到新的输入值时,首先从总和中减去当前索引位置的旧值,再加上新的输入值,然后将新值存入缓冲区。索引通过模运算进行更新,以实现循环存储。

  • 计算平均值:有效样本数在每次更新时增加,但不超过设定的SampleCount。当样本数大于 0 时,计算并更新平均值。


 

3

   

应用场景

功能块可以广泛应用于以下领域:

机器运行状态监控:实时采集和计算设备传感器的数据,如温度、压力等,以便监控其运行状态并发出预警。

生产过程控制:在生产线上,通过采集产品质量参数的平均值,及时调整生产工艺,确保产品的一致性和合格率。

环境监测:在环境监测系统中,利用移动平均值减小瞬时波动的影响,提供更稳定的环境数据报告。

数据分析:用于数据采集系统中的历史数据分析,帮助决策者获取更准确的趋势信息。


 

4

   

拓展思考

随着工业 4.0 的推进,数据处理和分析的需求日益增加。FB_AverageCalculator功能块可以与更多的智能算法结合,进行复杂的统计分析和预测。未来,结合机器学习技术,可以实现自适应平均值计算,根据数据的变化动态调整样本数量,实现更加精确和智能的数据处理。


 

总结

本文详细介绍了 PLC 功能块FB_AverageCalculator的结构与功能,展示了如何通过简单的代码实现实时平均值的计算。该功能块在多个工业应用中具有显著的价值,不仅提高了数据处理的精准度,也为未来智能制造的发展提供了基础。通过不断优化和扩展,该功能块将能够满足更为复杂的工业数据处理需求,推动自动化技术的进步。

图片

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

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

图片

往期回顾


 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

2026年7月