西门子S7-1200模拟量输入滤波设置,消除信号干扰实战

有个项目,S7-1200读一个4-20mA液位传感器,数值一直在上下跳,波动幅度超过10%。现场电工换了传感器、换了屏蔽线,问题照旧。最后我进PLC看了下模拟量输入模块的滤波设置——根本没配。

模拟量输入滤波是S7-1200里一个有但很少人注意的功能。今天把它讲清楚。

为什么要做模拟量滤波?

工业现场电磁干扰多,变频器启停、大电机运行都会在信号线上感应出噪声。如果PLC直接读原始值,你看上去就是一个忽大忽小的信号。液位这种变化慢的工艺参数,跳动10%根本没法用。

滤波的作用就是把这个噪声平滑掉,让数值稳定。代价是响应会慢一点——但对于液位、温度、压力这些变化不快的信号来说,完全没有影响。

S7-1200模拟量滤波在哪里设置?

路径:设备组态 → AI模块 → 属性 → AI测量通道 → 输入滤波器

注意:这个设置不是在每个通道属性里都有。S7-1200的模拟量模块SM1231、SM1234都支持,但早期的SM1231 V1.0固件不支持,需要确认模块固件版本。

设置项只有一个——滤波时间常数,单位毫秒。

滤波时间常数怎么选?

说白了,这个值决定了对信号变化的”敏感度”:

  • 0ms(不滤波):原始值直接出来,反应最快但最跳。适合快速变化的信号,比如流量计脉冲
  • 2.5ms-10ms:轻度滤波,适合振动监测等需要快速响应的场景
  • 50ms-100ms:中档滤波,液位、压力信号通常用这个范围
  • 300ms-1000ms:重度滤波,适合温度信号,变化本来就慢

我处理4-20mA液位信号,一般从50ms起步。如果还是跳再加到100ms。

实操案例:液位信号跳动处理

刚才说的那个项目,液位传感器量程0-5m,输出4-20mA,PLC里量程转换后正常显示范围0-5000mm。

没滤波时:数值在4200-4700mm之间乱跳,无法用于控制。
加50ms滤波后:数值稳定在4450±50mm,但偶尔还有小波动。
加200ms滤波后:数值稳定在4450±10mm,完全可用。

注意:加滤波后液位从0到满量程的阶跃响应时间大约3倍时间常数。200ms滤波下,从0变到满量程大约需要0.6秒。对液位控制来说,这个速度完全能接受。

程序里自己做滤波也可以

如果不想用硬件滤波(或者模块不支持),可以在程序里写一个简单的一阶低通滤波:

// 一阶低通滤波
// IN:原始模拟量值
// OUT:滤波后的值
// K:滤波系数(0-1),越小滤波越强

#temp_RawValue : Real;
#temp_Filtered : Real;
#temp_K : Real;

// 从AI通道读取原始值(0-27648)
#temp_RawValue := INT_TO_REAL(#RawInput);

// 滤波系数:0.1表示强滤波,0.5表示弱滤波
#temp_K := 0.15;

// 一阶低通滤波公式
#temp_Filtered := #temp_K * #temp_RawValue + (1.0 - #temp_K) * #temp_Filtered_Old;

// 保存本次值给下次用
#temp_Filtered_Old := #temp_Filtered;

// 输出到量程转换
#FilteredValue := #temp_Filtered;

K=0.15的效果大致相当于50-100ms的硬件滤波。如果你需要更平滑,把K降到0.05。

滤波不是万能的

滤波只能平滑噪声,不能消除噪声。如果信号跳得太厉害,先检查:

  • 屏蔽线接地了没有(单端接地,别两头都接)
  • 信号线和动力线分开了没有(至少间隔20cm)
  • 传感器供电稳不稳(别和变频器共电源)
  • AI模块和传感器共地了没有

我见过最离谱的一个项目,信号线和变频器输出线绑在同一根线槽里走的,加再大的滤波也没用。重新走线之后,不滤波都稳。

你们遇到过模拟量信号跳动的怪事吗?欢迎分享经验。

上一篇 三菱FX5U PLC常见故障代码解析与现场排查方法