Fecha y hora en Step 7

Fecha y hora en Step 7

Controlar la fecha y hora es un tema casi recurrente en la programación en general: bases de datos, hojas de cálculo, páginas web... y cómo no, PLC de Siemens.

Fecha y hora en Step 7

En esta entrada, he querido poner fecha y hora en Step 7 y no en TIA portal, porque quiero que veas, cómo ha mejorado este tema con la nueva versión de Siemens. Quiero enseñarte ambas formas de acceder a la lectura del reloj del PLC.

Y es que ha cambiado tanto la forma en la que se accede al reloj, que merece la pena echarle un vistazo en cómo deberías hacerlo. La verdad

Acceso al reloj del PLC en Step 7

 En step 7 tradicional, para acceder al reloj, y poder manejar su información tenemos que realizar dos pasos:

  • Leer el reloj del PLC y volcarlo a una variable tipo DATE_AND_TIME
  • Desgranar esta iformación para acceder al año, mes, día, hora etc...

Es decir, vamos a usar en primer lugar el SFC1 "Read Clock" para recuperar la fecha y hora en una variable local DATE_AND_TIME llamada en este caso #FechaYHora:

Fecha y hora en Step 7

Por tanto, la variable #FechaYHora contendrá toda la información respecto a la fecha de calendario y hora actual que tiene el reloj del PLC de Siemens.

Ahora bien ¿cómo podemos acceder a esa información para obtener cada dato (mes, día, minutos...) por separado?

La información está dentro de la propia variable con la siguiente estructura de datos:

Fecha y hora en Step 7 - 2

Los bytes 0 a 7 harán referencia a cada dato parcial de la fecha y hora, así, y teniendo en cuenta que hemos volcado la información en una variable local, deberemos leer cada byte por separado para obtener el año, mes, día etc.

Tenemos en cuenta la forma en la que hemos declarado las variables:

Fecha y hora en Step 7 - 5

Además, ojo, porque la información viene representada en formato BCD, por lo que si queremos obtener esta información en decimal, deberemos realizar una conversión a este nuevo formato:

Fecha y hora en Step 7 - 3

Así iremos haciendo con todos los valores en función del dato que queramos obtener.

Solo hay un dato que es un poco más complejo de obtener, que es el día de la semana.

Como puedes ver, en el último byte tenemos 4bits dedicados a parte de los milisegundos, y 4 bits (los más bajos), para leer el día de la semana.

Para solucionar este punto, lo que haremos será una máscara para obtener esta información:

Fecha y hora en Step 7 - 4

La idea es quedarnos con el contenido de los 4 bits más bajos (menos significativos) del contenido del último byte, y transformarlo en un entero que nos dará de 1 a 7, el día de la semana siendo 1, el domingo.

Como ves, es bastante laboriosa la forma de obtener los diferentes valores del reloj en Step 7 si lo comparamos con TIA Portal, como vamos a ver a continuación.

Acceso al reloj del PLC en TIA Portal

Una de los avances en TIA Portal es el tratamiento del reloj del sistema. Al margen de poder acceder a la hora de sistema o a la hora local (por si tuviera que usar ambas), la gestión de la información es mucho más sencilla.

Así, ahora tenemos un tipo de datos el DTL, el cual tiene incluida toda la información ya desgranada:Fecha y hora en Step 7 -6

Como ves, puedes una vez leído el reloj del PLC, acceder de forma parcial a cualquiera de los datos de una forma inmediata.

Fecha y hora en Step 7 -7

A modo de simple ejemplo vemos como, una vez leída la hora, podemos acceder a la hora y cargarlo a una segunda variable de forma extremadamente sencilla.

Ni que decir tiene, que puedes usar cualquiera de los datos integrados como te interese en cada caso.

¿Qué te ha parecido la fecha y hora en Step 7?

Has podido comprobar la facilidad con la que se accede ahora a los datos en TIA Portal cuando hace referencia a la hora.

¿Sabías que era así?

Comentarios (26)

