Hace unas semanas uno de los lectores me sugirió que hablara un poco de la palabra de estado en Step 7... pues aquí estamos.
Tal vez esperabas que empezáramos con los temporizadores, pero se va a retrasar un poco ya que para la semana que viene probablemente hagamos otro ejemplo práctico (como ves, el curso tiene vida propia).
Como vas a ver, tampoco hay un vídeo acompañando esta semana. Es sólo lectura. Un rollo. Pero está bien al menos como cultura general aunque a efectos prácticos hay poco que rascar más allá de un par de cosillas.
La palabra de estado en step 7 ¿qué es?
Lo primero que hay que decir es que la palabra de estado en step 7 es un registro donde se almacenan una serie de bits sobre el procesamiento y estado de las operaciones que están teniendo lugar.
Para empezar, mal empezamos llamándola palabra... ¿por qué? Pues porque son 9 bits y no 16, pero se llama así, y tampoco nos vamos a rasgar las vestiduras ¿no? Entiendo que los 7 restantes los tendrán a buen recaudo y se llama palabra porque al ser 9 no lo podían hacer con un byte. Sin más.
Cada bit dentro de la palabra tiene una función para mantener una trazabilidad de qué está sucediendo, desde resultados de álgebra booleana hasta si ha sucedido un overflow.
Los bits de la palabra de estado
Los Ocean's Nine son estos:
- Bit 0 - /FC
- Bit 1 - RLO
- Bit 2 - STA
- Bit 3 - OR
- Bit 4 - OS
- Bit 5 - OV
- Bit 6 - CC1
- Bit 7 - CC0
- Bit 8 - BR
Vale, unos nombres muy chulos, pero quitando al RLO y el STA, los demás como que..
Sí, sí... ya voy. Repasemos para que vale cada uno.
Bit 0 -/FC
Este bit es el que almacena si la siguiente instrucción de la una combinación boolenana va a ser la primera o no.
- Valor 0: la siguiente instrucción va a ser procesada como la primrera instrucción. Ya lo vimos anteriormente con las operaciones de cierre de consulta.
- Valor 1: Es que la combinatoria está en marcha
Así, cuando se haga un set, restet o una asignación (=) la señal se pondrá a cero. Una vez después de puesta a cero si se hace un U o un OR (por ejemplo), la señal se pondrá a 1 comenzando a realizar la combinatoria.
Bit 1 - RLO.
Espero que no tenga que sacar la vara de avellano para castigar a aquellos que aún pregunten que es el RLO. Me niego a explicarlo.
Bit 2 - STA
Como bien sabes, es el estado de la dirección booleana de la memoria. Si está a uno es que la marca o entrada está a uno, si está a cero, pues al revés.
Bit 3 - OR
Sirve para conocer el valor de la combinatoria de un AND antes de hacer un OR.
Recuerda que puedes hacer una combinatoria de este pelo:
U E0.0
O
U E1.0
U E2.0
= A1.0
Vale. Pues lo que hace este bit es almacenar la combinatoria del AND entre la E1.0 y la E2.0. Se guarda el resultado intermedio en este bit antes de acometer el OR de este resultado con la E0.0.
Bit 4 y 5 - OS y OV
OS almacena que ha habido un overflow. Cuando hay un OV (overflow) porque has dividido por cero o porque has sumado dos enteros que se salen de los 32768 la señal de OV y OS se ponen a 1. Luego el OV puede desaparecer porque la siguiente operación sea correcta, pero el OS queda con valor uno hasta que se realice un SPS ( Salta si OS=1), una llamada a otro bloque, o final de bloque.
Así puede que hagas una operación matemática que da OV. Luego puedes hacer un SPO (salta si OV=1) o un SPS (salta si OS=1) para tratar el error y así pones a cero el bit 4 (el 5 se quitará el solito cuando haya una nueva operación correcta).
Bit 6 y 7 - CCO y CC1
Son bits usados para las operaciones de comparación, matemáticas, de giro...
Instrucciones de comparación
| CC 1 | CC 0 | |
| 0 | 0 | ACCU 2 = ACCU 1 |
| 0 | 1 | ACCU 2 < ACCU 1 |
| 1 | 0 | ACCU 2 > ACCU 1 |
| 1 | 1 | Desordenadas. Solo para coma flotante. |
Operaciones matemáticas con OV
| CC 1 | CC 0 | |
| 0 | 0 | Resultado = 0 |
| 0 | 1 | Resultado < 0 |
| 1 | 0 | Resultado > 0 |
Operaciones matemáticas enteras con OV
| CC 1 | CC 0 | |
| 0 | 0 | Rango negativo de OV en ADD_I y ADD_DI |
| 0 | 1 | Rangi negativo de OB en MUL_I y MUL_DI |
| 1 | 0 | Rango negativo de OV en ADD_I, ADD_DI, SUB_I, y SUB_DI |
| 1 | 1 | División por 0 en DIV_I, DIV_DI, y MOD_DI |
Instrucciones en punto flotante con Overflow
| CC 1 | CC 0 | |
| 0 | 0 | Underflow |
| 0 | 1 | Rango negativo de OV |
| 1 | 0 | Rango positivo de OV |
| 1 | 1 | Número de coma flotante no válido |
Instrucciones de giro y salto
| CC 1 | CC 0 | |
| 0 | 0 | Bit saliente estaba a cero |
| 1 | 0 | Bit saliente estaba a uno |
Instrucciones lógicas
| CC 1 | CC 0 | |
| 0 | 0 | Resultado = 0 |
| 1 | 0 | Resultado <> 0 |
Bit 8 - BR
Proviene de Binary Result y es el resultado de las operaciones binarias. Cuando el BR está a uno, activa la salida de ENO habilitando en bloques concatenados que se ejecute el siguiente bloque.
Las operaciones SAVE, SPB y SPBB ponen a uno el BR (más información aquí).
¿Qué te ha parecido esto de la palabra de estado?
Espero que no te hayas dormido y hayas llegado hasta aquí.
Como ves muchas de las variables son poco usadas ( o nada) pero está bien saber su significado y así cuando veamos la palabra de estado en la ayuda de Step 7 sepamos al menos de qué va.
Como siempre recordarte una vez más que comentes si te es útil este tipo de entradas.
Fuente en inglés: PLCDev.com
Comentarios (8)