¿Cómo podemos ayudar?

Print

¿Cómo gestionar automáticamente el horario de verano en la HMI mediante una macro?

 

En este post, le mostraremos cómo gestionar automáticamente el horario de verano en el HMI mediante una macro. El cambio de hora se aplicó por primera vez en 1916. Desde 2002, el cambio de hora se realiza de manera uniforme en todos los Estados miembros de la Unión Europea:

  • el cambio al horario de verano tiene lugar la noche del último sábado de marzo
  • el cambio al horario de invierno tiene lugar la noche del último sábado de octubre

Como recordatorio, los países de la UE se dividen actualmente en tres husos horarios:

  • Europa Occidental (GMT): Irlanda y Portugal
  • Europa Central (GMT 1): Alemania, Austria, Bélgica, Croacia, Dinamarca, Eslovaquia, Eslovenia, España, Francia, Hungría, Italia, Luxemburgo, Malta, Países Bajos, Polonia, República Checa y Suecia
  • Europa del Este (GMT 2): Bulgaria, Chipre, Estonia, Finlandia, Grecia, Letonia, Lituania y Rumanía.

Con la herramienta HMI

En el Editor de macros, añada una nueva macro y cópiela. #include "MacroInit.h"
void Macro_main(IN *p)
{
MarcoInit
// Luz del día / Cambio de hora Verano Invierno
// < ! > Llama a este script cada minuto
// El cambio al horario de verano tiene lugar la noche del último sábado de marzo;
// el cambio al horario de invierno tiene lugar la noche del último sábado al domingo de octubre.
int minuto=BCD2BIN(LocalWord[60001]); // Todos están en formato BCD. Convertir en decimal.
int hora=BCD2BIN(LocalWord[60002]);
int día=BCD2BIN(LocalWord[60003]);
int mes=BCD2BIN(LocalWord[60004]);
int dateofweek=BCD2BIN(LocalWord[60006]); // Lunes=1
// El cambio a la hora de VERANO tiene lugar la noche del último sábado de marzo. El domingo a las 03:00:xx am, es 04:00:xx am
if ((month==3) && (day>=25) && (dateofweek==7) && (hour==03) && (minute==00)) // Marzo & 25 o más & Domingo & 03:00 pm ?
{
LocalWord[60002]=4; // Nueva hora
LocalBit[65535]=0; // False=Horario de verano. (Necesario sólo para horario de invierno)
}
// El cambio al horario de INVIERNO tiene lugar la noche del último sábado a domingo de octubre. El domingo a las 03:00:xx am, son las 02:00:xx am
if ((LocalBit[65535]==0) && (month==10) && (day>=25) && (dateofweek==7) && (hour==03) && (minute==00)) // Octubre & 25 o más & Domingo & 03:00 pm ?
{
LocalWord[60002]=2; // Nueva hora
LocalBit[65535]=1; // True=Invierno. Evita un bucle con un cambio infinito cada 3am porque a las 3am, ¡son las 2am!
}
}

Añade la macro en la lista «global Macro» Y establece su frecuencia de ejecución a 60000 ms (1 minuto) para actualizar el reloj cada minuto.

Cómo funciona

Para el horario de verano, el último domingo de marzo, entre las 03:00:00 y las 03:00:59, el script cambiará la hora a 04:00:xx. Los segundos no cambiarán.

Para el horario de invierno, el último domingo de octubre, entre las 03:00:00 y las 03:00:59, el script cambiará la hora a 02:00:xx. Los segundos no cambiarán.

En el Bit LB65535 tienes el estado de este horario de verano: Invierno=1, Verano=0.
Puede reemplazar LB65535 por LB51999 para respaldar el valor(tipos de registro HMI: LB, LW, RWI y registro de retención/guardado)

Puede descargar aquí el proyecto HMI-Tool (V7.0) si desea probarlo.

Véase también Cómo ajustar y sincronizar el reloj del PLC ACE con la HMI mediante una macro