CLR指令问题求解

CLR   
      A     I      0.1
      =     Q      0.1
上面指令我把I 0.1 用仿真软件赋值为1时,为什么输出是Q0.1的输出是零。
我的分析过程是这样的:
CLR指令讲RLO状态字置0,
 A指令使RLO和I0.1作与运算,结果为RLO=0(我置I0,1为1)。
RLO赋值给Q0.1
那么Q0.1结果为0,可是仿真的结果为1?
我不知道问题出在哪里?求解。。。。
图片是仿真时的状态字。

问题补充:
问题起始与这个问题。
http://www.ad.siemens.com.cn/service/answer/wap/LoggedIn/ReadingPage/Solved.aspx?QuestionId=79073
转载:
”RT,想咨询下老师BR位在FC中有什么作用呢?谢谢。
看了下别人写的程序,
程序开头
    SET   
       SAVE  
       =     L      0.1
 程序本体。。。
 程序结尾
  CLR   
       A     L      0.1
       SAVE 
就是没闹懂程序的开头和结尾有什么作用(BR位和L0.1做什么用了,L0.1程序本体中没有用到)。希望老师能指导下,严重感谢。
"
然后回答中有这个问题的解释:

程序结尾
   ***** CLR                 // 强行将RLO复位为"0"
 ***      A     L      0.1    // 与L0.1进行与操作,RLO结果仍为"0"
*******       SAVE              // 将BR位复位清0
也就是说有了这程序开头和结尾,该程序中LAD调用任何用户函数FC或FB时,保证能流导通。

于是我仿真时发现,结果并不像作者所说的那样(带******部分)。于是到底这个问题是如何解释的。

图片说明:

CLR指令问题求解   

最佳答案

楼主所提问题非常好,这个涉及到一个STL程序中一个新的逻辑串该从何处开始的问题。换言之,一个STL程序段并非是一个逻辑串,随之不同STL指令的应用会开始一个新的逻辑串。因此应用STL编程是要注意每个指令执行时的各种状态、结果的信息,这些集中在CPU的状态字中。
1、首先要注意当执行CLR指令与A 指令时CPU的状态字中的/FC位的状态是不一样的。
执行CLR指令:/FC位的状态为0;执行A指令:/FC位的状态为1。
2、再者重点是清楚首次检查位/FC的功能:
首次检查位/FC:状态字的0位称作首次检查位,如果/FC 位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC前面的斜杠表示对FC取反。 
3、按上述所述,楼主自己可以解释下述程序中为什么Q 0.1为1了:
  CLR   
  A    I      0.1//上述指令的FC 位的信号状态为“0”,意味本条指令将开始一个新的逻辑串,当前的RLO与CLR指令的RLO无关。
  =Q 0.1 //如果 I   0.1为1,Q 0.1则为1,;如果 I   0.1为0,Q 0.1则为0。
4、楼主自己也可以解释下述程序中为什么Q 0.1为0了:
  CLR   
  =Q 0.1//上述指令的FC 位的信号状态为“0”,意味本条指令将开始一个新的逻辑串,当前的RLO与CLR指令的RLO无关。但当前的RLO为0,则Q 0.1为0。
5、有关CPU状态字,见:
http://wenku.baidu.com/link?url=x5pLo1lDn2V7sqQxujjIxxlVpawbXuLPvajPuJ4QVOh1EFz3uPhUBfuvF2BoK86VJMaAXJUCAC0CYfcMbB_CEnPepvSYP73N1z_F-q4EEam

提问者对于答案的评价:
就你了

专家置评

已阅,最佳答案正确。

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

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

相关推荐