Jon
Aupa Iñigo, ¿sabes cómo puedo cambiar la fecha del reloj interno de s7?
Iñigo Gútiez
Sí claro, en Step 7 tradicional, en el editor de código, en Sistema Destino-> Ajustar Hora En TIA Portal, en online y diagnóstico, funciones, ajustar la hora. Saludos!
David
Hola Iñigo, Como generarías un pulso con frecuencia semanal, quincenal, mensual...etc? Para arrancar una secuencia
Juan
Hola Iñigo, Me gustaría sacar en formato Char la decena y la unidad por separado, por ejemplo del dato de la Hora. Partiendo de un Byte donde tengo la Hora, (DB_.DBB__), obtengo en una var. temporal tipo Int mediante 2 funciones "Bite_to_byte" : DB_.DBx__.0 -----> #Hora_decena DB_.DBx__.4 -----> #Hora_unidad DB_.DBx__.1 DB_.DBx__.5 DB_.DBx__.2 DB_.DBx__.6 DB_.DBx__.3 DB_.DBx__.7 El problema es que tanto #Hora_decena como #Hora_unidad al convertirlo con un Move a otra var. temporal tipo Char, me da el resultado bien de la decena y la unidad pero con un 0 delante cada dato, es decir, obtengo un char con 2 dígitos. (Ej. 13h --> 01 + 03). ¿ como podría sacar tan solo 1 dígito ? Saludos y gracias!
Iñigo Gútiez
Entiendo lo que quieres hacer, pero un move, es una transferencia, no una conversión. Como entenderás, en un char, por su propia definición, no puede ser un 12, por ejemplo, porque serían dos caracteres, y no uno. No estás convirtiendo nada. Para convertir a char, tienes que sumar 48 unidades, ya que tienes que jugar en el codigo ASCII. Es decir, un "1" en ASCII es el código 49. Por tanto, si al 1 en entero, les sumas 48 unidades, obtienes, ahora sí, en formato CHAR, un 1 según el código ASCII. Saludos
Wilfredo de la Guardia Rodríguez
Hola Iñigo. Estoy haciendo un FB en SCL, para un S7-300 y necesito captar la fecha y hora. ¿Me pudieras ayudar?. Gracias, Wilfredo
Iñigo Gútiez
Tendrás que hacer la llamada a la función de lectura del reloj igual que se hace en cualquiera de los lenguajes. No me has dicho en que plataforma estas programando, ni PLC..
Hernan
Hola lñigo estoy programando a través de las sfc01 y sfc0 para sincronizar la hora del poco no el HDMI y así no se pierda cuando se le quita la energía el detalles es que como estoy trabajando en Ladder cuando ingreso la variable en el bloque de rd_clk o sfc01me sale sintaxis error , sabes qué tipo de variable tendría que poner en la salida ya que pongo db15:dbx100 por ejemplo y me sale sintaxis errónea
Iñigo Gútiez
Tienes que poner una variable date_and_time, o un puntero ya que el reloj devuelve 8 bytes.
javier
Hola, ¿como estais?. Me llamo Javier y vivo en Madrid. Tengo una duda con el tema del reloj con el S7-1200 y es el siguiente: Por ejemplo son ahora las 16:00h en horario de invierno en la zona horaria UTC +1 (Paris;Roma, Madrid,etc), bien... El PLC lo configuro con la misma zona horaria y con el horario de verano activo. Me voy a "Online y diagnostico" y configuro la hora a las 16:00h (sin adoptar PG/PC, lo hago manualmente) y creo dos registros para ver la hora local y la de sistema y aqui creo que viene el problema o duda......cuando veo la hora local me marca las 17:00h y la de sistema las 16:00h. ¿Esto es correcto? y si no lo es...¿que estoy haciendo mal? Porque en todos los videos que veo, al configurar la hora del PLC sale esa misma hora como local y la de sistema 1h menos, a mi es al reves. Muchas gracias a todos, si pudieseis echarme una mano os lo agradeceria. Saludos.
Iñigo Gútiez
Hola Javier. Yo lo veo bien. La hora del sistema se supone que es UTC+0, y luego la local, la que corresponda, por ejemplo UTC+1, por tanto lo lógico es que la local tenga una hora más. La idea de esta doble hora es que tengas PLC en diferentes husos horarios con la misma hora, por poner un ejemplo de uso. Todos tienen la misma hora de sistema, pero la hora local, cambia en función de dónde esté el PLC. Saludos
JESUS
Hola Íñigo; Tienes este ejemplo de acceso al reloj para el S7-300 con Tia Portal en vez del Step 7? No sé si cambiará mucho. Y cómo lo vemos en un HMI? Muchas gracias. Saludos!
Iñigo Gútiez
En TIA portal está chupado ya que te lo da en DTL, que es una estructura con todo bien separadito. Luego para mostrarlo en el HMI es inmediato ya que es un tipo de dato que permite mostrarse directamente en TIA Portal. Si solo quieres la hora, pues tendrás que usar las funciones de fecha y hora para quedarte solo con la fecha, o solo con la hora.
JESUS
Pero con eso es con el 1200, pero con el 300 también? Muchas gracias.
Iñigo Gútiez
No, en TIA Portal con el S7-300/400 lo programas igual que si fuera en S7 tradicional. Solo cambia la apariencia del interfaz, pero las prestaciones y funcionalidades, son las mismas.
JESUS
Ok, muchas gracias, a ver si me funciona.
José trillo
Buenas noches. Sigo mucho tus vídeos y son geniales. Enhorabuena!!!! Una pregunta... Los 8 byte están en código BCD, ok!!! Entonces, como con un solo byte en código BCD es capaz de obtener un entero de 4 dígitos??? Hablo del año, ya que por dígito decimal necesita 4 bit en BCD.
JOSE TRILLO
perdon... queria decir para un degito decimal en BCD necesita 4 bit
Julio cesar
Hola buen dia estoy buscando si existe algun FC para la conversion de dias a dias julianos sabras si ya existe algo asi?
Iñigo Gútiez
No me suena, la verdad. No lo he usado nunca.
Henry N.
Saludos Iñigo, muy buenos tus videos. Queria preguntar, si hay manera de crear una variable Date_and_time y almacenar el contenido de la Fecha y hora tal cual se lee en el SFC1, que dicha variable sea parte de una structura de arreglo y luego poder mover el contenido de la variable a traves de las posiciones del arreglo.
Iñigo Gútiez
Echa un vistazo a esta entrada: https://programacionsiemens.com/como-crear-una-variable-dtl-en-la-serie-300-en-tia-portal/
Adrian Poblete
Hola Iñigo que tal mira tengo una CPU S7-1500 a la cual le cambio la hora y zona horaria, tanto por hardware desde tia portal y desde el display que trae el plc ahí ningun problema, sin embargo transcurrido un tiempo se cambia la hora a otro horario y no al de mi pais He probado varias veces y aun asi vuelve a cambiarse la hora
Iñigo Gútiez
uff, lo siento, pero no sabría decirte cual es el problema.
Eliecer Mendez Mendez
Perfecto, me ha servido bastante.
brayan socarraz
saludos, como puedo activar un bit con la hora exacta en step 7 en kop gracias de ante mano