Una de las cosas que hay veces que dejamos de lado cuando empezamos a trabajar y programar con los autómatas es no hacer mucho caso en cómo trabaja el PLC y como es el procesamiento cíclico que realiza el autómata.
Es muy sencillo, pero es conveniente tener las ideas claras desde el principio para luego, por un lado aprovecharnos de ello para poder realizar tareas y por otro, para no llevarnos sorpresas y pensar que hay comportamientos supuestamente anómalos.
El procesamiento cíclico
Una vez arrancado el programa desde cero, se ejecuta el OB100 que lo usaremos para dar valores iniciales ya que sólo se ejecuta una vez.
Puede existir o no. Si existe se ejecuta antes de entrar en modo cíclico.
El modo cíclico funciona de la siguiente forma:
- Se actualizan las salidas.
- Se actualizan las entradas
- Se ejecuta el contenido del OB1
... y vuelta a empezar.
Las salidas físicas y entradas físicas tienen asociadas sendas tablas de salidas y entradas. Cuando se actualizan, lo que hace el PLC es volcar la tabla de salidas sobre las salidas físicas y las entradas físicas se vuelcan sobre la tabla de entradas.
Ojo, porque durante la duración del programa (típicamente entre 1 y 100 ms) aunque las entradas físicas cambien de estado durante el ciclo, estos no serán tenidos en cuenta hasta el ciclo siguiente y se vuelvan a actualizar.
Esto lleva a la siguiente pregunta, si no se actualizan hasta el siguiente ciclo...
... las entradas ¿son una especie de marcas?
Pues sí, son una epecie de marcas y esto hace que si al principio del ciclo del OB1 (después de actualizar la tabla de entradas) forzamos una entrada haciendo esto: SET
= E0.0
Lo que sucederá es que la entrada estará a TRUE para la ejecución en el programa independientemente de qué haga la entrada real. No es recomendable forzar las entradas, pero que sepas que poder, se puede.
Ahora entonces surge la siguiente pregunta ...
¿Se pueden leer las entradas físicas en un momento dado?
La respuesta es Sí. Se pueden leer accediendo a la periferia mediante:
L PEB X, para leer el byte X
L PEW, para leer la palabra X.
L PED, para leer la doble palabra X.
Lo único que no se puede leer es un bit en concreto. Al menos tendremos que leer un byte completo.
Estas lecturas se suelen realizar en los OB cíclicos. Lo interesante es saber la lectura de la entrada en el momento que se ejecuta el OB. No tiene mucho sentido realizar una ejecución cíclica con entradas si luego va a depender del último estado de las entradas que dependen del tiempo de ciclo global.
¿Que hay de las salidas físicas?
Las salidas son igualmente marcas que se vuelcan actualizando las salidas físicas. Pero la actualización de estas salidas se pueden realizar antes forzandolas de forma similar a la lectura de las entradas:
T PAB 0
T PAW 0
T PAD 0
Al igual que en el caso anterior, se deben forzar la salida al menos de byte en byte.
Esta forma de dar las salidas se suelen usar también en OB cíclicos. Por ejemplo, un OB a tiempo muy pequeño en el que se lea la entrada física y se ejecuta la salida sobre las salidas físicas.
Los temporizadores
Una peculiaridad es que los temporizadores de S5 trabajan independientemente del tiempo de ciclo. Trabajan en paralelo y darán su estado instantáneamente y por tanto pueden cambiar de estado en mitad de la ejecución del OB1. Esto normalmente no es preocupante, pero hay que tenerlo en cuenta si la parte del programa donde se activa y donde se lee el estado dista mucho con tiempos de ciclo muy altos. Normalmente no dará problemas, pero podría ya que en el mismo ciclo, el temporizador tendría a la hora de ejecutar el código dos estados diferentes.
Con los temporizadores IEC la cosa cambia ya que son temporizadores de software y no habrá problemas comentados anteriormente. Tomaran el valor cuando se ejecute el código y se chequee su estado.
Los OB cíclicos
Los OB de ejecución cíclicos (por ejemplo el OB35) se ejecutan a tiempo fijo. No dependen de la ejecución del OB1 ya que de hecho, el OB1 pausa su ejecución para ejecutar este OB. Esto hace que el tiempo de ciclo del OB1 si normalmente ya es variable dependiendo del programa, la inclusión de un OB cíclico lo hace aún más variable ya que se alargará cuando se pause para ejecutar el OB35 por ejemplo, cosa que en general, no se hará en todos los ciclos de scan del PLC (el OB35 puede estarse ejecutando cada 100ms y el OB1 ejecutánsose de media cada 20ms haciendo que 1 de cada 5 se alargue para ejecutar el OB35).Referencias:




