4. 虚拟调试中的传感器信号滤波与防抖验证

虚拟调试中的传感器信号滤波与防抖验证 学习卡片

为什么光电传感器信号需要滤波与防抖

在虚拟调试环境中,光电传感器(如对射式、漫反射式)的开关量信号常因以下原因产生抖动:

  • 工件边缘反光或半透明材质导致信号在阈值附近快速跳变
  • 输送带振动使工件短暂遮挡/脱离光路
  • 仿真模型碰撞检测的离散步长造成信号毛刺

若PLC直接使用原始信号驱动分拣气缸,会出现误分拣、气缸频繁动作甚至机械冲突。因此需要在虚拟PLC中实现滤波(去毛刺)与防抖(稳定确认)逻辑。

光电传感器信号滤波与防抖处理链 虚拟光电传感器 工件遮挡 → 信号跳变 仿真步长 10ms 原始信号(含抖动) 毛刺宽度 10~30ms 滤波(去毛刺) TON 延时 30ms 滤除 <30ms 脉冲 滤波后信号 毛刺已消除 防抖(稳定确认) TOF 延时 50ms 信号需持续 50ms 防抖后稳定信号 仅保留 ≥50ms 有效信号 分拣气缸动作 稳定信号 → 伸出 无信号 → 缩回 动作稳定 无误分拣 无频繁动作 滤波参数调整与验证方法 滤波时间 TON 建议 20~50ms,需 > 毛刺宽度 防抖时间 TOF 建议 30~80ms,需 < 工件间隔 验证指标 分拣准确率、气缸动作次数 抖动信号注入测试场景 ① 注入毛刺 10ms/20ms/30ms 脉冲 ② 观察滤波输出 毛刺是否被滤除 ③ 检查分拣动作 气缸是否误动作 ④ 调整参数 直至稳定

在虚拟PLC中实现滤波与防抖逻辑

以下以结构化文本(ST)为例,展示滤波与防抖的典型实现。假设PLC扫描周期为10ms,使用两个TON定时器分别实现滤波和防抖。

FUNCTION_BLOCK FB_SensorFilter
VAR_INPUT
    RawSignal : BOOL;        // 原始传感器信号
    FilterTime : TIME := T#30ms;  // 滤波时间(去毛刺)
    DebounceTime : TIME := T#50ms; // 防抖时间(稳定确认)
END_VAR
VAR_OUTPUT
    FilteredSignal : BOOL;   // 滤波后信号
    StableSignal : BOOL;     // 防抖后稳定信号
END_VAR
VAR
    TON_Filter : TON;        // 滤波定时器
    TON_Debounce : TON;      // 防抖定时器
    FilteredInternal : BOOL; // 滤波中间变量
END_VAR

// 第一步:滤波——信号需持续 FilterTime 才认为有效
TON_Filter(IN := RawSignal, PT := FilterTime);
FilteredInternal := TON_Filter.Q;

// 第二步:防抖——滤波后信号需持续 DebounceTime 才输出稳定
TON_Debounce(IN := FilteredInternal, PT := DebounceTime);
StableSignal := TON_Debounce.Q;

// 输出滤波后信号(供调试观察)
FilteredSignal := FilteredInternal;

END_FUNCTION_BLOCK
参数选择原则:滤波时间应大于最大毛刺宽度(本例中毛刺约10~30ms,故取30ms);防抖时间应小于最小工件间隔时间(若工件间隔约100ms,防抖取50ms可避免漏检)。

抖动信号注入与验证

在虚拟调试平台中,可通过以下方式注入抖动信号并观察分拣动作稳定性:

  1. 信号注入:在传感器信号输出点叠加周期性脉冲(如每100ms插入一个10ms的假信号),模拟反光或振动干扰。
  2. 观察滤波输出:在PLC变量监控表中同时监视 RawSignal、FilteredSignal 和 StableSignal,确认毛刺被滤除。
  3. 检查分拣动作:观察虚拟分拣气缸的动作次数。若滤波参数正确,气缸应仅在真实工件到达时动作一次。
  4. 参数调整:逐步增大滤波时间直至毛刺完全消除;再调整防抖时间,确保工件间隔内信号稳定输出。
测试场景 滤波时间 防抖时间 预期现象 判断依据
毛刺10ms 30ms 50ms 毛刺被滤除,气缸不动作 FilteredSignal 无脉冲
毛刺30ms 30ms 50ms 毛刺刚好被滤除 FilteredSignal 无脉冲
毛刺50ms 30ms 50ms 毛刺未被完全滤除,但防抖后仍稳定 StableSignal 无脉冲
真实工件 30ms 50ms 信号正常输出,气缸动作一次 StableSignal 持续高电平
注意:滤波时间与防抖时间之和不应超过工件最小间隔时间,否则会导致漏检。例如工件间隔100ms时,滤波30ms + 防抖50ms = 80ms,仍有余量;若间隔仅60ms,则需减小参数。

参数调整与稳定性验证

完成初步测试后,按以下步骤微调参数:

  • 增大滤波时间:若仍有毛刺导致 FilteredSignal 跳变,每次增加10ms,直至毛刺完全消除。
  • 调整防抖时间:若气缸动作仍不稳定,适当增大防抖时间,但需确保不超过工件间隔的60%。
  • 验证分拣准确率:连续运行虚拟分拣流程100次,统计误分拣次数。理想结果为0次误分拣。
  • 记录参数:将最终稳定的滤波时间、防抖时间记录到调试日志中,作为后续案例的基准参数。
调试记录示例:
传感器类型:对射式光电传感器
仿真步长:10ms
最终滤波时间:30ms
最终防抖时间:50ms
测试结果:注入10~50ms毛刺,分拣气缸无误动作;真实工件通过时动作正常,连续100次分拣准确率100%。