状态字寄存器是一个 16 位寄存器。 其结构如下:
从上表可以看出,位 0-8 有自己的含义和用途,位 9-15 是保留位。 状态字的位 0-8 主要用于表示有关指令的状态或结果以及 CPU 执行指令时发生的错误的信息。 FC、RLO、STA、OR 和 BR 是 CPU 用于控制二进制指令操作的状态位。 OS、OV、CC 0 和 CC 1 通常是用于表示数学函数结果的状态位。
状态字的 0 位称为第一个校验位,如果 fc 位的信号状态为“0”,则表示程序将启动一个新的逻辑字符串或新的梯形逻辑网络行的开头。 fc 位在逻辑字符串的开头始终为 0,在逻辑字符串指令执行时 fc 位为 1,当输出指令“=”或与逻辑运算相关的跳转指令(表示表示逻辑字符串结尾的指令)时,fc 被 0 清除。
如果看上图,标记表示逻辑字符串正在执行中,因此 fc 位为 1;
如果看上图,标记表示当输出指令“=”或与逻辑运算相关的跳转指令(指示逻辑字符串结尾的指令)将被 fc 清除为 0 时,程序将启动一个新的逻辑字符串或表示梯形逻辑网络新行的开始。
状态字的第一位数字是RLO位,是Result of Logic Operation的缩写。 此位存储逻辑指令或算术比较指令的结果。 例如,一串逻辑指令中的一条指令检查触点的信号状态,并根据布尔逻辑运算规则对RLO位的检查结果(状态位)进行门操作,然后将逻辑运算结果存储在RLO位中。 在逻辑字符串中,RLO 位的状态可以表示有关能量流的信息。 RLO 的状态为 1,表示有能量流(通过);值为 0 表示无容量流(已中断)。
见上图,m00=1,表示能量流可以在这里流动,rlo=1。 它可以流向 m01、m01=0,这里的能量流不能通过,不能继续流向q00 向上。
附言什么是能量流?
在编程软件中,这条绿线是能量流,蓝色虚线表示没有能量流。
状态字的第二位是 STA 状态位。 对存储器执行读取访问的位逻辑指令(A、AN、O、ON、X 或 XN)的状态始终与寻址位的值相同。 可以对内存执行写入访问的逻辑指令(r、s 或 =)的状态与写入位的值或寻址位的值(如果未执行写入操作)相同。 对于不访问内存的位指令,状态位毫无意义。 这些指令将 sta 设置为 1。
上图,m0当 2=1, sta=1, m0当 3=0 时,sta=0。
状态字的位 3 称为 OR 位。 在“前逻辑”和“后逻辑”or的逻辑字符串中,OR位临时存储逻辑“and”的运算结果,以便后续的逻辑“or”运算得以进行。 如果您不确定什么是“第一个和最后一个或”,请参考我之前的文章《西门子PLC STL编程教程(1)——A、AN、O、ON、X、XN的位逻辑指令》。
m1.1=1,m1.2=1,在执行“AND”操作 = 1 后,因此它被保存在 OR 位中。
状态字的第 4 位称为溢出状态保持器。 OS 位的状态与 OV 位的状态密不可分。 当 ov 位设置为 1 时,os 位也设置为 1;当操作系统仍处于维护状态时,OV 被清除为 0。 因此,它保存 ov 位的先前状态,该状态可用于指示在以前的某个命令执行中是否发生了错误。 只有以下命令可以重置操作系统位:jos (jump on os-1);阻止调用指令和阻止结束指令。
状态字的位 5 称为溢出位。 溢出位设置为 1,表示执行算术运算或浮点比较指令时出错(错误:溢出、非法操作、格式不规则)。 如果后续算术运算或浮点比较指令的执行结果正常,则 ov 位将被清零为 0。
见上图,mw100=0,mw102=32000。 mw100+mw102=mw104。此时算术运算正常,没有溢出,ov bit = 0。
当mw100=1000时,mw102=32000。 当 MW100 + MW102 = MW104 = 33000(MW 最大 32767)时,溢出。 因此 ov=1。
状态字的位 7 和位 6 称为条件代码 1 和条件代码 0。 这两个数字组合在一起表示累加器 1 中产生的算术或逻辑运算结果的大小,其中 0;比较指令的执行结果或移位指令的位移状态。 有关详细信息,请参阅下表:
算术运算后的 CCI 和 CCO
字逻辑指令后的比较、移位和循环移位、CC1 和 CCO
br 位(二进制结果位)是状态字的第 8 位,用于将前一个函数的执行结果传递给下一个函数。 下表解释了 br 位的含义并指出了它的用法。