quote:以下是引用shine在2008-12-24 09:50:53的发言:
plc的每条指令,根据当前状态,执行结果是确定的,但是这个当前状态是在变化的,条件变了,结果就会跟着改变,如果编写程序没有完整考虑各种状态,就可能出现和自己预计不一样的状态,程序就可能出问题了。
程序1为什么会出现这种不确定呢?是因为S5定时器的执行机理决定的。我同意四书五经的说法,S5定时器是异步刷新的,脱离扫描周期和程序的扫描。
试验证明程序1中,M10.2有可能被置位,也有可能不会被置位,为什么呢?让我们从T3在不同时候达到定时时间来进行分析:
1、如果T3在Network1之前达到定时值,那么经过Network1,T2复位,Network2中T3复位,所以M10.2不能置位。
2、如果T3在N1执行之后,N3执行之前定时时间到,那么,T2的状态要到下一个扫描周期执行到N1时才会被改变,所以T3保持为1,M10.2会被置位。
3、如果T3在N3之后置位,要到下一扫描周期才能执行N1~N3的程序,那么情况同1,M10.2不会被置位。
所以这也解释了为什么只有这3段程序时,M10.2很难被置位,而在N1和N3之间增加一段需要较长执行时间的程序后,M10.2被置位的几率大大增加,但不是100%,因为之间的时间长了,刚好在这段时间内达到定时时间的几率增加了。