FB_BA_GetTime

Mit diesem Funktionsbaustein kann eine interne Uhr (Real Time Clock RTC) in der TwinCAT SPS realisiert werden. Die RTC-Uhr wird mit der Freigabe des Funktionsbausteines über bEn mit der aktuellen NT-Systemzeit initialisiert. Es wird ein Systemtakt der CPU benutzt um die aktuelle RTC-Zeit zu berechnen. Der Funktionsbaustein muss in jedem Zyklus der SPS einmal aufgerufen werden, damit die aktuelle Zeit berechnet werden kann. Intern wird in dem Funktionsbaustein eine Instanz der Funktionsbausteine NT_GetTime, FB_GetTimeZoneInformation und RTC_EX2 aufgerufen. Die Ausgabe der Zeit erfolgt an den Ausgängen stSysTi für die gelesene Systemzeit und stUtc für die koordinierte Weltzeit (Coordinated Universal Time). Diese wird intern aus der Systemzeit und der Zeitzone ermittelt. Ist die Systemzeit und/oder die Zeitzone fehlerhaft eingegeben worden, so wird auch die UTC-Zeit nicht richtig sein.
Die Systemzeit wird über den einzustellenden Timer udiUpdRTC_sec [s] zyklisch ausgelesen und damit die interne RTC-Uhr synchronisiert. In demselben Zyklus werden auch die Zeitinformationen (Zeitzone, Zeitverschiebung zu UTC und Sommer-/ Winterzeit) ausgelesen. Der Ausgang udiRemTiUpd_sec zeigt die verbleibenden Sekunden bis zum nächsten Lesezyklus. Die ausgegebenen Zeitstrukturen stSysTi und stUtc können mit Hilfe des Bausteines FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.
![]() | Hinweise zum Lese-/Wartezyklus Während des Lesezyklus fallen die Ausgänge bRdySysTi und bRdyTiZoInfo auf FALSE, der Enumerator eTiZId zeigt 0 = eTimeZoneID_Unknown. Wurde erfolgreich gelesen, so gehen die Ausgänge wieder auf TRUE bzw. zeigen die jeweilige Information Sommer- oder Winterzeit an, sofern sie verfügbar ist. War das Lesen nicht erfolgreich - es wird intern 5s lang auf eine Antwort gewartet - so bleiben die Ausgänge auf FALSE bzw. 0 stehen und ein erneuter Wartezyklus bis zum nächsten Lesezyklus wird gestartet. Im Fehlerfall wird die interne RTC-Uhr zwar nicht synchronisiert und kann immer noch eine richtige Zeit anzeigen, die Zeitinformationen jedoch können fehlerhaft sein und damit auch die UTC-Zeit. Fehler während des Lesezyklus schlagen sich in jedem Fall in der Anzeige an bErr und sErrDescr nieder. Der Countdown-Ausgang udiRemTiUpd_sec wird erst dann neu gestartet, wenn der Wartezyklus beginnt. |
VAR_INPUT
bEn : BOOL;
sNetId : T_AmsNetId;;
udiUpdRtc_sec : UDINT;
bUpdRtc : BOOL;
bEn: Freigabe des Bausteins. Ist bEn = TRUE, so wird die RTC-Uhr mit der NT-Systemzeit initialisiert.
sNetId: Hier kann die AmsNetId (siehe T_AmsNetId) des TwinCAT-Rechners angegeben werden dessen NT-Systemzeit als Zeitbasis gelesen werden soll. Für den lokalen Rechner kann auch ein Leerstring angegeben werden.
udiUpdRtc_sec: Zeitangabe [s], mit der die RTC-Uhr mit der NT-Systemzeit regelmäßig synchronisiert wird. Diese Zeitangabe Dieser Wert wird intern auf ein Minimum von 5s begrenzt, um die Abarbeitung der internen Bausteine zu gewährleisten.
bUpdRtc: Parallel zu der Zeitangabe udiUpdRtc_sec kann die RTC-Uhr über eine positive Flanke an diesem Eingang synchronisiert werden.
VAR_OUTPUT
bRdySysTi : BOOL;
bRdyTiZoInfo : BOOL;
bRdyRTC : BOOL;
udiRemTiUpd_sec : UDINT;
stSysTi : TIMESTRUCT;
stUTC : TIMESTRUCT;
dtSysTi : DT;
dtUTC : DT;
udiCurrentTime_ms : UDINT
eTiZId : E_TimeZoneID;
bErr : BOOL;
sErrDescr : T_MAXSTRING;
bRdySysTi: Die Systemzeit wurde erfolgreich aus dem Zielsystem gelesen.
bRdyTiZoInfo: Die zusätzlichen Zeitinformationen (Zeitzone, Zeitverschiebung zu UTC und Sommer-/ Winterzeit) wurden erfolgreich gelesen.
bRdyRTC: Wurde der Funktionsbaustein mindestens einmal initialisiert, so wird dieser Ausgang gesetzt. Ist dieser Ausgang gesetzt, dann sind die Werte für das Datum, Uhrzeit und Millisekunden an den Ausgängen gültig.
udiRemTiUpd_sec: Countdown zur nächsten Synchronisation bzw. Aktualisierung der Zeitinformationen.
stSysTi: Systemzeit des ausgelesenen Zielsystems (siehe TIMESTRUCT). Die Zeitstruktur kann mit Hilfe des Bausteines FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.
![]() | Ist der Baustein nicht aktiviert (bEn=FALSE), so zeigen der Ausgang stSysTi in seinen Teilelementen (Tag Monat, etc.) jeweils 0 an. |
stUTC: Koordinierte Weltzeit (siehe TIMESTRUCT). Diese wird intern aus der Systemzeit und den gelesenen Zeitinformationen des Zielsystems ermittelt. Die Zeitstruktur kann mit Hilfe des Bausteines FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.
![]() | Ist der Baustein nicht aktiviert (bEn=FALSE), so zeigen der Ausgang stUTC in seinen Teilelementen (Tag Monat, etc.) jeweils 0 an. |
dtSysTi / dtUTC: Wie stSysTi / stUTC, jedoch im DATE-AND-TIME-Format: Jahr-Monat-Tag-Stunden-Minuten-Sekunden.
![]() | Ist der Baustein nicht aktiviert (bEn=FALSE), so zeigen die Ausgänge dtSysTi und dtUTC jeweils DT#1970-01-01-00:00 an, da dies die Untergrenze ist und es den Nullen in der Strukturdarstellung von stSysTi / stUTC entspricht. |
udiCurrentTime_ms: Aktuelle Tageszeit in ms.
eTiZId: Enumerator zur Sommer-/ Winterzeitinformation (siehe E_TimeZoneID).
bErr: Dieser Ausgang wird auf TRUE geschaltet, wenn die eingetragenen Parameter fehlerhaft sind.
sErrDescr: Enthält die Fehlerbeschreibung.
Fehlerbeschreibung |
---|
01: Warnung: ADS-Fehler beim Lesen der Zeit (FB NT_GetTime). Es wird die ADS-Fehlernummer angegeben. |
02: Warnung: ADS-Fehler beim Lesen der Zeitzoneninformation (FB_GetTimeZoneInformation). Es wird die ADS-Fehlernummer angegeben. |
Voraussetzungen
Entwicklungsumgebung | Erforderliche SPS-Bibliothek |
---|---|
TwinCAT ab v3.1.4024.7 | Tc3_BA ab v1.1.6.0 |