Print

Wie kann man die Sommerzeit in der HMI mit einem Makro automatisch verwalten?

 

In diesem Beitrag zeigen wir Ihnen, wie Sie die Sommerzeit in der HMI mithilfe eines Makros automatisch verwalten können.

Die Zeitumstellung wurde erstmals im Jahr 1916 angewendet. Seit 2002 wird die Zeitumstellung in allen Mitgliedsstaaten der Europäischen Union einheitlich durchgeführt:

  • die Umstellung auf die Sommerzeit erfolgt in der Nacht des letzten Samstags im März
  • die Umstellung auf die Winterzeit erfolgt in der Nacht zum letzten Samstag im Oktober

Zur Erinnerung: Die EU-Länder sind derzeit in drei Zeitzonen eingeteilt:

  • Westeuropa (GMT): Irland und Portugal
  • Mitteleuropa (GMT+1): Belgien, Dänemark, Deutschland, Frankreich, Italien, Kroatien, Luxemburg, Malta, Niederlande, Österreich, Polen, Schweden, Slowakei, Slowenien, Spanien, Tschechische Republik und Ungarn
  • Osteuropa (GMT+2): Bulgarien, Zypern, Estland, Finnland, Griechenland, Lettland, Litauen und Rumänien.

Mit HMI-Tool

Fügen Sie im Makro-Editor ein neues Makro hinzu und kopieren es.

#include "MacroInit.h"
void Macro_main(IN *p)
{
MarcoInit
// Daylight / Time change Summer Winter
// < ! > Call this script every minute
// The changeover to summer time takes place on the night of the last Saturday in March;
// the changeover to winter time takes place on the night of the last Saturday to Sunday in October.
int minute=BCD2BIN(LocalWord[60001]); // All are in BCD format. Convert in decimal.
int hour=BCD2BIN(LocalWord[60002]);
int day=BCD2BIN(LocalWord[60003]);
int month=BCD2BIN(LocalWord[60004]);
int dateofweek=BCD2BIN(LocalWord[60006]); // Monday=1
// The changeover to SUMMER time takes place on the night of the last Saturday in March. Sunday morning at 03:00:xx am, it's 04:00:xx am
if ((month==3) && (day>=25) && (dateofweek==7) && (hour==03) && (minute==00)) // March & 25th or more & Sunday & 03:00 pm ?
{
LocalWord[60002]=4; // New hour
LocalBit[65535]=0; // False=Summer time. (Necessary only for winter time)
}
// The changeover to WINTER time takes place on the night of the last Saturday to Sunday in October. Sunday morning at 03:00:xx am, it's 02:00:xx am
if ((LocalBit[65535]==0) && (month==10) && (day>=25) && (dateofweek==7) && (hour==03) && (minute==00)) // October & 25th or more & Sunday & 03:00 pm ?
{
LocalWord[60002]=2; // New hour
LocalBit[65535]=1; // True=Winter. Avoid a loop with an infinite change at every 3am because at 3am, it is 2am!
}
}

Fügen Sie das Makro in die Liste „Globales Makro“ ein

Und setzen Sie seine Ausführungsfrequenz auf 60000 ms (1 Minute), um die Uhr jede Minute zu aktualisieren.

So funktioniert es

Für die Sommerzeit ändert das Skript am letzten Sonntag im März zwischen 03:00:00 und 03:00:59 die Zeit auf 04:00:xx. Die Sekunden werden nicht geändert.

Für die Winterzeit, den letzten Sonntag im Oktober, zwischen 03:00:00 und 03:00:59, ändert das Script die Zeit auf 02:00:xx. Die Sekunden ändern sich nicht.

Im Bit LB65535 haben Sie den Zustand dieser Sommerzeit: Winter=1, Sommer=0.

Sie können hier das HMI-Tool-Projekt (V7.0) herunterladen, wenn Sie es testen möchten.

 

Siehe auch Wie Sie die ACE PLC-Uhr mit der HMI mithilfe eines Makros einstellen und synchronisieren