利用STL编程,手册上首先看到接触的就是寄存器状态字,CPU寄存器状态字的各位给出了有关指令状态或结果的信息以及所出现的错误,我们可以将二进制逻辑操作状态位信号状态直接集成到程序中,以控制程序执行的流程。
当然网上关于这个字的解释已经是很通透了,但是这些文字让我们这些野夫咬的甚是不爽,其实很简单的几个位,硬是被说的人模人样,浪费时间不说,还伤脑细胞。所以在这里来一个图文并茂的详解…
BR | CC1 | CC0 | OV | OS | OR | STA | RL0 | /FC |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
上面就是状态字的几个位,分别是第0位→第8位,其中9-15位没有用到。
先来看看官方的文字解释:
● 首次检查位:状态字的0位称作首次检查位,如果/FC 位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC前面的斜杠表示对FC取反。
● 逻辑运算结果:状态字的第1位为RLO 位(RLO= “逻辑运算结果”),在二进制逻辑运算中用作暂时存储位。比如,一串逻辑指令中的某个指令检查触点的信号状态,并根据布尔逻辑运算规则将检查的结果(状态位)与RLO位进行逻辑门运算,然后逻辑运算结果又存在RLO位中。
● 状态位:状态位(第2位)用以保存被寻址位的值。状态位总是向扫描指令(A,AN,O,…)或写指令(=,S,R,)显示寻址位的状态(对于写指令,保存的寻址位状态是本条写指令执行后的该寻址位的状态)。
● OR位:在用指令OR执行或逻辑操作之前,执行与逻辑操作的时候,就需要用到OR这一状态位。OR位表示先前执行的与逻辑操作产生的值为“1”,于是,逻辑操作或的执行结果就已被确定为“1”。
● OV位:溢出表示算术或比较指令执行时出现了错误。根据所执行的算术或逻辑指令结果对该位进行设置。
● OS位:溢出存储位是与OV位一起被置位的,而且在更新算术指令之后,它能够保持这种状态,也就是说,它的状态不会由于下一个算术指令的结果而改变。 这样,即使是在程序的后面部分,也还有机会判断数字区域是否溢出或者指令是否含有无效实数。OS位只有通过如下这些命令进行复位:JOS(若OS = 1,则跳转)命令,块调用和块结束命令。
● CC1及CC0位:CC1和CC0(条件代码)位给出有关下列结果的相关信息:
• 算术指令结果
• 比较指令结果
• 字逻辑指令
• 在移位功能中,移出位相关信息。
可以用以下指令来检查条件代码CC1和CC0。
CC1 CC0 检查完成后,如果:
0 0 A == 0 结果 =0
1 0 A > 0 结果 > 0
0 1 A < 0 结果 < 0
● BR位:状态字的第8位称为二进制结果位。它将字处理程序与位处理联系起来,在一段既有位操
作又有字操作的程序中,用于表示字逻辑是否正确。将BR位加入程序后,无论字操作结果如何,都不会造成二进制逻辑链中断。在梯形图的方块指令中,BR位与ENO位有对应关系,用于表明方块指令是否被正确执行:如果执行出现了错误,BR位为0,ENO位也为0;如果功能被正确执行,BR位为1, ENO位也为1。在用户编写的FB/FC程序中,应该对BR位进行管理,功能块正确执行后,使BR位为1,否则使其为0。使用SAVE指令将RLO存入BR中,从而达到管理BR位目的。
状态字的9-15位未使用。
怎么样?很头大吧!看了前面忘了后面吧,下面我来跟上。,
1、/FC:首次检查位。如果/FC 位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC前面的斜杠表示对FC取反。看下图1
图1
是不是应上那句解释?如果/FC 位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。
2、RL0:逻辑运算结果位。二进制逻辑运算结果暂时存储位。
当下图2,图3,I0.0置1前,RLO为0;I0.0置1之后,RLO为1,并结合下一指令,从而逻辑运算后面程序。
图2
图3
然后再看整个逻辑串导通,图4可以很明了的解释了该位的情况。
图4
3、STA:状态位。状态位用以保存被寻址位(扫描位:A、AN、O、ON…写指令:=、S、R…)的值。
A、没有任何操作的状态图5a
图5a
B、I0.0为1时,A I0.0指令执行时,状态位变为1,同样I0.1变为1时状态位同样位1,且逻辑串使能输出Q1.0。图5b
图5b
C、同理其他能流导通也是该道理。图5c
图5c
4、OR位:在用指令OR执行或逻辑操作之前,执行与逻辑操作的时候,就需要用到OR这一状态位。OR位表示先前执行的与逻辑操作产生的值为“1”,于是,逻辑操作或的执行结果就已被确定为“1”。
其实很简单,看下图就能理解。
图6a
图6b
图6c
由图6b和图6c可以理解那条高亮显示文字了吧。
5、CC1/CC0/OV/OS 具体看帮助,很清晰明了!
图7
对于实数计算,同样也可查的帮助参考,F1是个好东西啊!
OV: 出现故障(溢出、非法运算、无序比较)后,通过带浮点数的数学运算指令对其置位。排除故障后,OV位复位。
OS:如果在对浮点数执行数学运算指令或比较指令期间出现错误,OS位将存储OV位。出现故障时,将和OV (溢出)位一起,置位OS位。排除故障后,OS位保持不变。因此,它将存储OV位状态,并指示以前执行的指令中是否出现过故障。
下列命令复位OS位:
● JOS (如果OS=1则跳转)
● 块调用指令
● 块结束指令
6、BR位将从处理语句表(STL)指令获得的结果传送到要处理的下一批指令。
当您在STL中编写要从LAD/FBD调用的功能块或功能时,必须在离开该块之前将逻辑运算(RLO)的结果立即存储在BR位中,这样才能为LAD/FBD框提供使能输出(ENO)。使用SAVE、JCB、JNB指令执行此操作。
在程序中调用系统功能块(SFB)或系统功能(SFC)时,SFB或SFC会通过在二进制结果位中提供下列信息,来指出CPU在执行该功能块(功能)时是否曾发生过错误:
● 如果在执行期间发生过错误,BR位为"0"。
● 如果无错误地执行该功能(函数),BR位为"1"。
以求学习,求各位大侠拍砖!