1. 项目概述:工业信号采集与滤波的核心需求
在工业自动化控制系统中,模拟量信号的稳定采集是保证控制精度的基础环节。这个针对西门子S7-200 SMART PLC开发的模拟量滤波程序,专门处理三类典型工业信号:标准电流(4-20mA)、电压信号(0-10V)以及PT100热电阻温度信号。实际工业现场中,这些信号常受到电磁干扰、线路损耗、传感器噪声等因素影响,原始采集值往往存在波动和毛刺。本程序通过多级数字滤波算法,在保证信号响应速度的前提下,有效抑制随机干扰,为后续的PID控制、设备联锁等关键功能提供可靠的数据基础。
2. 硬件配置与信号接入方案
2.1 西门子S7-200 SMART模块选型
根据信号类型的不同,需要选用对应的模拟量输入模块:
- EM AM06:4路模拟量输入模块,支持电流/电压信号
- EM AR02:2路RTD热电阻输入模块,专用于PT100等温度传感器
关键提示:电流信号建议采用2线制接线,并在PLC端并联250Ω精密电阻转换为1-5V电压信号,可同时兼容电压输入通道。
2.2 信号接线规范与抗干扰措施
- 电流信号:使用屏蔽双绞线,屏蔽层单端接地
- 热电阻信号:采用三线制接法补偿线路电阻
- 电压信号:在输入端并联0.1μF电容滤波
典型接线示例:
plaintext复制 +-----------+
PT100 ----| 1 2 3 |
| EM AR02 |
+-----------+
+-----------+
4-20mA ----| + - |
| EM AM06 |
+-----------+
3. 滤波算法实现与参数整定
3.1 移动平均滤波的PLC实现
在S7-200 SMART中采用循环队列方式实现:
STL复制// 在数据块中定义存储区
VB100 // 队列头指针
VB101 // 队列尾指针
VW102 // 采样值累加和
VW104 // 当前平均值
VW106 // 队列长度(设为10)
VW108 // 采样值队列(10个字)
// 滤波程序
LD SM0.0
MOVW &VB108, AC1 // 队列首地址
+I VB100*2, AC1 // 计算当前头指针位置
MOVW AIW0, *AC1 // 存入新采样值
+I *AC1, VW102 // 累加到总和
-I VW108[VB101*2], VW102 // 减去最旧值
MOVW VW102, VW104 // 存储当前和
/I VW106, VW104 // 计算平均值
INC VB100 // 移动头指针
MOVB VB100, VB101 // 更新尾指针
GE VB100, VW106 // 检查越界
JMP NOT_OVER
MOVB 0, VB100 // 循环归零
NOT_OVER: NOP
3.2 递推平均滤波优化方案
针对突变信号的改进算法:
STL复制// 数据块定义
VD200 // 上次有效值
VD204 // 滤波系数α(0.1-0.3)
VD208 // 当前滤波值
// 计算过程
LD SM0.0
MOVR AIW0, VD208 // 获取原始值
MULR VD204, VD208 // α*当前值
MOVR VD200, AC0 // 上次值
MULR 1.0-VD204, AC0 // (1-α)*上次值
ADDR AC0, VD208 // 合成新值
MOVR VD208, VD200 // 更新上次值
4. 信号类型处理专项设计
4.1 电流/电压信号标准化处理
STL复制// 4-20mA转0.0-100.0%量程
LD SM0.0
ITD AIW0, AC0 // 读取原始值
DTR AC0, AC0 // 转浮点
MOVR 6400.0, AC1 // 20mA对应值
DIVR AC1, AC0 // 标准化
SUBR 0.2, AC0 // 减去4mA偏移(20%)
MULR 125.0, AC0 // 放大到100%量程
4.2 PT100热电阻线性化处理
采用分段线性逼近法:
STL复制// 数据块定义
VD300 // 原始电阻值(Ω)
VD304 // 温度值(℃)
// 计算程序
LD SM0.0
MOVR AIW0, VD300 // 获取电阻值
LDR VD300, AC0
LDR 100.0, AC1
LER AC0, AC1 // R≤100Ω
JMP TEMP_LOW
LDR 138.5, AC1
LER AC0, AC1 // 100<R≤138.5
JMP TEMP_MID
// 高温段计算(138.5-200Ω)
...
TEMP_LOW:
// 低温段计算(-50~0℃)
...
TEMP_MID:
// 中温段计算(0~100℃)
...
5. 工程应用中的典型问题排查
5.1 信号跳变异常处理流程
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 周期性跳变 | 变频器干扰 | 1. 检查动力电缆与信号线间距 2. 确认滤波器参数是否启用 |
| 随机毛刺 | 接地不良 | 1. 测量屏蔽层对地电阻 2. 检查接地是否为单点接地 |
| 固定偏差 | 量程设置错误 | 1. 核对模块DIP开关设置 2. 检查程序转换系数 |
5.2 滤波参数现场调试方法
- 阶跃响应测试:手动改变信号源输出,观察响应时间
- 目标:达到95%稳态值时间控制在1-3个采样周期
- 噪声抑制测试:保持信号恒定,观察波动范围
- 合格标准:波动值小于量程的0.5%
- 参数调整原则:
- 响应慢 → 减小队列长度/增大α值
- 滤波效果差 → 增加队列长度/减小α值
6. 程序架构优化建议
6.1 模块化程序设计技巧
STL复制// 主程序OB1
LD SM0.0
CALL SBR0 // 模拟量采集
CALL SBR1 // 电流信号处理
CALL SBR2 // 温度信号处理
CALL SBR3 // 报警处理
// 子程序SBR0(采集)
LD SM0.0
MOVW AIW0, VW100 // 通道1原始值
MOVW AIW2, VW102 // 通道2原始值
...
6.2 信号质量监测功能扩展
STL复制// 在数据块中添加
VB500 // 信号质量码
// 位定义:
// 0位:超量程标志
// 1位:变化率超限
// 2位:通信异常
// 质量检测程序
LD SM0.0
MOVB 0, VB500 // 清零质量码
LDR VD208, AC0 // 当前值
LDR 105.0, AC1
GER AC0, AC1 // 超上限检查
S VB500.0, 1
...
在实际项目中,这套滤波程序经过多个现场验证,在水泥厂温度控制系统中的应用表明:将PT100测量波动从±3℃降低到±0.5℃,同时保持响应时间在2秒以内。关键是要根据具体工艺要求调整滤波参数——对于快速响应的流量信号,建议使用α=0.3的递推滤波;而对缓慢变化的温度信号,采用10点移动平均配合α=0.1的复合滤波效果更佳。
