对于IO变量,通常在更新输入输出映像区的时候才会改变状态.
第一个扫描周期:I0.0按下,Q0.0为ON,请注意,此时输入输出映像区没有更新,因此I0.0,Q0.0的状态仍然为OFF。
然后第二Network中的Q0.0读取值当然为OFF,因此Q0.1的状态为OFF。
更新输入输出映像区……
第二个扫描周期,I0.0的状态已经为ON,Q0.0的状态也为ON,因此在Network2中,Q0.0的状态为ON,Q0.1为ON,请注意,此时输入输出影响区中Q0.1的状态仍然为OFF,因此在这个扫描周期,你的Q0.0已经有输出了,但是Q0.1没有输出。
更新输入输出映像区……
第三个扫描周期,Q0.1输出。
现在说说Q0.0改为M0.0的情况:
第一个扫描周期:I0.0按下,M0.0为ON,内存地址的更新不需要通过输入输出映像区的更新,但是I0.0仍然在映像区中的状态为OFF,因此此时M0.0的状态为OFF。
更新输入输出映像区……
第二个扫描周期:I0.0的状态为ON,此时M0.0的状态立即为ON,因此在Network2中读取M0.0的状态为ON,Q0.1为ON,但是Q0.1的输出需要等待输入输出映像区的更新。
然后说说I0.0更改为M0.0,Q0.0更改为M0.1的状况:
第一个扫描周期:M0.0为ON,M0.1立即为ON,此时Q0.1在程序中的状态为ON,但是没有实际的输出。
更新输入输出映像区后:Q0.1输出。
最后说说为啥IO状态需要更新输入输出后才更新:
因为要确保输入输出在扫描周期内处理状态的一致性,用户可以通过强制更新输入输出映像区指令来随时更新输入输出映像区,带来的后遗症有2点:
1、扫描周期的延长。
2、IO状态在程序处理周期内不一致。
HAVE FUN!
回复内容:
对: yuanle 对于IO变量,通常在更新输入输出映像区的时候才会改变状... 内容的回复!
-------------------------
感谢大神回复!有这个疑问,是因为在一个教学视频中讲道(视频中,上图的Q0.0为M0.0,不是这里的Q0.0):按下I0.0,那么M0.0导通,接着执行第二行,此时M0.0的常开触点为ON,那么Q0.1也就为ON。就这里有疑问:难道M0.0和Q0.0输出刷新不一样吗。视频中老师说:上面网络中的运算结果会参与到下面的网络运算中。看你的回复,不管是Q0.0还是M0.0效果都是一样的吧?