技术论坛

 STL语句为啥要加CLR, BR 管理

返回主题列表
作者 主题
殚精竭力的老马
游士

经验值:151
发帖数:9
精华帖:0
楼主    2019-01-17 16:36:12
主题:STL语句为啥要加CLR, BR 管理

不明白,这条STL语句为啥要加CLR??

悬赏分:15

- 解决时间:2009-4-19 11:08

程序如下:
A      I2.6 
JNB _001
L    MW2
ITD
T    MD6
SET
SAVE
CLR 
_001: A  BR
   =Q4.4
按照提行图的逻辑,上面的意思就是如果当 I2.6接通,那么将MW2转换为双整数存到MD6中,Q4.4置1,否则不执行 。
可是转换成STL语句后,总感觉CLR这条将RLO置0的指令为啥非得要有呢??并且感觉逻辑上是错误的,看我分析:
如果I2.6是高电平,则不执行跳转,继续向下执行,转换好后,用SET指令将RLO置1,完成后用SAVE指令存储到BR位中,BR变为1,接着执行CLR,清楚RLO为0,这个时候,在执行
A  BR 的时候,根据 RLO的定义,是将上一次执行完毕后的RLO值与当前的BR进行与运算,由于上一条指令是CLR,所以RLO为0,此时即使BR为1,与运算的结果仍旧是0,输出当然也就是0了,显然不符合实际情况!
请问我哪里错了呢??
手册上和帮助文档上说的清楚,逻辑运算的结果是当前触点的状态和上一次RLO结果进行逻辑运算,我的分析完全是按照这个逻辑来的。
如果这样想,执行A BR的时候是直接检测BR状态然后输出可以得出正确结论,可是这样做显然不符合逻辑运算的规则,并没有与RLO位进行运算!!
怎么了呢??
请教各位大虾!感觉RLO太流氓了!

问题补充:帮助文档说的明白 “使用“与”指令可以检查被寻址位的信号状态是否为“1”,并将测试结果与逻辑
运算结果(RLO)进行“与”运算。”
检测到的BR的确是1,可是它架不住RLO被CLR清0了啊!结果不还是0吗???

 

回答:

CLR 
 _001: A  BR
 =Q4.4
1、执行CLR指令后,RLO=0,但/FC(首次检查位)也将被复位为0。2、/FC=0表示随后将重新开始一串新的逻辑运算,即CLR后面的第一条指令(A  BR)也将是新的一串逻辑中的第一条指令。执行该指令(A  BR)时,其检查结果将直接写入RLO中。
3、从一串逻辑运算中第二条指令开始,逻辑运算的结果才是当前触点的状态和上一次RLO结果进行逻辑运算。

/FC        First Check Bit (Status Word, Bit 0)

The /FC bit signal state controls a logic operation string.

The /FC bit is status word bit 0.

Each logic operation queries the /FC bit signal state and the addressed contact.

?If the /FC bit signal state equals "1",an instruction logically combines the result of its signal state check on its addressed contact with the RLO generated since the first check and stores the result in the RLO bit.

?If the /FC bit signal state equals "0", the logic string begins with a first check.

The logic string ends and the /FC bit is set to "0" with the assignment of a value (S,R,=) or with a RLO-dependent jump instruction.

 

-------------------------------------------

转抄相关问题:
A(    
      L     "MT510".Powder1
      BTI   
      T     #temp1
      SET   
      SAVE                                    
      CLR   
      A     BR                          
      )     
      JNB   _005
      L     9
      T     #temp10
_005: NOP   0

上面的那段代码是由梯形图转换而来的,首先将"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=1
    )     
    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位目的。

BR        Binary Result Bit (Status Word, Bit 8)

The BR bit is bit 8 of the status word.

The BR bit transfers the results obtained from processing Statement List (STL) instructions on to the next instructions to be processed.

When writing a function block or function in STL that you want to call from LAD/FBD, you have to store the result of the logic operation (RLO) in the BR bit immediately before leaving the block in order to provide the enable output (ENO) for the LAD/FBD box. You do this using the SAVE, JCB, JNB instructions.

When you call a system function block (SFB) or a system function (SFC) in your program, the SFB or SFC indicates whether the CPU was able to execute the function with or without errors by providing the following information in the binary result bit:

?If an error occurred during execution, the BR bit is 0?

?If the function was executed with no error, the BR bit is 1?


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。