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

引言

在工业自动化领域中,传感器信号往往受到噪声和干扰的影响,导致系统性能下降。滤波算法是处理这些干扰的有效手段,其中一阶滞后滤波器(First Order Lag Filter)是一种常用的信号平滑技术。本篇文章将介绍如何在 PLC 程序中实现并优化一阶滞后滤波器,以提高系统的信号稳定性,并结合实际应用场景进行详细讲解。

程序代码

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

  • FUNCTION_BLOCK PM_TimedFirstOrderLagFilter
  • VAR_INPUT    
  •         InputValue          : REAL;                // 输入值,用于滤波   
  •         Alpha               : REAL := 0.5;         // 滤波系数,取值范围0-1   
  •         SampleInterval      : INT;                 // 采样时间间隔,单位毫秒
  • END_VAR
  • VAR_OUTPUT    
  •         FilteredValue       : REAL;                // 滤波后的输出值
  • END_VAR
  • VAR    
  •         previous_value      : REAL;                // 上一个滤波后的值   
  •         time_interval       : TIME;                // 以毫秒为单位的时间间隔   
  •         sampling_timer      : TON;                 // 控制采样间隔的定时器   
  •         trigger_flag        : BOOL;                // 用于标记是否需要处理新采样
  • END_VAR
  • // 限制滤波系数的范围在0到1之间
  • Alpha := LIMIT(0, Alpha, 1);
  • // 将采样间隔从毫秒转换为时间格式
  • time_interval := INT_TO_TIME(SampleInterval);  
  • // 控制采样的定时器
  • sampling_timer(IN := NOT trigger_flag, PT := time_interval, Q => trigger_flag);
  • IF trigger_flag THEN    
  •         // 应用一阶滞后滤波公式   
  •         FilteredValue := (1 - Alpha) * previous_value + Alpha * InputValue;   
  •         previous_value := FilteredValue;  // 更新上一个滤波值
  • END_IF;

2  代码解析

输入输出变量

  • InputValue:需要进行滤波的输入信号。

  • Alpha:滤波系数,决定了新值和历史值的加权比例。值越大,新值的影响越大。

  • SampleInterval:采样间隔,用于控制信号的采样频率。

内部变量

  • previous_value:保存上一次滤波后的结果。

  • time_interval:将采样时间间隔转换为 TIME 类型。

  • sampling_timer:定时器,用于控制采样频率。

  • trigger_flag:标记是否需要处理新的输入。

滤波逻辑

  • 使用Alpha对输入值进行加权平均,从而实现信号的平滑。

  • 滤波后的值保存在previous_value中,用于下一次计算。

3  优化要点

  • 限制 Alpha 的范围:为了防止用户输入非法值,使用 LIMIT(0, Alpha, 1) 限制 Alpha 的取值范围在 0 到 1 之间。

  • 采样间隔的控制:通过定时器控制采样间隔,确保系统在规定的时间间隔内采样,避免过于频繁的采样带来额外负担。

  • 滤波系数的动态调整:可以根据系统实际需求,动态调整 Alpha 值,从而适应不同的信号特性。

4  应用场景

一阶滞后滤波器广泛应用于需要实时平滑信号的场合,例如:

温度控制系统

当温度传感器采集到的温度数据波动较大时,可以使用滤波器进行平滑,得到更稳定的温度值。

压力监测系统

在压力传感器读取的压力数据中,常常存在瞬时波动,滤波器能够有效减少这种干扰,保持压力值的平稳。

速度控制系统

电机的转速可能会受到负载波动的影响,滤波器帮助平滑转速数据,确保控制系统的稳定运行。

5  拓展思考

除了一阶滞后滤波器外,工业控制系统中还可以使用多种滤波技术。例如,二阶滞后滤波器可以更精细地平滑信号,或者使用卡尔曼滤波器处理复杂的动态系统。针对不同的应用场景,可以选择不同的滤波算法,或者结合多种算法进行复合滤波,以实现最佳的系统性能。

总结

通过本文的介绍,我们了解了如何在 PLC 程序中实现并优化一阶滞后滤波器。该程序能够有效平滑输入信号,减少噪声和干扰,对于工业自动化系统具有重要意义。希望读者能够根据实际应用需求,灵活调整滤波参数,提升系统的稳定性与精确度。

图片

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

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

图片

往期回顾

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

2025年08月

Tags: