下面是1200的ob1中的通信程序的程序段1:
m0.3是2hz的时钟脉冲,mb0为时钟存储器字节,mb1为系统存储器字节。
db1.dbw0的值本来应该是每0.5加1,实际上每秒大约加了200多次。交叉参考表明没有别的地方改写db1.dbw0。实在是想不出来错误的原因了。
突然想起上升沿检测的原理,是用m2.4来保存m0.3前一扫描周期的值,通过比较m0.3前后两个扫描周期的值,来判断是否是m0.3的上升沿。如果m0.3在半周期内未变,但是m2.4的值在变化,也会检测到上升沿。于是赶快检查m2.4的交叉参考,发现该地址同时用于turcv指令的ndr位,通信作业完成时该位变为1。将m2.4改为别的地址,db1.dbw0正常运行了。这个“怪事”的揭秘又一次证实了我的一个结论:计算机(包括plc)总是对的,问题总是出在粗心大意的人身上。
看来,对指令的深入了解还是很有必要的。