FB_BACnet_TimeSync

FB_BACnet_TimeSync 1:

Anwendung

Der Baustein wird zyklisch aufgerufen und gibt die aktuelle lokale Zeit und die aktuelle UTC Zeit aus. Wenn eine Flanke am Eingang bExecute angelegt wird, dann sendet der Baustein die Uhrzeit an den BACnet Stack und in das BACnet-Netzwerk als Broadcast Nachricht (Zeitmaster) - vorausgesetzt der Eingang bBroadcast ist gesetzt; andernfalls wird nur der lokale BACnet Stack synchronisiert.

Die Funktion enthält u.a. den Baustein FB_LocalSystemTime, um die lokale Zeit zu lesen.

FB_BACnet_TimeSync 2:

Dieser Funktionsbaustein kann mit BACnet Stack Revision 6 eingesetzt werden. Jedoch wird unter Revision 6 immer ein Broadcast gesendet (Eingang bBroadcast ist unter Revision 6 deaktiviert).

Im Folgenden ist eine Übersicht zur Zeitsynchronisierung dargestellt:

FB_BACnet_TimeSync 3:
Bild-1: Beispielhafter Ablauf der Zeitsynchronisierung im BACnet Netzwerk:
  1. Eine externe Zeitquelle (z.B. NTP) synchronisert die Betriebssystemzeit des Zeitmaster Systems (NTP → Betriebssystemzeit)
  2. Der Baustein FB_BACnet_TimeSync des Zeitmaster Systems synchronisiert bei bExecute = TRUE den BACnet Stack mit der aktuelle Betriebssystemzeit (Betriebssystemzeit → BACnet Zeit)
  3. Ist der Eingang bBroadcast am Baustein gesetzt, erfolgt das Senden einer BACnet Broadcast Zeitsynchronisierungsnachricht ins Netzwerk
  4. BACnet Devices im Netzwerk stellen die Uhrzeit entsprechend um (BACnet Zeit → Betriebssystemzeit)

Typischerweise erfolgt die Zeitsynchronisierung in größeren Abständen mehrerer Stunden bzw. täglich. Zeitpunkte zwischen 23 bis 3 Uhr sollten gemieden werden, da es u.U. zur Überschneidung mit der automatischen Sommer-/Winterzeitumschaltung der zu synchronisierenden Geräte kommen kann.

Anwendungsinformationen:

Bei der Zeitsynchronisation werden 2 Modi unterschieden:

  1. Jedes BACnet-Gerät ist an eine externe Zeitquelle (z.B. NTP) angeschlossen. FB_BACnet_TimeSync muss auf jedem BACnet-Controller ausgeführt werden. bBroadcast hat immer den Wert FALSE und bExecute wird in regelmäßigen Abständen getriggert.
  2. Ein Gerät ist an eine externe Zeitquelle (z.B. NTP) angeschlossen. Dann muss auf diesem Gerät FB_BACnet_TimeSync mit bBroadcast = TRUE ausgeführt und bExecute regelmäßig getriggert werden.
    Alle anderen BACnet-Geräte führen FB_BACnet_TimeSync mit bBroadcast = FALSE und bExecute = FALSE aus, werden via BACnet synchronisiert und stellen automatisch ihre lokale Betriebssystemzeit nach.

VAR_INPUT

bExecute      : BOOL;
bBroadcast    : BOOL:=TRUE;
tTimeout      : TIME:=BACnet_ADSTimeOut;

 

bExecute: Bei steigender Flanke beginnt die Synchronisierung.

bBroadcast: TRUE → Sendet zusätzlich eine Broadcast Zeitsynchronisierung in das BACnet Netzwerk; FALSE → nur lokal Synchronisieren (ab Revision 12 und höher)

tTimeout: Optionaler Eingang, Überwachungszeit für den ADS Zugriff (Default: siehe BACnet_ADSTimeOut).

 

VAR_OUPUT

bReady        : BOOL;
bBusy         : BOOL;
bError        : BOOL;
nErrID        : UDINT;
tsSystemTime  : TIMESTRUCT;
dtSystemTime  : ST_BACnet_DateTime;
tzID          : E_TimeZoneID;
tzInfo        : ST_TimeZoneInformation;
tsUTC         : TIMESTRUCT;

 

bReady: Ausgabe der Uhrzeit (tsSystemTime, dtSystemTime, tzID, tzInfo und tsUTC) ist gültig

bBusy: Baustein ist beschäftigt (Zeitsynchronisierung ist aktiv)

bError: Fehler während der Abarbeitung.

nErrID: ADS Fehlercode.

tsSystemTime: Lokale Betriebssystemzeit (Windows Uhrzeit) als PLC typische Datenstruktur

dtSystemTime: Lokale Betriebssystemzeit (Windows Uhrzeit) als BACnet typische Datenstruktur

tzID: ID der aktuellen Zeitzone

tzInfo: Informationen zur aktuellen Zeitzone

tsUTC: Betriebssystemzeit als UTC Zeitstempel (GMT oder Koordinierte Weltzeit) als PLC typische Datenstruktur

VAR_IN_OUT

Device        : FB_BACnet_Device;

 

Device: Angabe der Instanz des lokalen, zugehörigen BACnet-Server Bausteins.

 

Beispiel

FB_BACnet_TimeSync 4:
Bild-2: Beispiel für das zyklische Synchronisieren der lokalen Uhrzeit (kein Broadcast). Bei Überschreiten von 3:00 Uhr wird bExecute gesetzt und bleibt aktiv bis die Uhrzeit 0:00 Uhr erreicht → tägliche Synchronisierung.