4. 虚拟调试中的传感器信号滤波与防抖验证
为什么光电传感器信号需要滤波与防抖
在虚拟调试环境中,光电传感器(如对射式、漫反射式)的开关量信号常因以下原因产生抖动:
- 工件边缘反光或半透明材质导致信号在阈值附近快速跳变
- 输送带振动使工件短暂遮挡/脱离光路
- 仿真模型碰撞检测的离散步长造成信号毛刺
若PLC直接使用原始信号驱动分拣气缸,会出现误分拣、气缸频繁动作甚至机械冲突。因此需要在虚拟PLC中实现滤波(去毛刺)与防抖(稳定确认)逻辑。
在虚拟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可避免漏检)。
抖动信号注入与验证
在虚拟调试平台中,可通过以下方式注入抖动信号并观察分拣动作稳定性:
- 信号注入:在传感器信号输出点叠加周期性脉冲(如每100ms插入一个10ms的假信号),模拟反光或振动干扰。
- 观察滤波输出:在PLC变量监控表中同时监视
RawSignal、FilteredSignal和StableSignal,确认毛刺被滤除。 - 检查分拣动作:观察虚拟分拣气缸的动作次数。若滤波参数正确,气缸应仅在真实工件到达时动作一次。
- 参数调整:逐步增大滤波时间直至毛刺完全消除;再调整防抖时间,确保工件间隔内信号稳定输出。
| 测试场景 | 滤波时间 | 防抖时间 | 预期现象 | 判断依据 |
|---|---|---|---|---|
| 毛刺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%。
传感器类型:对射式光电传感器
仿真步长:10ms
最终滤波时间:30ms
最终防抖时间:50ms
测试结果:注入10~50ms毛刺,分拣气缸无误动作;真实工件通过时动作正常,连续100次分拣准确率100%。