FB_BACnet_TimeSync
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.
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:
- Eine externe Zeitquelle (z.B. NTP) synchronisert die Betriebssystemzeit des Zeitmaster Systems (NTP → Betriebssystemzeit)
- Der Baustein FB_BACnet_TimeSync des Zeitmaster Systems synchronisiert bei bExecute = TRUE den BACnet Stack mit der aktuelle Betriebssystemzeit (Betriebssystemzeit → BACnet Zeit)
- Ist der Eingang bBroadcast am Baustein gesetzt, erfolgt das Senden einer BACnet Broadcast Zeitsynchronisierungsnachricht ins Netzwerk
- 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:
- 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.
- 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.