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