本文回答的问题
文章摘要
在 IEC 61131-3 结构化文本(ST)中实现的一维卡尔曼滤波器,通过在每个扫描周期更新状态、增益和协方差,从噪声传感器数据中估计真实的工艺值。与标准低通滤波器相比,它能够在减少方差的同时保持更快的跟踪速度,这对于无法容忍可避免相位滞后的 PID 回路、报警或联锁系统至关重要。
噪声工艺数据并非编程上的不便,而是一个控制问题。超声波液位计、称重传感器、压力变送器和流量计在常规工厂条件下都会产生测量噪声,因为振动、电磁干扰(EMI)、湍流、夹带空气和安装环境等因素不会为了获得干净的趋势曲线而自动消失。
Ampergon Vallis 指标: 在 OLLA Lab 信号模拟器的台架测试中,应用于噪声液位信号的一阶滞后滤波器产生了约 400 毫秒的响应延迟,而以结构化文本实现的一维卡尔曼滤波器在保持相当的视觉平滑度下,跟踪同一底层波形的延迟仅为约 45 毫秒。方法论:12 次模拟测试运行,单传感器液位跟踪任务,一阶滞后基准比较器,2026 年 3 月台架测试窗口。 这支持了一个实用观点:在本次测试条件下,预测估计比简单的平滑处理能更好地保持响应性。但这并不证明其在所有传感器、扫描时间和调优选择中具有普遍优越性。
工程要点很简单:如果你的 PID 回路在追逐噪声,低通滤波器可能会平滑趋势,但会悄悄降低控制响应。阀门和阻尼器通常比会议室里的讨论更早察觉到这一点。
为什么结构化文本在卡尔曼滤波方面优于梯形图(LD)?
结构化文本是处理此类算法的正确 IEC 61131-3 语言,因为卡尔曼滤波是具有保留状态的迭代数学,而非以梯级为中心的联锁逻辑。你可以强行将这些方程塞入梯形图,但“可行”并不等同于“合理”。
结构化文本在三个方面更适合该算法
ST 直接表达代数运算。预测-更新序列的阅读顺序与底层方程完全一致。
- 执行清晰度:
卡尔曼滤波器必须将先前的估计值从一个扫描周期传递到下一个周期,包括先前的协方差和先前的状态估计。ST 通过保留变量(Retained variables)自然地处理了这一点。
- 状态保留:
在 LD 中,同一个滤波器通常会变成散布在多个网络中的 `ADD`、`SUB`、`MUL` 和 `DIV` 块链。这更难审查、更难维护,且在编辑过程中更容易出错。
- 可审计性:
LD 中的复杂浮点数学运算会增加视觉和执行开销。问题不在于 PLC 不能进行数学运算(它们可以),而在于 LD 不是隐藏小型数值方法的理想场所。
- 扫描周期规范:
实际区别在于语法与可部署性
梯形图非常适合许可条件、顺序、联锁和离散控制的可视化。它不是紧凑数值估计的最佳媒介。一维卡尔曼滤波器虽然小巧,但它仍然是一个状态估计器。请按此对待它。
为什么这对调试风险至关重要
在实时控制器上使用自定义 ST 会引入真实的故障模式。边界条件处理不当、初始化错误、除以接近零的数值或简单的逻辑错误,都可能根据平台和实现方式触发看门狗故障或不稳定行为。OLLA Lab 在此作为一种受限的验证环境非常有用:工程师可以在现场部署前进行编译、模拟、注入噪声并调优参数,此时的错误代价更小且更具教育意义。
一维卡尔曼滤波器的核心数学方程是什么?
一维卡尔曼滤波器通过在每个扫描周期重复预测阶段和更新阶段,从噪声测量中估计单个标量状态。用 PLC 的术语来说,它是一个递归估计器,决定了在多大程度上信任模型,以及在多大程度上信任传入的传感器值。
核心变量
你希望在下游使用的滤波值。
- X — 当前状态估计
从上一个扫描周期保留的估计值。
- X_prev — 先前状态估计
当前估计中不确定性的度量。
- P — 估计误差协方差
从上一个扫描周期保留的协方差。
- P_prev — 先前估计误差协方差
系统本身假设的不确定性。较高的 `Q` 值使滤波器对变化响应更快。
- Q — 过程噪声协方差
传感器测量中假设的不确定性。较高的 `R` 值使滤波器对传感器的信任度降低。
- R — 测量噪声协方差
预测与测量之间的动态加权因子。
- K — 卡尔曼增益
进入滤波器的噪声过程变量。
- Raw_Input — 测量传感器值
预测和更新方程
对于最简单的一维形式,假设状态在扫描周期之间持续存在,且没有更详细的运动模型:
预测阶段
- `P = P_prev + Q`
更新阶段
- `K = P / (P + R)`
- `X = X_prev + K * (Raw_Input - X_prev)`
- `P_prev = (1 - K) * P`
- `X_prev = X`
Q 和 R 的操作含义
调优行为主要由 `Q` 和 `R` 控制。
- 当底层过程可能快速变化且估计器需要更快适应时,增加 Q。
- 当传感器噪声较大且估计器应减少对测量的信任时,增加 R。
- 如果 Q 过低,滤波器会变得迟钝。
- 如果 R 过低,滤波器会过于急切地跟随噪声。
- 如果两者都猜测错误,结果仍然是一个滤波器,只是没那么有用。数学不能替代对工艺的理解。
如何在 IEC 61131-3 结构化文本中编写一维卡尔曼滤波器?
最小化实现需要保留变量、显式初始化以及每个扫描周期一个执行路径。以下代码特意保持简单,适合适配到功能块或循环程序段中。
示例:结构化文本中的一维卡尔曼滤波器
结构化文本示例:
VAR Raw_Input : REAL; // 噪声传感器输入 Filtered_Output : REAL; // 滤波结果
X : REAL; // 当前状态估计 X_prev : REAL := 0.0; // 先前状态估计
P : REAL; // 当前误差协方差 P_prev : REAL := 1.0; // 先前误差协方差
Q : REAL := 0.01; // 过程噪声协方差 R : REAL := 0.10; // 测量噪声协方差
K : REAL; // 卡尔曼增益
InitDone : BOOL := FALSE; END_VAR
// 一次性初始化 IF NOT InitDone THEN X_prev := Raw_Input; P_prev := 1.0; InitDone := TRUE; END_IF;
// 预测阶段 P := P_prev + Q;
// 更新阶段 K := P / (P + R); X := X_prev + K * (Raw_Input - X_prev);
// 存储以供下一次扫描使用 P_prev := (1.0 - K) * P; X_prev := X;
// 输出 Filtered_Output := X;
在真实 PLC 上需要注意的实现细节
- 尽可能从第一次实时测量进行初始化,而不是从零开始。这避免了不必要的启动瞬态。
- 仅保留算法所需的内容。 在这种简单形式中,主要是 `X_prev` 和 `P_prev`。
- 使用适合平台的浮点类型。 某些 PLC 对 `REAL` 和 `LREAL` 的处理方式差异足以影响调优稳定性。
- 避免隐藏的重新初始化。 如果 `InitDone` 意外重置,滤波器在重启时会出现“跳变”。
- 保持执行的确定性。 滤波器应每个扫描周期或每个预定任务运行一次,而不是随机运行。
何时将其封装在功能块中
在以下情况下,功能块更为可取:
- 需要针对不同传感器使用多个实例,
- 需要显式封装状态,
- 需要标准化的初始化行为,
- 需要在项目间进行更简洁的复用。
这通常是正确的生产模式。内联版本对于理解和台架验证仍然很有用。
如何在 OLLA Lab 中测试滤波器对注入噪声的响应?
测试是编写代码与验证行为之间的区别。OLLA Lab 在此具有相关性,因为它提供了一个基于浏览器的环境,用于演练高风险部分:在接触实际工艺之前,证明滤波器在噪声、变化和故障类条件下的表现。
正确定义“仿真就绪”(Simulation-Ready)
仿真就绪并不意味着“能够凭记忆编写 PLC 语法”。它意味着工程师可以在逻辑到达实际系统之前,证明、观察、诊断并强化控制逻辑以应对现实的工艺行为。这包括观察 I/O、对比梯形图或 ST 状态与模拟设备状态、注入异常条件,以及在故障案例后修订逻辑。
这比完成教程的标准更严格。它也更接近实际的调试工作。
实用的 OLLA Lab 测试工作流
- 打开变量面板。
- 将 `Raw_Input` 映射到信号模拟器中的模拟源。
- 使用缓慢的正弦波、斜坡或阶跃式模拟配置文件来表示变化的工艺值,如罐液位、压力或流量。
- 在基础信号上叠加噪声,以模拟振动、湍流或电气干扰。
- 从中等噪声开始,然后增加幅度以测试估计器的鲁棒性。
- 将 `Raw_Input` 和 `Filtered_Output` 一起绘制趋势图。
- 观察滤波信号是否在不明显滞后于底层波形的情况下抑制了噪声。
- 如果滤波器跟随噪声太紧,增加 `R`。
- 如果滤波器跟踪真实工艺运动太慢,增加 `Q`。
- 引入阶跃变化、尖峰或突然的过程反转。
- 确认估计器能干净地恢复,且不会使下游逻辑不稳定。
- 绑定原始信号
- 应用基础波形
- 注入测量噪声
- 观察滤波响应
- 实时调优 Q 和 R
- 测试异常转换
OLLA Lab 在此的作用与局限
OLLA Lab 是用于高风险调试任务的验证和演练环境。在此背景下,它允许工程师测试 ST 逻辑、检查变量行为,并比较模拟工艺响应与算法输出,而无需冒物理控制器或实际工厂顺序的风险。它不能替代现场验收、回路检查、安全验证或针对实际资产的操作员培训。这些界限非常重要。
卡尔曼滤波器与过程控制中的低通滤波器有何区别?
低通滤波器通过随时间平滑信号来抑制高频变化。一维卡尔曼滤波器通过平衡先验估计不确定性与测量不确定性来估计最可能的真实状态。前者是直接的平滑处理;后者是递归估计。
实用对比
| 标准 | 一阶滞后 / 低通滤波器 | 一维卡尔曼滤波器 | |---|---|---| | 主要方法 | 基于时间的平滑 | 预测性状态估计 | | 主要调优项 | 时间常数 / 滤波系数 | 过程噪声 `Q`,测量噪声 `R` | | 噪声响应 | 良好 | 良好 | | 响应滞后 | 通常显著 | 调优良好时通常较低 | | 模型感知 | 最小 | 显式不确定性加权 | | PLC 实现复杂度 | 低 | 中等 | | 最佳用例 | 滞后可接受的简单应用 | 响应性至关重要的噪声测量 |
控制后果并不微妙
如果低通滤波器增加了过多的相位滞后,回路在趋势图上看起来可能更平稳,但在实际运行中表现更差。这就是陷阱。一个美化了视觉效果的趋势曲线仍然可能惩罚执行器。
一个有界的工程主张
一维卡尔曼滤波器并不自动优于低通滤波器。它在以下情况更适用:
- 传感器噪声是实质性的,
- 工艺响应很重要,
- 下游 PID 或报警逻辑对延迟敏感,
- 且工程师能够以一定的纪律调优 `Q` 和 `R`。
如果应用缓慢、宽容且非关键,简单的低通滤波器可能完全足够。复杂性必须物有所值。
验证滤波器时应保留哪些工程证据?
截图本身不是工程证据。除非与测试定义相关联,否则它们只是纪念品。
在记录滤波器验证时,使用此结构构建紧凑的证据体系:
- 系统描述 定义模拟资产、传感器类型、过程变量、扫描上下文和下游控制相关性。
- “正确”的操作定义 用可观察的术语说明成功意味着什么,例如降低方差、可接受的跟踪延迟、稳定的 PID 行为或减少误报警。
- 梯形图逻辑和模拟设备状态 记录测试时的控制逻辑上下文和模拟过程行为。
- 注入的故障案例 指定引入的噪声配置文件、尖峰条件、信号丢失或扰动。
- 所做的修订 记录应用的参数更改、代码更改或初始化更改。
- 经验教训 记录哪些调优假设成立,哪些失败,以及在部署前应检查什么。
这是能够经受审查的证据。截图库很少能做到这一点。
在 PLC 环境中应用滤波逻辑时,哪些标准和文献很重要?
滤波本身不是功能安全声明,但实现质量仍处于软件正确性、验证和控制性能的更广泛学科之内。相关的标准和文献有助于界定什么是好的工程。
标准背景
- IEC 61131-3 规范了包括结构化文本和梯形图在内的 PLC 编程语言。它是与实现形式相关的语言框架。
- IEC 61508 在软件行为影响安全相关系统或生命周期严谨性时具有相关性。它不会“批准”卡尔曼滤波器,但它确实提高了对验证、可追溯性和软件完整性的期望。
- 在讨论验证纪律、故障行为以及控制便利性与安全功能之间的分离时,来自 exida 等组织的指导很有用。
文献背景
过程控制、传感器融合和数字仿真领域的最新文献通常支持几个有界的结论:
- 工业测量经常受到噪声和干扰的破坏;
- 滤波选择会影响信号质量和控制响应性;
- 当用于测试可观察行为而非仅仅展示图形时,仿真和数字孪生环境可以改善部署前的验证;
- AI 辅助编程可以加速起草,但确定性审查仍然必不可少。
最后一点值得用直白的话说:一旦生成的代码到达控制器,它就是你的问题。
结论
一维卡尔曼滤波器在 PLC 工作中很有用,因为它解决了一个真实的工厂问题:无法在不降低控制质量的情况下通过重滞后平滑的噪声测量。结构化文本是该算法的正确实现媒介,因为该方法依赖于保留状态和紧凑的数值表达式。OLLA Lab 在验证阶段变得具有操作价值,工程师需要在部署前注入噪声、观察响应趋势、调优 `Q` 和 `R` 并强化逻辑。
值得保留的区别很简单:滤波不仅仅是为了让趋势看起来更干净;它是为了在噪声下保持决策质量。 在过程控制中,这种差异会迅速传导至执行器。
继续探索
Interlinking
Related reading
How To Tune A Pid Loop A Practical Olla Lab Guide →Related reading
How To Build 3 Sigma Failure Detection For Pumps In Ladder Logic →Related reading
How To Scale 4 20ma Analog Signals And Program Fault Handling In Olla Lab →Related reading
探索完整的梯形图掌握中心 →Related reading
相关文章 1 →Related reading
相关文章 2 →Related reading
相关文章 3 →Related reading
在 OLLA Lab 中练习此工作流 ↗