SetRTCDrift : Définir la valeur de compensation sur l'horodateur

Description de la fonction

Cette fonction accélère ou ralentit la fréquence de l'horodateur afin de donner la main à l'application pour compenser l'horodateur en fonction de l'environnement de fonctionnement (temperature, …). La valeur de compensation est donnée en secondes par semaine. Elle peut être positive (accélération) ou négative (ralentissement).

NOTE : La fonction SetRTCDrift ne doit être appelée qu'une seule fois. Chaque nouvel appel remplace la valeur de compensation précédente. La valeur est conservée dans le matériel du contrôleur pendant que l'horodateur est alimenté par la source principale ou par la batterie. Si la batterie et la source d'alimentation sont retirées, la valeur de compensation de l'horodateur n'est pas disponible.

Représentation graphique

Représentation en langage IL et ST

Pour voir la représentation générale en langage IL ou ST, consultez le chapitre Représentation des fonctions et blocs fonction.

Description des variables d'E/S

Le tableau suivant décrit les paramètres d'entrée :

Entrées

Type

Commentaire

RtcDrift

SINT (-36..73)

Correction en secondes par semaine (-36 à +73).

NOTE : Les paramètres Day, Hour et Minute sont utilisés uniquement pour assurer la compatibilité descendante.
NOTE : Si la valeur entrée pour RtcDrift dépasse la valeur de la limite, le micrologiciel du contrôleur définit la valeur sur la valeur maximale.

Le tableau suivant décrit la variable de sortie :

Sortie

Type

Commentaire

SetRTCDrift

RTCSETDRIFT_ERROR

Renvoie RTC_OK (00 hex) si la commande est correcte ou renvoie le code d'identification de l'erreur détectée.

Exemple

Dans cet exemple, la fonction est appelée une seule fois pendant le premier cycle de tâche MAST. Elle accélère l'horodateur de 4 secondes par semaine (18 secondes par mois).

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