STL状态字问题
悬赏分:5
- 解决时间:2009-2-9 11:47
最近在学习STL语言,每个指令都有个状态字,
BR,CC1,CC0,OV,OS,OR,STA,RLO,/FC,这些状态位都代表什么含意?怎么个用法呢?希望各位老师指点一下,越详细越好!
BR,CC1,CC0,OV,OS,OR,STA,RLO,/FC,这些状态位都代表什么含意?怎么个用法呢?希望各位老师指点一下,越详细越好!
问题ID: 31231 | 提问者:工控123 - 毕业实践员 第4级 | |
最佳答案
●首次检查位:状态字的0位称作首次检查位,如果/FC 位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC前面的斜杠表示对FC取反。
● 逻辑运算结果:状态字的第1位为RLO 位(RLO= “逻辑运算结果”),在二进制逻辑运算中
● 逻辑运算结果:状态字的第1位为RLO 位(RLO= “逻辑运算结果”),在二进制逻辑运算中
用作暂时存储位。比如,一串逻辑指令中的某个指令检查触点的信号状态,并根据布尔逻辑运算规则将检查的结果(状态位)与RLO位进行逻辑门运算,然后逻辑运算结果又存在RLO位中。
● 状态位:状态位(第2位)用以保存被寻址位的值。状态位总是向扫描指令(A,AN,O,…)或写指令(=,S,R,)显示寻址位的状态(对于写指令,保存的寻址位状态是本条写指令执行后的该寻址位的状态)。
● OR位:在用指令OR执行或逻辑操作之前,执行与逻辑操作的时候,就需要用到OR这一状态位。OR位表示先前执行的与逻辑操作产生的值为“1”,于是,逻辑操作或的执行结果就已被确定为“1”。
● OV位:溢出表示算术或比较指令执行时出现了错误。根据所执行的算术或逻辑指令结果对该位进行设置。
● OS位:溢出存储位是与OV位一起被置位的,而且在更新算术指令之后,它能够保持这种状态,也就是说,它的状态不会由于下一个算术指令的结果而改变。 这样,即使是在程序的后面部分,也还有机会判断数字区域是否溢出或者指令是否含有无效实数。OS位只有通过如下这些命令进行复位:JOS(若OS = 1,则跳转)命令,块调用和块结束命令。
● 状态位:状态位(第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;如果
• 算术指令结果
• 比较指令结果
• 字逻辑指令
• 在移位功能中,移出位相关信息。
可以用以下指令来检查条件代码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位未使用。
ENO位也为1。在用户编写的FB/FC程序中,应该对BR位进行管理,功能块正确执行后,使BR位为1,否则使其为0。使用SAVE指令将RLO存入BR中,从而达到管理BR位目的。
状态字的9-15位未使用。
回答者: yhk - 初级工程师 第9级 2009-2-5 11:45
提问者对于答案的评价:
很详细,非常感谢!
30天内的投票结果: 好50% (0) 不好 50% (0)
其他回答
楼上的 已经详细的解释了 状态字的意义
他说的很对
他说的很对
我想说的是 你对状态字的认识有一定的误区
不是“每个指令都有状态字”
状态字 和地址寄存器等一样,是CPU 里面的一个区域 大小是16位 就是一个字 ;我们给这个区域取名位状态字 ,各个位的意思如楼上所说;
不是“每个指令都有状态字”
状态字 和地址寄存器等一样,是CPU 里面的一个区域 大小是16位 就是一个字 ;我们给这个区域取名位状态字 ,各个位的意思如楼上所说;
而 指令的执行结果 受到状态字的影响,
并且指令也会影响到状态字,即修改状态字;
并且指令也会影响到状态字,即修改状态字;
回答者: sqzth - 中级技术员 第6级 2009-2-5 12:02
好多指令执行完后的状态字,你可以不用理会的,要的时候才去捡回来
回答者: Youder - 毕业实践员 第4级 2009-2-5 12:09
要想得到非手册解释,就到300论坛里搜索,300论坛里有更好的解释,讨论的次数更多。
回答者: LaoHuai - 高级工程师 第11级 2009-2-5 13:09
看起来是很简单!但应用起来就麻烦了!
回答者: 轻轻飞 - 顶级工程师 第12级 2009-2-5 13:25
状态字的编程较复杂,感觉常用的是RLO与BR位的操作
回答者: 实在 - 高级技术员 第7级 2009-2-5 13:57
学习了。
回答者: yanjiuximenzi - 初级技术员 第5级 2009-2-5 21:11
Step 7里就有帮助,非常清楚
SIEMENS STEP7 编程状态字的作用定义
状态字用于表示CPU执行指令时所具有的状态。一些指令是否执行或以何方式执行可能取决于状态字中的某些位;执行指令时也可能改变状态字中的某些位,也能在位逻辑指令或字逻辑指令中访问并检测他们。状态字的结构如下:
Bit: 31… 8 7 6 5 4 3 2 1 0
BR | CC1 | CC0 | OV | OS | OR | STA | RLO | /FC | |
(1) 首位检测位(/FC)
状态字的位0称为首位检测位。若位的状态为0,则表明一个梯形逻辑网络的开始,或指令为逻辑串的第一条指令。CPU对逻辑串第一条指令的检测(称为首位检测)产生的结果直接保存在状态字的RLO位中,经过首次检测存放在RLO中的0或1被称为首位检测结果。位在逻辑串的开始时总是0,在逻辑串指令执行过程中位为1,输出指令或与逻辑运算有关的转移指令(表示一个逻辑串结束的指令)将清0。
(2) 逻辑操作结果(RLO)
状态字的位1称为逻辑操作结果RLO(Result of Logic Operation)。该位存储逻辑指令或算术比较指令的结果。在逻辑串中,RLO位的状态能够表示有关信号流的信息。RLO的状态为1,表示有信号流(通);为0,表示无信号流(断)。可用RLO触发跳转指令。
(3) 状态位(STA)
状态字的位2称为状态位。状态位不能用指令检测,它只是在程序测试中被CPU解释并使用。如果一条指令是对存储区操作的位逻辑指令,则无论是对该位的读或写操作,STA总是与该位的值取得一致;对不访问存储区的位逻辑指令来说,STA位没有意义,此时它总被置为1。
初始条件:M1.1=0 M1.2=1 M1.3=0 | ||
程序 | 状态字 | 解释 |
A M 1.1 | 0_0000_0001 | BIT0=1表示指令开始执行,初始/FC为0,当程序执行时为1;BIT1=0,由于A M1.1=0,A M 1.1必然运行结果为0,即RLO为0,故BIT1=0;BIT2=0表示存储的位M1.1为0。 |
A M 1.2 | 0_0000_0101 | BIT0=1表示指令正在执行;BIT1=0,由于A M1.1=0, A M1.2=1,运行结果为1,即RLO为0;BIT2=1表示存储的位M1.2为0。 |
AN M 1.3 | 0_0000_0001 | BIT0=1表示指令正在执行;BIT1=0,由于A M1.1=0, A M1.2=1,A M1.3=0,运行结果为0,即RLO为0;BIT2=1表示存储的位M1.2为0。 |
= M 1.4 | 0_0000_0000 | BIT0=0表示指令执行结束;BIT1=0,由于A M1.1=0, A M1.2=1,A M1.3=0,= M 1.4,运行结果为0,即RLO为0;BIT2=1表示存储的位M1.4为0。 |
初始条件:M1.1=1 M1.2=1 M1.3=0 | ||
程序 | 状态字 | 解释 |
A M 1.1 | 0_0000_0111 | BIT0=1表示指令开始执行,初始/FC为0,当程序执行时为1;BIT1=1,由于A M1.1=1,A M 1.1必然运行结果为1,即RLO为1,故BIT1=1;BIT2=1表示存储的位M1.1为1。 |
A M 1.2 | 0_0000_0111 | BIT0=1表示指令正在执行;BIT1=1,由于A M1.1=1, A M1.2=1,运行结果为1,即RLO为1;BIT2=1表示存储的位M1.2为0。 |
AN M 1.3 | 0_0000_0011 | BIT0=1表示指令正在执行;BIT1=0,由于A M1.1=1, A M1.2=1,A M1.3=0,运行结果为1,即RLO为1;BIT2=1表示存储的位M1.2为0。 |
= M 1.4 | 0_0000_0110 | BIT0=0表示指令执行结束;BIT1=0,由于A M1.1=1, A M1.2=1,A M1.3=0,= M 1.4,运行结果为1,即RLO为1;BIT2=1表示存储的位M1.4为1。 |
(4) os是什么意思衣服 或位(OR)
状态字的位3称为或位(OR)。在先逻辑“与”后逻辑“或”的逻辑串中,OR位暂存逻辑“与”的操作结果,以便进行后面的逻辑“或”运算。其它指令将OR位清0。
初始条件:M1.1=1 M1.2=1 M1.3=0 | ||
程序 | 状态字 | 解释 |
A M 1.1 | 0_0000_0111 | BIT0=1表示指令开始执行,初始/FC为0,当程序执行时为1;BIT1=1,由于A M1.1=1,A M 1.1必然运行结果为1,即RLO为1,故BIT1=1;BIT2=1表示存储的位M1.1为1。 |
A M 1.2 | 0_0000_0111 | BIT0=1表示指令正在执行;BIT1=1,由于A M1.1=1, A M1.2=1,运行结果为1,即RLO为1;BIT2=1表示存储的位M1.2为0。 |
O | 0_0000_1111 | 如果O指令前M1.1,M1.2“与”结果1,则OR位1 |
AN M 1.3 | 0_0000_1011 | BIT0=1表示指令正在执行;BIT1=0,由于A M1.1=1, A M1.2=1,A M1.3=0,运行结果为1,即RLO为1;BIT2=1表示存储的位M1.2为0;BIT3=0,O的结果。 |
= M 1.4 | 0_0000_0110 | BIT0=0表示指令执行结束;BIT1=0,由于A M1.1=1, A M1.2=1,A M1.3=0,= M 1.4,运行结果为1,即RLO为1;BIT2=1表示存储的位M1.4为1;BIT3=1,O结束。 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论