martes, 14 de julio de 2015

Como crear un programa en SCL

Como crear un programa en SCL.
Cosas a tener en cuenta si queremos que nuestro programa no genere fallos de ciclo.

Lo primero que tengo que deciros, es que la ejecución se realiza de forma lineal, linea por linea, es decir y para dejarlo de una manera muy clara, lee el programa en SCL igual que si estuviese escrito en FOP o KOP, no como un programa normal escrito en un lenguaje de programación tipo C+ o VB. Ademas tenemos que tener cuidado con los saltos dentro del programa por que se pueden quedar variables sin cambiar de estado por culpa del salto.

Voy a poneros un ejemplo, imaginaros que tenemos una variable tipo booleana, que llamaremos Var
esta variable si esta a 1 activa una temporización, pero antes de llegar a la linea que la activa tenemos una instrucción IF, que en función del valor de esa variable u otra puede provocar un salto a otra linea del programa sin pasar por la linea que activa la temporización. Que es lo que ocurre? Pues que aunque Var halla cambiado de valor, al haberse producido el salto, en esa linea en concreto donde se activa la temporización Var sigue valiendo 1.

Tened esto en cuenta, por que en otros lenguajes de programación esto no ocurre y si estáis acostumbrados a que sea así puede traeros problemas, a la hora de poner el programa en funcionamiento.

El sistema operativo del autómata realiza una lectura cíclica de nuestro programa ese ciclo se puede controlar su tiempo de duración (mínimo 150ms y máximo 6000ms) esto se hace así para evitar bloqueos del programa si trascurrido el tiempo máximo que le hemos configurado a la CPU el sistema operativo genera una alarma que hace que el sistema operativo busque la OB 80 es la encargada de registrar el fallo que ha realizado el programa y evitar el bloqueo de la CPU pero trascurridos unos pocos ciclos mas si el fallo persiste acaba bloqueándo la CPU.

Os cuento esto por que ciertas instrucciones pueden provocar fallos de ciclo si no son usadas correctamente.

Instrucciones FOR NEXT, WHILE DO, REPEAT-UNTIL.

Estas instrucciones pueden provocar fallos de ciclo y consecuentemente bloqueo de la CPU sino se usan correctamente, que quiere decir esto?
Voy a poneros un ejemplo, ya que en el manual de programación del S7 1200 trae a bastante confusión debido pienso yo a una mala traducción que se ha podido hacer del original.

WHILE (#RiegoDomingo = TRUE)DO
IF (#EHoraCalendario.HOUR >= #IRDomingo AND #EHoraCalendario.HOUR <= (#IRDomingo + #TRDomingo)) THEN #Sector1 := true;#BombaRiego:= true;
ELSIF (#EHoraCalendario.HOUR > (#IRDomingo + #TRDomingo)) THEN #BombaRiego := FALSE; #Sector1 := false;
END_IF;
#VisInicioReg := #IRDomingo; #VisiTiempoReg := #TRDomingo;
EXIT;
END_WHILE;

Aquí os pongo un ejemplo con una instrucción WHILE, fijaros bien donde esta situada la instrucción EXIT. Por que esta situada ahí y para que sirve?.

Si olvidamos de poner la instrucción EXIT lo que ocurrirá es que si la condición de WHILE es cierta se ejecuta de forma permanente esta rutina hasta que salta la alarma de tiempo de ciclo excedido. EXIT lo que hace es que una vez ejecutada la rutina el programa continué su marcha por eso se coloca al final de la rutina.


En las de mas instrucciones hay que hacer lo mismo. 

No hay comentarios:

Publicar un comentario