电气自动化培训之PLC模拟量滤波算法实战
PLC模拟量滤波算法实战:编写一个一阶滞后滤波程序稳定采样值
一阶滞后滤波原理
它的核心思想是“新旧结合,平滑过渡”。它不是完全信任最新的采样值,而是将本次采样值与上一次的滤波输出值进行加权平均,从而得到一个更平滑、更稳定的结果。
公式如下:
本次滤波输出值 = (1 - α) * 上次滤波输出值 + α * 本次采样值
其中,α(平滑系数) 是一个介于0和1之间的数,它决定了滤波的“力度”:
-
α 趋近于 1:滤波效果弱,响应快。输出值几乎等于采样值。
-
α 趋近于 0:滤波效果强,响应慢。输出值非常平滑,但滞后严重。
在S7-1200/1500中实现
我们将在TIA Portal中创建一个FC来实现此功能。
-
创建FC:新建一个FC,命名为“Filter_FirstOrderLag”。
-
定义接口变量:
-
Input:
-
SampleValue: REAL // 本次采样的原始值
-
FilterCoeff: REAL // 平滑系数 α (推荐范围 0.01 ~ 0.3)
-
-
InOut:
-
LastValue: REAL // 静态变量,用于存储上一次的滤波结果
-
-
Output:
-
FilteredValue: REAL // 本次滤波后的输出值
-
-
-
编写ST代码:
在FC的代码区中,输入以下ST语言:// 一阶滞后滤波算法 FilteredValue := (1.0 - FilterCoeff) * LastValue + FilterCoeff * SampleValue; // 更新上一次的滤波结果,为下一次计算做准备 LastValue := FilteredValue;
使用与调试
-
在OB1(主循环组织块)中调用这个FC。
-
将需要滤波的模拟量输入通道(如PIW752转换后的工程值)连接到SampleValue。
-
为FilterCoeff赋值。如何选择α?
-
信号跳动剧烈:选择一个较小的α,如0.05或0.02,获得强滤波效果。
-
需要快速响应:选择一个较大的α,如0.2或0.3,让输出能跟上真实信号的变化。
-
通常从0.1开始调试,观察曲线,根据实际情况微调。
-
实例演示:
假设LastValue初始为0,FilterCoeff设为0.2。采样值突然从0跳变到100。
-
第一次计算:输出 = (1-0.2)*0 + 0.2*100 = 20
-
第二次计算:输出 = (1-0.2)*20 + 0.2*100 = 16 + 20 = 36
-
第三次计算:输出 = (1-0.2)*36 + 0.2*100 = 28.8 + 20 = 48.8
... 可以看到,输出是平稳地逼近100,而不是突然跳变。
优势与注意事项:
-
优势:能有效平滑周期性干扰,算法简单,计算量小。
-
注意:会带来相位滞后,滤波效果越强,滞后越严重。对于要求快速响应的控制系统(如快节奏的流量控制),需要谨慎选择α值,或在必要时采用更高级的滤波算法。
通过这个简单的FC,您就拥有了一个强大的软件滤波器,可以轻松应对大多数模拟量干扰问题,让您的控制系统运行更加稳定可靠。




