请大家及阿鸣老师解答

看到这个链接,关于BR方面的,阿鸣老师举的例子感觉很蹊跷。
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=79073&cid=1029#

L     "MT510".Powder1
      BTI   
      T     #temp1
      SET   
      SAVE                                    
      CLR   
      A     BR       

这部分装载 "MT510".Powder1并转换 传送给 #temp1后,
应该按照程序的实际执行来判断逻辑运算结果,
而阿鸣老师这段程序,反而用了SET指令,也就是
不管前边的数据转换和传送进行的怎么样,到我这里
就人为的将RLO置位,这不是虚假的RLO吗,我觉得不对,
不符合我的理解概念,还请阿鸣老师和高手们解答。

图片说明:

请大家及阿鸣老师解答   

最佳答案

请楼主仔细看看下述内容,尤其是<3>.。首先要清楚这是那段代码是由梯形图转换而来的,如果是应用STL编程那是另有说法的:
1、这个程序也是我转帖的。
2、在此再转帖这一个完整的典型问题与答案:
上面的那段代码是由梯形图转换而来的,首先将"MT510".Powder1
做BCD-I转换并存于temp1,然后将9传送到temp10,两个指令串联在一起。
现有如下问题向各位请教:
(1)、BTI指令执行完成后BR位自动置位吗?还是需要SAVE?
(2)、上段中的SET、SAVE及CLR用途何在?
(3)、在一个NetWork中串联执行多个指令或并联执行多个指令时,该如何处理?
回答:
首先弄清BR位:状态字的第8位称为二进制结果位。它将字处理程序与位处理联系起来,在一段既有位操作又有字操作的程序中,用于表示字逻辑是否正确。将BR位加入程序后,无论字操作结果如何,都不会造成二进制逻辑链中断。
《1》. 因为上面的那段代码是由梯形图转换而来的。出现了“SET、SAVE及CLR”。就此而论,在做BCD-I转换并存于temp1后,SET与SAVE两指令。SET即将状态字RLO置位;SAVE将RLO保存到状态字的BR位。此时表示功能被正确执行,即BR位为1.
《2》. CLR    /  将状态字RLO复位,以免影响下面的指令。
    A     BR  /  此时BR位为1,RLO=0
    )     
    JNB   _005 / 若BR=1且RLO=0,则跳转到005。
L     9   /   此时BR=1且RLO=1
    T     #temp10
  _005: NOP   0
<3>. 在一个NetWork中串联执行多个指令或并联执行多个指令时,该如何处理? 
 一般不要顾及用SAVE指令保存RLO。在下面的情况可用:
 在一个逻辑块中需检另一查逻辑块的BR位。
例如:在用户编写的FB/FC程序中,应该对BR位进行管理,功能块正确执行后,使BR位为1,否则使其为0。使用SAVE指令将RLO存入BR中,从而达到管理BR位目的。

提问者对于答案的评价:
感谢

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc234470.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午2:27
下一篇 2018年12月1日 下午2:27

相关推荐