不知道是不是 信捷PLC 的BUG, 测试程序在我附件中。
描述:
在顺控 中 计数的问题,
情况1:
M0 开启流程S0
S0 :驱动 C1 计数, 并计时 1s
S0上升沿:驱动C2计数
计时时间到:rst S0 MO
无论 开启 多少次 M0 : C1 都只计数1次
C2 能正常计数
经过分析有如下猜想:
时钟脉冲:在分析当前计数语句是不是 执行计数的时候,会参考上一时钟周期 当前计数语句的结果,如果上一次计数语句为OFF,当前周期为ON ,则计数, 其他则不计数。 执行完, 将当前计数语句结果存入,给下一时钟周期判断用。
那么问题来了, 由于流程控制的特殊性, 当S0关闭时, S0里面的计数语句是不会被执行的, 如果信捷PLC不主动将 上一脉冲的 计数语句 结果 置OFF 的话, 他将一直保存S0 打开时 最后一个时钟周期 的结果,所以会 出现 C1 无论 S0打开多少次 都是1 ,
至于C2 ,由于是上升沿触发, 所以在S0 开启的第二个周期,计数语句的 结果会被置OFF,下次再开启S0,会正常计数,
为了 佐证上面的猜想, 可以做一个实验2 :即 只让 S0打开一个时钟周期, 根据上面的猜想, 由于只有一个时钟周期,那么 S0 S0上升沿 在S0关闭时, 计数语句都不会 置OFF, 无论S0打开多少次, C1 C2都将是 1
S1 表示情况1
S0 表示情况2