发布于 2011-05-29 14:14:08
18楼
呵呵Automann老兄,在下作最后一次分析,来证明QB0就是PQB0;PI/PQ(外设区)地址并不是从零开始的。当然I/Q、PI/PQ区都属于过程映像区,它们的读写原则是我们的共识!我们不能为了抓住一只老鼠,而烧掉整座房子!我们不能再消耗太多的精力了,在尊重真理、科学的基础上,求同存异吧!
Automann老兄说:“QB0、PQB0里面的值是都是99并不能能证明QB0、PQB0地址是同一个地址!这是因为后两条指令通过PQB0将数据送输出模块(立即输出)的同时,数据同时被送入QB0,而QB0的值要等到下一个扫描周期开始时才被送到输出模块。只不过我等凡胎肉眼,看不出这个时间差而已!”
Automann老兄!那么我们一起建一个新的S7-300项目,没有任何中断、OB1里面只有这四条语句,我们来分析它们一个机器周期的执行过程。
L 88 //将常数88装载到累加器1
T QB 0 //将累加器1里面的内容88传送到过程映像区QB0
L 99 //将常数99装载到累加器1,此时88被移到累加器2
T PQB 0 //将累加器1里面的内容99传送到过程映像区PQB0
此时OB1执行结束,也就是说一个程序扫描周期结束。紧接着PLC的操作系统执行刷新过程映像区(I/Q、PI/PQ);并将刷新的结果传送至模块,此时一个机器周期才结束。如果PQB0这个地址存在,那么QB0里面的值应该88,PQB0里面的值应该是99;因为在这个过程中我们只对QB0作了一次写88操作。然而我们可以在线观察到QB0=PQB0=99,也就是说,在执行
L 99
T PQB 0
过程中,还是执行写QB0的操作,很显然QB0、PQB0是同一个地址。您就是把这个程序执行n次也是这个结果。所以我个人认为:PI/PQ(外设区)地址0并不存在!PI/PQ(外设区)地址并不是从零开始编址的!
上面的文字,是在下对此贴的最终技术讨论发言,后面也就无语了,因为我并不想为了抓住一只老鼠,而烧了整座房子。
Automann老兄,如果您愿意,您今晚看完“无诚勿扰”后,依然可以请我吃宵夜!不要让您、我都感觉遗憾哦!:)
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”