quote:以下是引用柳絮飘飘在2008-12-18 11:16:21的发言:quote:以下是引用Harry_dong在2008-12-17 08:56:30的发言:quote:以下是引用axg2008在2008-12-16 09:37:44的发言:
坛主给的问题其实是时间继电器的动作问题,即时间继电器的动作是下个cpu的扫描周期,所以1、2两个问题的m10.2和m6.2均不能置位,如果把它们放在时间继电器的前面就可以置位了
我赞同axg2008朋友的说法,就第一段稍做改动就会产生不同的结果:
1.把置为M10.2放在最前面,M10.2就可以置位了。
A T 3
S M 10.2
AN T 3
L S5T#3S
SD T 2
A T 2
L S5T#3S
SD T 3
2.把定时器T2和T3交换位置,同样可以把M10.2置位。
A T 2
L S5T#3S
SD T 3
AN T 3
L S5T#3S
SD T 2
A T 3
S M 10.2
以上两段程序的改动直接影响了M10.2的状态。那么原题中的程序M10.2不能置位的原因可能就是由于定时器是在下一CPU周期中动作的。
看了 Harry_dong 的帖子后我做了测试发现结果和Harry_dong的相同。可是为何我原来也用的SEEMENS 的模拟软件测试,这段程序M10.2却能够被置位。
看了大家的帖子后我分析:因为的TIMER的定时与扫描周期没有关系,所以一旦TIMER3开始定时他会一直延续下去,知道定时时间到。此时如果正好在执行网络2时TIMER3的时间到了,那么在执行网络3时就有可能M10.2被置位,但是网络2和网络3是紧邻的两条语句,执行间隔时间相当短,所以这种情况出现的几率很小。当TIMER3时间到后,执行网络T3的常闭点断开,T2线圈失电,顺序扫描到网络2 时T2的常开点又断开使得T3的线圈失电,在扫描到网络3 时,由于T3的线圈失电使得T3的常开点也是断开的,致使M10.2不能被置位。