FB_BA_GetTime

FB_BA_GetTime 1:

Mit dem Funktionsbaustein FB_BA_GetTime 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 tSysTi für die gelesene Systemzeit und tUtc 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 nUpdRTC [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 nRemTiUpd zeigt die verbleibenden Sekunden bis zum nächsten Lesezyklus. Die ausgegebenen Zeitstrukturen dtSysTi und dtUtc können mit Hilfe des Bausteines FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden.

FB_BA_GetTime 2:

Information 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 nRemTiUpd wird erst dann neu gestartet, wenn der Wartezyklus beginnt.

FB_BA_GetTime 3: Eingänge

VAR_INPUT
  bEn            : BOOL;
  tNetId         : T_AmsNetId;;
  nUpdRtc        : UDINT;
  bUpdRtc        : BOOL;
END_VAR

Name

Typ

Beschreibung

bEn

BOOL

Freigabe des Bausteins. Ist bEn = TRUE, so wird die RTC-Uhr mit der NT-Systemzeit initialisiert.

tNetId

T_AmsNetID

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.

nUpdRtc

UDINT

Zeitangabe [s], mit der die RTC-Uhr mit der NT-Systemzeit regelmäßig synchronisiert wird. Dieser Wert wird intern auf ein Minimum von 5s begrenzt, um die Abarbeitung der internen Bausteine zu gewährleisten.

bUpdRtc

BOOL

Parallel zu der Zeitangabe nUpdRtc kann die RTC-Uhr über eine positive Flanke an diesem Eingang synchronisiert werden

FB_BA_GetTime 4: Ausgänge

VAR_OUTPUT
  bRdySysTi         : BOOL;
  bRdyTiZoInfo      : BOOL;
  bRdyRTC           : BOOL;
  nRemTiUpd         : UDINT;
  tSysTi            : TIMESTRUCT;
  tUTC              : TIMESTRUCT;
  dtSysTi           : DT;
  dtUTC             : DT;
  nCurrentTime_ms   : UDINT
  eTiZId            : E_TimeZoneID;
  bErr              : BOOL;
  sErrDescr         : T_MAXSTRING;
END_VAR

Name

Typ

Beschreibung

bRdySysTi

BOOL

Die Systemzeit wurde erfolgreich aus dem Zielsystem gelesen.

bRdyTiZoInfo

BOOL

Die zusätzlichen Zeitinformationen (Zeitzone, Zeitverschiebung zu UTC und Sommer-/ Winterzeit) wurden erfolgreich gelesen.

bRdyRTC

BOOL

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.

nRemTiUpd

UDINT

Countdown zur nächsten Synchronisation bzw. Aktualisierung der Zeitinformationen.

tSysTi

TIMESTRUCT

Systemzeit des ausgelesenen Zielsystems. Die Zeitstruktur kann mit Hilfe des Bausteines FB_BA_ExtTiSt weiter in die Bestandteile - Tag, Monat, Stunde, Minute etc. - aufgelöst werden. Info: Ist der Baustein nicht aktiviert (bEn = FALSE), so zeigt der Ausgang stSysTi in seinen Teilelementen (Tag Monat, etc.) jeweils 0 an.

tUTC

TIMESTRUCT

Koordinierte Weltzeit. 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. Info: Ist der Baustein nicht aktiviert (bEn=FALSE), so zeigt der Ausgang tUTC in seinen Teilelementen (Tag Monat, etc.) jeweils 0 an.

dtSysTi / dtUTC

DT

Wie stSysTi / stUTC, jedoch im DATE-AND-TIME-Format: Jahr-Monat-Tag-Stunden-Minuten-Sekunden. Info: 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 dtSysTi / dtUTC entspricht.

nCurrentTime

UDINT

Aktuelle Tageszeit [ms]

eTiZId

E_TimeZoneID

Enumerator zur Sommer-/ Winterzeitinformation.

bErr

BOOL

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

sErrDescr

T_MAXSTRING

Enthält die Fehlerbeschreibung

Fehlerbeschreibung

01: Warnung: ADS-Fehler beim Lesen der Zeit (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.22

Tc3_BA2 ab v5.2.5.0