BEC为有条件程序结束,如果RLO=1,则BEC中断当前块中的程序扫描,如果RLO=0,则不执行BEC。RLO被设为1,程序扫描继续执行BEC之后的指令。
但是我看到两个实例,有点疑问。示例如下:
AM1.1
BEC
=M1.2
如果M1.1=0,则跳过BEC执行=M1.2,此时RLO=1,所以M1.2=1
但是我看到西门子帮助文档里的例程,发现了个小问题,然后我糊涂了。
AI1.0//更新RLO。
BEC//如果RLO=1,则结束块。
LIW4//如果未执行BEC,则从此处继续,RLO=0。
TMW10
为什么这里未执行BEC,而RLO=0呢?不是应该RLO=1的么?应该怎么理解?真心求教。
问题补充:
weiyt大师,从例程来看,如果I1.0=0,则RLO=0,此时就不执行BEC,执行指令LIW4。但是执行LIW4的时候RLO的值应该是1的吧(因为跳过BEC时会将RLO置位)。这样理解就对了吧?
最佳答案
首先要看RLO原来的值是多少,再经过逻辑运算得到的RLO是0,还是1,决定是否执行BEC。
AI1.0//更新RLO。
BEC//如果RLO=1,则结束块。
LIW4//如果未执行BEC,则从此处继续,RLO=0。
TMW10
为什么这里未执行BEC,而RLO=0呢?I1.0为0时,RLO为0
不是应该RLO=1的么?为1则I1.0肯定为1,执行BEC就结束了,不会执行下面的LIW4了呀
补充:
你的理解是对的,如果I1.0为0,则RLO=0,不执行BEC;但是无论BEC的前面指令的RLO是0还是1,BEC的RLO始终是1,所以BEC指令后面的指令,RLO自动是为1了,所以就会执行LIW4这一指令,参考一下我的附图
图片说明:
dFC9d2b1ebBF584780206c596e6ea3f2
提问者对于答案的评价:
谢谢大师解答,大家都回答的很好,看文档注释的时候确实需要细细的思考。