
简介这份资料围绕S7-200SMART PLC模拟量滤波仿S7滤波展开专门面向使用西门子小型PLC进行模拟量信号处理、需要抑制信号波动或提升测量精度的工程师与调试人员。文档以docx格式提供压缩包内共1个文件整体大小约47KB便携易查适合在设备调试现场或工程前期快速对照。内容系统梳理了模拟量滤波的生效机制、采样数与死区值的设置思路并结合变化缓慢、快速变化、高速信号等场景说明参数调整方向同时提示热电阻、热电偶、AS-Interface模块以及模拟量传递数字量等不宜滤波的特例有助于避免因错误滤波造成数据失真或响应延迟。资料目前已有1513人浏览学习对于正在规划模拟量通道滤波策略或排查信号抖动问题的读者是一份高参考价值的实操型笔记。1. 模拟量滤波不是勾一个选项就收工S7-200 SMART 的坑都在细节里很多工程师第一次接触 S7-200 SMART 的模拟量滤波是在系统块里看到一个启用模拟量滤波的勾选框顺手勾上再选一个采样数下载后却等来一串怪现象阀门动作变慢、PID 越调越振、变送器断线五分钟了画面温度还在正常值附近慢慢往下掉。这些问题的根源只有一个滤波在 PLC 里制造的是一个带惯性的假信号你用它之前根本没算过它到底滞后了多少。仿 S7 滤波参考 S7-300/400 的死区加一阶惯性思路在 SMART 上自己写一遍只多十几条指令却能把这笔账算明白。这篇先把内置滤波的工作方式讲清再给一个可直接抄的子程序最后把参数设置和现场验证的注意点列出来。2. S7-200 SMART 内置模拟量滤波的工作方式与参数边界2.1 系统块里启用模拟量滤波到底做了什么在 Micro/WIN SMART 的系统块中双击 CPU 图标在模拟量卡片里能看到启用模拟量滤波选项下方还有滤波采样数。CPU 对选中的 AIW 通道做一个固定窗口的算术平均每来一个新的转换结果就把它放进窗口去掉最早的那一个然后求平均。采样数越大窗口越长对高频干扰压制越强但输出跟随真实信号的延迟也越大。举个例子一根 4~20mA 温度线突然从 50℃ 跳到 90℃滤波采样数取 64且每个扫描周期只读到一个新转换值滤波输出大约要经过 32 个扫描周期才能走到中间值。扫描周期 10ms 时这个滞后就有 300ms 上下越接近目标值爬得越慢体感就是温度半天升不上去。这种平均滤波在线性相位上是温和的但它只适合信号干净、过程响应要求不高的回路。参数设置一般分三种简单显示回路在系统块里直接开需要快速响应的回路关闭系统块滤波转到程序里单独处理混合使用则要把哪些通道参与滤波记清楚避免同一个 AIW 被系统滤一遍又被程序滤一遍。2.2 采样数与量程范围0~27648 还是 0~32000S7-200 SMART 的模拟量输入值是 16 位整数但满量程不是老 S7-200 的 32000而是 0~27648。这个数继承自 S7-300/400很多从老 200 程序迁移过来的人在量程转换这一步就错了把 32000 当成除数换算后的工程量整体偏大 15%滤波死区也跟着错位。项目S7-200老S7-200 SMART输入满量程单极性0~320000~2764810V 对应值32000276484~20mA 对应区间约 6400~32000约 5530~27648这个表在写程序时要刻在脑子里。滤波在原始整数上做还是在工程量上做结论也不同先转成浮点工程量再滤波量化误差集中在一个 LSB肉眼看不到先对整数滤波再除法在量程很窄比如 0~5000时窗口内数值抖动会被除法放大。我一般会把 AIW0 先转成 REAL 工程量再进入滤波子程序。2.3 内置滤波与断线检测天生冲突内置滤波对变送器断线很不友好。假设现场是一根 4~20mA 温度线断线瞬间 AIW 掉到接近 0但滤波窗口里还存着之前的正常值CPU 输出的滤波后温度会以每扫描周期一小步的方式往下走。如果程序里用滤波值做低于 5℃ 的断线报警少则几秒、多则十几秒才会触发冷库、变压器温度这类场景这个延迟足以让保护联锁失去意义。所以常见的做法是断线判断一律用原始 AIW不用滤波值滤波值只用于显示、趋势和 PID 控制输入。同一个 AI 通道在数据块里至少保留两个变量一个 RAW原始工程量和一个 FILT滤波工程量报警逻辑挂在 RAW 上。这样虽然多占几个 VD排障时却能一眼看出问题出在哪一层。提示系统块内置滤波是所有模拟量通道统一启停的。如果只有某一个通道需要平均其余通道要求实时响应就不要开系统滤波改为按通道自写滤波更灵活。3. 用一阶惯性加死区写一个仿 S7 滤波子程序3.1 为什么不直接套 S7-300/400 的 FC105S7-300/400 里处理模拟量习惯用 FC105 做量程转换再加一阶滞后或死区环节做滤波。移植到 SMART 时找不到同名功能于是开始在梯形图里复制粘贴一大堆比较和跳转指令。SMART 没有 FC105也没有现成的 PT1 功能块但滤波思想完全可以用基本指令复刻对当前原始值和上次输出求差差值落在死区内就不更新输出差值超出死区就对超出部分乘以一个系数累加回去。效果与 S7-300 的死区加惯性滤波一致参数含义清晰现场好调。选一阶惯性而不是滑动平均原因有二。其一滑动平均需要保存 N 个历史值在子程序里维护一个数组会让代码量明显膨胀一阶惯性只保存一个 Y_PREV原理是 y(n)y(n-1)α·(x(n)-y(n-1))属于无限脉冲响应记忆短、实现简单。其二一阶惯性的滞后可以用时间常数 Tf 精确描述调参时能直接按公式算滑动平均的等效滞后与窗口长度、扫描周期耦合在一起换成采样数反而容易算错。3.2 SCL 子程序可直接抄的最小实现Micro/WIN SMART 从 V2.2 开始支持用 SCL 编写子程序没有 SCL 条件的项目也可以用梯形图做同样逻辑只是代码量会多两倍。下面是核心滤波块的完整写法SUBROUTINE_BLOCK AI_S7_FILTER:SBR0 VAR_INPUT RAW_VALUE : REAL; // 原始工程量单位与变送器一致例如℃ ALPHA : REAL; // 滤波系数0.05~0.30 DEADBAND : REAL; // 死区宽度建议取量程的0.1%~0.5% END_VAR VAR_IN_OUT Y_PREV : REAL; // 上次滤波输出调用方用VD保持 FIRST_RUN : BOOL; // 首次运行标志调用方用M位保持 END_VAR VAR_OUTPUT FILTERED : REAL; // 本次滤波输出 END_VAR VAR_TEMP DIFF : REAL; // 原始值与上次输出的差值 END_VAR BEGIN IF NOT FIRST_RUN THEN Y_PREV : RAW_VALUE; FILTERED : RAW_VALUE; FIRST_RUN : TRUE; ELSE DIFF : RAW_VALUE - Y_PREV; IF DIFF DEADBAND THEN Y_PREV : Y_PREV ALPHA * (DIFF - DEADBAND); ELSIF DIFF 0.0 - DEADBAND THEN Y_PREV : Y_PREV ALPHA * (DIFF DEADBAND); END_IF; FILTERED : Y_PREV; END_IF; END_SUBROUTINE_BLOCK代码先处理首次调用FIRST_RUN 为 FALSE 时直接把原始值赋给输出避免滤波输出从 0 开始慢慢爬到真实值这个细节在冷启动时直接影响画面显示和联锁判断。从第二次调用开始计算 DIFF 并判断死区只有正超或负超死区才对超出部分做一阶惯性累加死区内的微小变化被完全忽略输出保持在上次值。这样变送器的线性误差和毫伏级噪声不会造成画面数字一直跳但真实的阶跃变化依然跟得上。参数按 0~100℃ 量程、调用周期 100ms 举例ALPHA 取 0.1 时等效时间常数约 900ms取 0.2 时约 400ms取 0.3 时约 233ms。DEADBAND 一般取 0.1~0.5℃。如果已知 ALPHA 和调用周期用 Tf ≈ Ts × (1/ALPHA − 1) 估算时间常数。3.3 不习惯 SCL 时的梯形图等价写法如果维护人员只会梯形图不建议用跳转指令硬编这段逻辑。常见做法是把初始化与滤波计算拆成两个网络第一个网络用 SM0.1 或一个首次扫描 M 位把 RAW_VALUE 传送到 Y_PREV第二个网络做差值比较和累加。累加时 REAL 数据的中间结果要放在临时浮点变量里不要反复读写同一个 VD否则在中断和主程序同时调用时会出现读写竞争。梯形图里最容易忽略的是调用条件。滤波块只应在主程序 OB1 内每个扫描周期调用一次。有人在子程序里加AIW 变化才调用之类的条件结果 DIFF 只在变化瞬间被计算输出变成台阶状看着像滤波实际是欠采样。这条规则对 SCL 版本同样适用把 AI_S7_FILTER 无条件放在主程序固定位置每个扫描周期只调用一次。3.4 主程序调用的参数映射示例// 主程序 OB1 片段 CALL AI_S7_FILTER: RAW_VALUE : TEMP_RAW, // VD200 为AIW0转换后的工程量 ALPHA : 0.150, // 滤波系数先按等效时间常数粗调 DEADBAND : 0.200, // 死区0.2℃ Y_PREV : VD204, // 背景存储子程序会改写 FIRST_RUN : M0.0, // 首次运行标志 FILTERED : VD208 // 结果给HMI用TEMP_RAW 是主程序把 AIW0 转为浮点后的暂存变量VD204 不参与其他逻辑避免被覆盖。滤波系数先按画面不跳、阶跃响应别太过分的原则粗调后面用阶跃信号核算时间常数再往细调。4. S7-200 SMART 模拟量滤波现场应用时最容易翻车的 4 个参数配合问题4.1 系统块滤波和自写滤波叠用新建项目时很多人习惯把系统块里的启用模拟量滤波勾上程序里又把自写滤波接上两个滤波串联滞后直接翻倍。一次柜内变频器干扰测试时我见过一个温度回路系统滤波采样数取 64程序里 ALPHA 又取 0.05实际时间常数超过 8 秒PID 参数怎么整定都救不回来。解决办法很简单要么关系统滤波全部通道按需走子程序要么用系统滤波程序里只做量程转换。两者取其一不要觉得多点滤波更干净。判断有没有叠用不用拆程序把状态图表里原始工程量 VD200 和滤波输出 VD208 同时调出来如果两条曲线形状一致、原始值已经很平滑说明没必要再滤如果原始值明显毛糙而滤波值平滑得接近直线再去系统块里看是不是还开着一层。4.2 4~20mA 变送器的0不是 0S7-200 SMART 里 4~20mA 对应 5530~27648不是 0~27648。很多人在写量程转换时直接从 0 到 27648 映射 0 到 100结果 4mA 时显示 20℃假设量程 0~100滤波死区也跟着错位。这个偏差放进滤波逻辑会被放大量程转换错误让 DIFF 始终带一个固定偏差滤波输出要么长时间静止在错误值要么在接近零位时来回抖动。正确的转换分两步先把 AIW 的 0~27648 换算成对应的电流物理量再按变送器量程线性映射或者直接用公式 工程量 (AIW − 5530) / (27648 − 5530) × (量程上限 − 量程下限)。这个 5530 是迁移老程序时最容易漏掉的常数。4.3 滤波值拿去断线报警是最常见的安全隐患第 2 章提过断线判断要用原始值这里补一个具体场景某压缩机轴温用 4~20mA 铂电阻变送器断线后 AIW 变 0滤波输出需要约 3 秒才降到报警阈值以下而联锁程序只用了这一个值。现场实际故障时操作员看到画面温度缓慢下降误以为是真实降温直到 3 秒后联锁跳车才意识到断线。教训就是任何涉及安全联锁的判断输入源必须是 RAW_VALUE报警阈值要避开量程上下限附近滤波值只能用于 PID、显示和趋势记录。想既滤掉干扰又快速检出断线常见做法是双通道交叉判断把 RAW_VALUE 低于量程下限 3℃ 且持续 200ms 作为断线条件这个 200ms 延时用定时器实现不经过滤波子程序既能快速检出又能屏蔽一次性的偶发跳变。4.4 调用周期改变时ALPHA 必须跟着改一阶惯性滤波的系数 α 不是独立存在的它与调用周期 Ts 是一对。把 α0.1 放在 100ms 周期任务里等效时间常数约 900ms放在 1s 周期任务里等效时间常数就是 9s。很多改造项目把老程序里的滤波块从主程序移到定时中断或从定时中断移到主程序没改 α温度显示立刻变得拖泥带水。按目标时间常数反查 α 的经验表可以直接抄目标时间常数 Tf调用周期 100ms 时 α调用周期 200ms 时 α0.5s0.1670.2861s0.0910.1672s0.0480.091每次动完调用周期先用 Tf ≈ Ts × (1/α − 1) 换算一遍再下载。不想算也行至少要在子程序注释里写上ALPHA 按当前调用周期标定移动调用位置时必须重新整定。5. 用状态图表加阶跃信号给滤波参数做一次体检5.1 建立监视表和趋势曲线在 Micro/WIN SMART 的状态图表里新建三行地址分别写 AIW0、VD200、VD208前一个格式选有符号整数后两个选浮点。在线监视后把状态图表切到趋势视图就能同时看到原始整数、原始工程量、滤波输出三条曲线的动态关系。趋势视图默认刷新偏快把刷新周期调到 200ms避免曲线被高频抖动刷成一片。5.2 阶跃测试和 63.2% 时间常数验证用一个标准电流信号源或精密变送器加电位计把输入从 25% 量程直接拨到 75% 量程。滤波输出会先跳一小步再按指数曲线逼近目标值。记录从阶跃开始到滤波输出走到差值 63.2% 处的耗时这个值就是当前参数下的等效时间常数 Tf把它与公式计算值对比偏差在 ±20% 以内说明参数设置正确。如果实测时间常数明显大于理论值优先检查子程序是否被条件调用或是否在中断里被多次执行如果实测值小于理论值检查系统块里是否还开着内置滤波以及工程量进入子程序前有没有被其他逻辑改过。5.3 先定死区再调 ALPHA 的调参顺序调参顺序很多人搞反先调 ALPHA 后调死区结果现场总在输出跳动和反应迟钝之间反复。我习惯先把 DEADBAND 定到量程的 0.3% 左右观察原始值稳态时的噪声幅度噪声幅度大于死区就把死区上调到噪声幅度的 1.5 倍死区定住后再按目标 Tf 反查 ALPHA最后做一次阶跃测试确认。这样两轮以内能把参数定下来而且以后换 PLC、换变送器这套流程都能复用。把这三件事各自对应到系统块、自写算法和断线逻辑上下次现场再遇到温度半天不降先看 RAW 再查 ALPHA照着上面的步骤走一遍半小时内就能定位。本文还有配套的精品资源点击获取