SetRTCDrift: Kompensationswert für Echtzeituhr (RTC) setzen

Beschreibung der Funktion

Mit dieser Funktion wird die Frequenz der Echtzeituhr beschleunigt bzw. verlangsamt, damit die Anwendung die Kompensation der Uhr in Abhängigkeit von der Betriebsumgebung (z. B. von der Temperatur) durchführen kann. Der Kompensationswert wird in Sekunden pro Woche angegeben. Er kann positiv (Beschleunigung) oder negativ (Verzögerung) sein.

HINWEIS: Die Funktion SetRTCDrift darf nur einmal aufgerufen werden. Jeder neue Aufruf ersetzt den Kompensationswert durch den neuen Wert. Der Wert wird in der Hardware der Steuerung beibehalten, während die Echtzeituhr über die Hauptversorgung oder die Batterie versorgt wird. Wenn sowohl die Batterie als auch die Spannungsversorgung entfernt wird, ist der Wert für die Echtzeituhr-Kompensation nicht verfügbar.

Grafische Darstellung

Darstellung in AWL (IL) und ST

Die allgemeine Darstellung in den Sprachen AWL (IL) oder ST finden Sie im Kapitel Darstellung von Funktionen und Funktionsbausteinen.

Beschreibung der E/A-Variablen

In der folgenden Tabelle werden die Eingangsparameter beschrieben:

Eingänge

Typ

Kommentar

RtcDrift

SINT (-36..73)

Korrektur in Sekunden pro Woche (-36 bis +73).

HINWEIS: Die Parameter Day, Hour und Minute werden nur verwendet, um die Abwärtskompatibilität sicherzustellen.
HINWEIS: Wenn der für RtcDrift eingegebene Wert den Grenzwert überschreitet, setzt die Firmware der Steuerung den Wert auf das Maximum.

In der folgenden Tabelle wird die Ausgangsvariable beschrieben:

Ausgang

Typ

Kommentar

SetRTCDrift

RTCSETDRIFT_ERROR

Gibt den Wert RTC_OK (00 hex) zurück, wenn der Befehl fehlerfrei ausgeführt wurde. Andernfalls wird der ID-Code des erkannten Fehlers zurückgegeben.

Beispiel

In diesem Beispiel wird die Funktion nur einmal während des ersten MAST-Task-Zyklus aufgerufen. Sie beschleunigt die Echtzeituhr um 4 Sekunden pro Woche (18 Sekunden pro Monat).

VAR
	MyRTCDrift : SINT (-36..+73) := 0;
	MyDay : sec.DAY_OF_WEEK;
	MyHour : sec.HOUR;
	MyMinute : sec.MINUTE;
END_VAR	
IF IsFirstMastCycle() THEN
	MyRTCDrift := 4;
	MyDay := 0;
	MyHour := 0;
	MyMinute := 0;
	SetRTCDrift(MyRTCDrift, MyDay, MyHour, MyMinute);
END_IF