FB_BA_GetTime

Systemzeit auslesen

FB_BA_GetTime 1:

Funktionsbeschreibung

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 Funktionsbausteins ü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 stUtcTi 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]) 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 zeigt die verbleibenden Sekunden bis zum nächsten Lesezyklus. Die ausgegebenen Zeitstrukturen stSysTi und stUtcTi können mit Hilfe des Bausteins FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.

FB_BA_GetTime 2:

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 udiErrId / udiErrArg nieder. Der Countdown-Ausgang wird erst dann neu gestartet, wenn der Wartezyklus beginnt.

Ein-Ausgänge

VAR_INPUT

bEn       : BOOL;
sNetId    : T_AmsNetId;
udiUpdRtc : 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 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: 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 tGetSystemTime kann die RTC-Uhr über eine positive Flanke an diesem Eingang synchronisiert werden.

VAR_OUTPUT

bRdySysTi    : BOOL;
bRdyTiZoInfo : BOOL;
bRdyRTC      : BOOL;
udiRemTiUpd  : UDINT;
stSysTi      : TIMESTRUCT;
stUTC        : TIMESTRUCT;
dtSysTi      : DT;
dtUTC        : DT;
eTiZId       : E_TimeZoneID;
bErr         : BOOL;
udiErrId     : UDINT;
udiErrArg    : UDINT;

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: Countdown zur nächsten Synchronisation bzw. Aktualisierung der Zeitinformationen.

stSysTi: Systemzeit des ausgelesenen Zielsystems. Die Zeitstruktur kann mit Hilfe des Bausteins FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.

FB_BA_GetTime 3:

Ist der Baustein nicht aktiviert (bEn=FALSE), so zeigen der Ausgang stSysTi in seinen Teilelementen (Tag Monat, etc.) jeweils 0 an.

stUTC: Koordinierte Weltzeit. Diese wird intern aus der Systemzeit und den gelesenen Zeitinformationen des Zielsystems ermittelt. Die Zeitstruktur kann mit Hilfe des Bausteins FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.

FB_BA_GetTime 4:

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.

FB_BA_GetTime 5:

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.

eTiZId: Enumerator zur Sommer-/ Winterzeitinformation

bErr: Dieser Ausgang wird auf TRUE geschaltet, wenn die eingetragenen Parameter fehlerhaft sind.

udiErrId / udiErrArg: Enthält die Fehlernummer und das Fehlerargument. Siehe Fehlercodes.

Voraussetzungen

Entwicklungsumgebung

Zielsystem

erforderliche Bibliothek

erforderliches Supplement

TwinCAT 2.11 R3/x64

PC/CX

TcBA-Bibliothek ab V1.0.0

TS8040 | TwinCAT Building Automation ab V1.0.0