lunes, 30 de marzo de 2015

El reloj del Siemens S7 1200

El reloj del Siemens S7 1200.

Con el reloj del autómata podemos hacer bastantes cosas. Lo primero que tenemos que aprender es a ponerlo en hora, para seguir, con diferencias de tiempo, contadores de funcionamiento y cambios de horarios.

Tipos de datos de fecha y hora que manejamos.

Tipo de datoTamañoRangoEjemplos
Time32bits
T#-24d_20h_31m_23s_648ms a
T#24d_20h_31m_23s_647ms
Almacenado como: -2.147.483.648 ms hasta
+2.147.483.647 ms
T#5m_30s
T#1d_2h_15m_30s_45ms
TIME#10d20h30m20s630ms
500h10000ms
10d20h30m20s630ms
Date16bitsD#1990-1-1 a D#2168-12-31
D#2009-12-31
DATE#2009-12-31
2009-12-31
Hora32bitsTOD#0:0:0.0 a TOD#23:59:59.999
TOD#10:20:30.400
TIME_OF_DAY#10:20:30.400
23:10:1
DTL12bits
Mín.: DTL#1970-01-01-00:00:00.0
Máx.: DTL#2554-12-31-23:59:59.999 999 999
DTL#2008-12-16-20:30:20.250
Creo que con esta tabla quedan muchas cosas claras de como utilizar los datos del reloj y sus posibles usos.

Falta añadir, que el tipo de dato DTL solo es posible su utilización a través de la programación en SCL, no es posible su utilización ni en FOB ni KOP. Si queremos poner el reloj en hora mediante un programa este tendrá que estar escrito en SCL, la otra opción es a través de TIAPortal en la configuración de la CPU.


Para terminar y que no decaiga la moral, si queremos trabajar con el reloj en hora local lo tendremos que hacer con la instrucción RD_LOC, que utiliza la información de la zona horaria (GMT+1) para proporcionar la hora correcta de nuestro país. La instrucción RD_SYS proporciona la hora del sistema, esto quiere decir que GMT+0 siempre. Estas instrucciones solo se pueden utilizar en programación SCL.

Leer la hora del reloj.

Para hacer una lectura del reloj podemos usar dos instrucciones RD_SYS y RD_LOC, ya explicado con anterioridad la diferencia entre las dos, ambas funcionan igual salvo el tema de la zona horaria RD_SYS no la usa y RD_LOC si. He hecho un pequeño programa que podéis descargar, esta escrito en SCL y a continuación paso a explicar.


El programa a sido escrito dentro de una FC. La primera linea carga en la variable “Terror” el dato de tipo INT que devuelve la función RD_LOC, este dato es una indicación del funcionamiento del reloj, si su valor es cero quiere decir que los datos presentes a la salida de la función son validos, en dicha salida tendremos un tipo de dato DTL. Posteriormente comprobamos mediante una sentencia IF-THEN que los datos son correctos, si es así activamos la salida binaria de la FC “HoraOK” y la descomposición del tipo de dato DTL en tipos de dato Usint y Time_Of_Day o TOD. en la que las primeras tendremos una salida en la FC para la hora, minuto, día, mes y año, todas por separado y en la segunda el tipo de dato TOD con hora, minuto y segundo todo en una misma salida.
Si la variable “Terror” es distinta del valor “0” es decir se a producido un error en el reloj la salida “HoraOK” vale “0” al igual que el resto de salidas.

Listado de variables.



Fijaros en el detalle HoraDeCPU es una variable de tipo DTL que en realidad es una variable de tipo compuesta.

Enlace de descarga del Programa:
Ejercicio manejo del reloj 1

Nota: en la explicación digo que el programa se ha hecho sobre una FB pero el ejercicio lo he modificado sobre el original y esta hecho sobre una FC.

Pongamos el reloj en hora.

Como he escrito con anterioridad hay dos formas de poner el reloj en hora, una a través de la instrucción WR_SYS que comentare mas a delante, la otra mediante la configuración de la CPU, para ello iremos al, árbol de proyecto>> Dispositivo CPU >> Online y Diagnostico >> Establecer Conexión >> Desplegar Funciones >> Ajustar hora >> Aplicar.

Mediante la función WR_SYS, ajustamos solamente la hora y fecha del sistema, recordad que hora del sistema, no es la hora local; (H. Sistema GMT+0 y H. Local GMT+n).

Al igual que en la lectura del reloj empleamos una variable DTL, para escribir haremos lo mismo. Como ya sabemos el tipo de variable DTL, es una variable compuesta y no es necesario escribir en todo los términos, por ejemplo solo queremos escribir los que hacen referencia a la hora, minuto y segundo e ignorar los de la fecha, esto se puede hacer.

Descargar desde el enlace:
Ejercicio del manejo del reloj 2