1. 项目概述:PLC模拟量信号处理的工业痛点
在工业自动化现场,模拟量信号(如4-20mA电流、0-10V电压、热电偶温度等)的采集稳定性直接决定控制系统的可靠性。我曾在某食品厂蒸汽灭菌项目中,遇到过温度信号跳变导致PID控制振荡的问题——现场电机产生的电磁干扰通过热电偶导线串入PLC,原始信号波形就像被猫抓过的毛线团。这正是我们需要模拟量滤波程序的典型场景。
西门子S7-1200/1500系列PLC作为当前主流控制器,其模拟量模块虽然自带硬件滤波,但在以下场景仍需软件二次处理:
- 强电磁干扰环境(变频器、大功率电机附近)
- 传感器信号传输距离超过50米
- 需要动态调整滤波强度的工艺(如反应釜不同阶段的温度监测)
- 对信号响应速度与稳定性有矛盾要求的场合
2. 核心功能设计解析
2.1 多信号类型兼容架构
程序采用"输入类型选择→量程转换→滤波算法→输出整形"的处理流。关键是用ANY_Pointer数据类型构建通用处理块:
pascal复制// 信号类型选择逻辑示例
CASE #InputType OF
1: // 电压信号
#RawValue := NORM_X(MIN := 0.0, MAX := 27648.0, VALUE := #AnalogInput);
2: // 电流信号
#RawValue := NORM_X(MIN := 5530.0, MAX := 27648.0, VALUE := #AnalogInput);
3: // K型热电偶
#TempValue := TEMP_K(#AnalogInput);
END_CASE;
2.2 动态可调滤波算法
采用移动平均+一阶滞后滤波的复合算法,通过FilterFactor参数(0.1-1.0)实时调整滤波强度:
- 当
FilterFactor=0.1时,相当于100ms时间常数,适合缓慢变化的温度信号 - 当
FilterFactor=0.9时,相当于10ms时间常数,适合快速响应的压力信号
滤波核心算法实现:
pascal复制#FilteredValue := #FilteredValue + (#RawValue - #FilteredValue) * #FilterFactor;
2.3 高低位报警与信号诊断
除了常规的高低限值报警,程序还包含:
- 信号断线检测(电流信号<3.5mA时触发)
- 突变检测(相邻采样值差超过量程20%时记录事件)
- 信号可信度评估(基于波动率计算)
3. 工程实现细节
3.1 硬件组态注意事项
-
在TIA Portal中配置模拟量输入模块时:
- 必须取消勾选"启用硬件滤波"选项
- 对于热电偶输入,需匹配正确的测量类型(如TC-K)
- 建议将AI模块的循环时间设置为10ms(与程序扫描周期同步)
-
接地规范:
- 电压信号采用单端接地
- 电流信号需在传感器端接地
- 热电偶必须使用屏蔽双绞线,屏蔽层在PLC侧单点接地
3.2 程序块封装技巧
将整个功能封装为FB_AnaFilter背景数据块,关键参数如下:
pascal复制VAR_INPUT
AnalogInput : INT; // 原始模拟量值
InputType : INT := 1; // 1=电压 2=电流 3=热电偶
FilterFactor : REAL := 0.5; // 滤波系数
ScaleMin : REAL := 0.0; // 量程下限
ScaleMax : REAL := 100.0; // 量程上限
END_VAR
VAR_OUTPUT
EngValue : REAL; // 工程值
Alarm_H : BOOL; // 高位报警
Alarm_L : BOOL; // 低位报警
SignalOK : BOOL; // 信号状态正常
END_VAR
3.3 滤波效果调试方法
通过Trace功能实时监控信号质量:
- 在OB30循环中断中调用滤波函数(建议周期10-100ms)
- 添加趋势图观察原始值与滤波值
- 按以下原则调整
FilterFactor:- 信号波动大 → 减小系数(增强滤波)
- 响应迟缓 → 增大系数(减弱滤波)
- 典型场景参考值:
- 反应釜温度:0.2-0.3
- 管道压力:0.5-0.7
- 流量计信号:0.8-1.0
4. 工业现场应用案例
4.1 变频器干扰抑制案例
某水处理厂泵站PLC采集的4-20mA液位信号受变频器干扰,出现周期性波动(幅值约5%)。通过以下步骤解决:
- 在程序中设置
FilterFactor=0.3 - 启用突变检测功能,设置变化率阈值为15%/s
- 在信号线上增加磁环(关键!)
调整后信号波动降至0.5%以内。
4.2 热电偶冷端补偿实践
使用K型热电偶测量锅炉温度时,需注意:
- 在TIA Portal中启用模块的冷端补偿功能
- 补偿导线必须与热电偶分度号匹配
- 程序中对补偿温度进行二次修正:
pascal复制#ActualTemp := #TempValue + 0.5 * (#AmbientTemp - 25.0);
// 环境温度每偏离25℃补偿0.5℃
5. 高级功能扩展
5.1 自适应滤波算法
对于工况变化的场景,可增加动态调整逻辑:
pascal复制IF ABS(#EngValue - #LastValue) > (#ScaleMax - #ScaleMin)*0.1 THEN
#FilterFactor := 0.8; // 突变时减弱滤波
ELSE
#FilterFactor := 0.3; // 稳态时增强滤波
END_IF;
5.2 信号质量评估
基于统计学原理计算信号可信度:
pascal复制#Variance := 0.9 * #Variance + 0.1 * POWER(#EngValue - #LastValue, 2);
#SignalQuality := LIMIT(0.0, 100.0 - 100.0 * #Variance / (#ScaleMax - #ScaleMin), 100.0);
5.3 与HMI的交互优化
在WinCC画面上建议添加:
- 实时滤波系数调整滑块
- 信号波形对比视图
- 报警历史统计面板
- 信号质量指示器(类似手机信号强度条)
关键经验:在干扰严重场合,软件滤波必须与硬件措施配合使用。我曾遇到一个案例,仅靠程序滤波无法解决高频干扰,后来在信号线外加了金属软管才彻底解决问题。
