2. 灌装机PLC数字量输入抖动导致计数错误诊断
问题定位:从“计数偏大”反推抖动来源
灌装机出口的瓶计数通常由一只光电(或接近)开关给出脉冲,PLC 数字量输入模块采集上升沿后由计数器累加。当输入信号在阈值附近抖动时,一次真实过瓶会被 PLC 识别成多个上升沿,表现为产量统计偏大,而机械计数或人工抽检数量正常。排查的关键不是先改程序,而是先确认“抖动是否真实存在于输入端子”,再决定用滤波还是逻辑修正。
本例的现场条件设定为:计数传感器为 PNP 型光电开关,接 PLC 数字量输入通道 DI0.3,模块输入滤波时间当前为默认 6.4 ms,计数器在 OB1 中每个扫描周期检测上升沿并累加。故障现象为每班统计比实际多 3%~8%,且抖动在输送带高速段更明显。
在线趋势记录:先拿到端子处的真实波形
不要直接在程序里加计数修正,否则会把接线或干扰问题掩盖掉。正确顺序是:在 PLC 编程软件中打开在线监视/趋势记录功能,把 DI0.3 的输入状态(或对应过程映像位)加入趋势,采样周期设为 1~2 ms,连续记录 30 s 以上,覆盖输送带高速段。观察三件事:
- 一次真实过瓶对应几个上升沿;
- 抖动脉冲的典型宽度(用趋势光标测量高电平持续时间);
- 抖动是否与变频器启停、电机接触器动作时刻相关。
本例设定实测结果为:单次过瓶在趋势上出现 2~4 个上升沿,抖动高电平宽度约 1.5~3 ms,且集中在输送带变频器加速段。该宽度小于当前 6.4 ms 滤波时间,说明滤波参数本应能滤除,但计数仍偏大,提示滤波可能未生效或计数逻辑在滤波前取边沿。此时需核对模块滤波参数是否真正下载到硬件组态,以及程序中边沿检测使用的是过程映像位还是直接 I/O 访问。
滤波参数调整与计数逻辑修正
确认硬件组态中的输入滤波时间已正确下载后,将 DI0.3 的滤波时间由 6.4 ms 调整为 10 ms(需小于最短真实过瓶脉宽,本例真实脉宽约 25 ms,余量充足)。同时在程序中把“裸边沿计数”改为“最小脉宽确认 + 单次触发”逻辑,避免滤波后残余窄脉冲仍被计数。以下为 OB1 中的计数逻辑示例(梯形图对应的结构化文本表达,变量名按本例定义):
// 变量定义(本例)
// "DI_Bottle" : Bool; // DI0.3 过程映像位
// "TonDebounce" : TON; // 去抖定时器,PT = 8 ms
// "EdgeMem" : Bool; // 边沿记忆位
// "BottleCount" : DInt; // 瓶计数
// "PulseValid" : Bool; // 有效脉冲标志
// 1) 最小脉宽确认:信号持续为 1 达 8 ms 才认为有效
"TonDebounce"(IN := "DI_Bottle", PT := T#8ms);
"PulseValid" := "TonDebounce".Q;
// 2) 仅在有效脉冲的上升沿计数一次
IF "PulseValid" AND NOT "EdgeMem" THEN
"BottleCount" := "BottleCount" + 1;
END_IF;
"EdgeMem" := "PulseValid";
// 3) 信号回落后复位去抖定时器输入条件(TON 自动复位)
// 说明:TonDebounce 的 IN 直接取 DI_Bottle,回落后 Q 自动为 0
该逻辑的要点是:去抖定时器要求输入连续为 1 达到 8 ms 才输出有效脉冲,抖动产生的 1.5~3 ms 窄脉冲无法通过;有效脉冲再经边沿记忆只计一次,避免同一过瓶被重复累加。8 ms 的取值需小于最短真实过瓶脉宽(本例约 25 ms),否则会漏计。
验证与通过条件
调整后重新下载硬件组态与程序,按以下方式验证:
- 趋势复核:再次记录 DI0.3 与 PulseValid,确认抖动段 PulseValid 保持为 0,真实过瓶段 PulseValid 出现单个脉冲;
- 计数比对:连续运行 30 min,用机械计数器或人工抽检数量与 BottleCount 增量比对,偏差应 ≤ 1 瓶/30 min;
- 高速段验证:在输送带最高速工况下重复上述比对,确认无漏计(计数不小于实际数量);
- 干扰复现:启停变频器 3 次,观察计数是否出现异常跳变,验证干扰源处理效果。
若验证后仍有偏差,回到趋势记录区分是“残余抖动未被滤除”还是“真实脉宽过窄被误滤”,前者继续处理干扰与屏蔽,后者需下调滤波时间或改用更高响应频率的传感器,而不是继续加大滤波。