发表于:2013/8/17 9:09:15
#0楼
下面这个程序中使用了100ms定时器,在I0.0接通之后,Q0.0 =1,Q0.1=0,持续1秒钟,然后转为Q0.0=0,Q0.1=1.,
问题:在到达1秒钟的那一刹那,Q0.0和Q0.1同时为1,还是一个为1,另一个为0?
如果只看Q0.0到Q0.1的变化,这种细节问题似乎无关紧要。但是,如果程序当中其他地方会继续使用Q0.0和Q0.1的值,比如图中第三个rung,只要Q0.0和Q0.1同时为1,就会置Q0.2为1;如果两者从不会同时为1,那么Q0.2就始终保持0。所以,在这种情况下,这一细微的差异,会对程序行为发生明显的影响。
下面分析一下,Q0.0和Q0.1是否会出现同时为1的情形。
S7-200 100ms定时器在执行到定时器语句时才会改变定时器变量(图中的T37)的值,在时间达到1秒时,执行定时器语句之后,T37从0变为1。Q0.0的计算,发生在这一变化之前,所以Q0.0依然保持1。Q0.1在这一变化之后,因此Q0.1在这一周期中也变为1,所以,此时Q0.0和Q0.1同时为1,因此,最后Q0.2被置1。
问题:在到达1秒钟的那一刹那,Q0.0和Q0.1同时为1,还是一个为1,另一个为0?
如果只看Q0.0到Q0.1的变化,这种细节问题似乎无关紧要。但是,如果程序当中其他地方会继续使用Q0.0和Q0.1的值,比如图中第三个rung,只要Q0.0和Q0.1同时为1,就会置Q0.2为1;如果两者从不会同时为1,那么Q0.2就始终保持0。所以,在这种情况下,这一细微的差异,会对程序行为发生明显的影响。
下面分析一下,Q0.0和Q0.1是否会出现同时为1的情形。
S7-200 100ms定时器在执行到定时器语句时才会改变定时器变量(图中的T37)的值,在时间达到1秒时,执行定时器语句之后,T37从0变为1。Q0.0的计算,发生在这一变化之前,所以Q0.0依然保持1。Q0.1在这一变化之后,因此Q0.1在这一周期中也变为1,所以,此时Q0.0和Q0.1同时为1,因此,最后Q0.2被置1。
[此贴子已经被作者于2013/8/17 21:43:46编辑过]