M251-Funktionen für den Schreibzugriff
SetRTCDrift: Einstellen des Kompensationswerts für die RTC
Mit dieser Funktion wird die Frequenz der Echtzeituhr beschleunigt bzw. verlangsamt, damit die Anwendung die Kompensation der Uhr durchführen kann, abhängig von der Betriebsumgebung (z. B. von der Temperatur). 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. Bei jedem neuen Aufruf wird der Kompensationswert durch einen neuen ersetzt. Der Wert wird in der Steuerungshardware gespeichert, solange die Echtzeituhr (RTC) über die Netzversorgung oder die Batterie gespeist wird. Wenn sowohl Batterie als auch Netzversorgung entfernt bzw. getrennt werden, ist der RTC-Kompensationswert nicht verfügbar.
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 - +73). |
HINWEIS: Die Parameter Tag, Stunde 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 |
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. |
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 : DAY_OF_WEEK;
MyHour : HOUR;
MyMinute : MINUTE;
END_VAR
IF IsFirstMastCycle() THEN
MyRTCDrift := 4;
MyDay := 0;
MyHour := 0;
MyMinute := 0;
SetRTCDrift(MyRTCDrift, MyDay, MyHour, MyMinute);
END_IF