You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R_TRIG、F_TRIG与TOF功能异常问题排查

问题原因与修正方案

核心问题

你编写的边沿触发块(R_TRIG、F_TRIG)和定时器块(TOF)仅在第一次扫描时被调用一次,后续扫描周期中完全得不到更新,导致无法检测输入信号的边沿变化,自然不会触发trigger_ticks的递减逻辑。

具体原因拆解

  • PLC中的边沿触发器(R_TRIG/F_TRIG)需要每个扫描周期都被调用,才能持续对比当前周期与上一周期的输入信号状态,从而检测到上升/下降沿。你的代码里这些块被放在re = FALSE的分支里,执行一次后re被设为TRUE,后续再也不会调用这些块,它们的内部状态完全停滞,无法再响应trigger_pos_sensor_left的新触发信号。
  • TOF定时器同理,仅调用一次的话,它的状态不会随时间推进更新,delay_timer.Q的状态也永远不会变化。

修正后的代码

将边沿触发器和定时器的调用移到条件分支外部,确保每个扫描周期都执行:

// 必须每个扫描周期都调用这些块,才能持续更新状态
trigger_sensor_rtrig(CLK := trigger_pos_sensor_left);
trigger_sensor_ftrig(CLK := trigger_pos_sensor_left);
delay_timer(IN := trigger_sensor_ftrig.Q, PT := T#10s);

IF (re = FALSE )THEN
    trigger_ticks := 5;
    re := TRUE;
END_IF

IF (trigger_sensor_rtrig.Q = TRUE) AND (delay_timer.Q = OFF) THEN
    trigger_ticks := trigger_ticks - 1;
END_IF

补充说明

修正后,R_TRIG会在每次trigger_pos_sensor_left出现上升沿时,将Q输出置为TRUE一个扫描周期,此时只要delay_timer.Q为OFF,就会触发trigger_ticks减1的逻辑,符合你的预期。

内容的提问来源于stack exchange,提问作者user3742046

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:45:07