SetRTCDrift: Impostare il valore di compensazione sull'RTC

Descrizione della funzione

Questa funzione accelera o rallenta la frequenza dell'RTC per controllare l'applicazione per la compensazione RTC, in funzione dell'ambiente operativo (temperatura, ...). Il valore di compensazione è specificato in secondi per settimana. Può essere positivo (accelerazione) o negativo (rallentamento).

NOTA: La funzione SetRTCDrift deve essere richiamato solo una volta. Ogni nuova chiamata sostituisce il valore di compensazione. Il valore viene mantenuto nell'hardware del controller mentre l'RTC è alimentato dall'alimentatore principale o dalla batteria. Se vengono rimossi sia la batteria che l'alimentatore, il valore di compensazione RTC non è disponibile.

Rappresentazione grafica

G-SE-0062398.1.gif-high.gif

 

 

Rappresentazione IL e ST

Per la rappresentazione generale in linguaggio IL o ST, fare riferimento al capitolo Rappresen­tazione di funzioni e blocchi funzione.

Descrizione delle variabili di I/O

Questa tabella descrive i parametri di ingresso:

Ingressi

Tipo

Commento

RtcDrift

SINT(-36...+73)

Correzione in secondi per settimana (−36 - +73).

NOTA: I parametri Giorno, Ora e Minuto sono utilizzati solo per garantire la compatibilità retroattiva.

NOTA: Se il valore immesso per RtcDrift supera il valore limite, il firmware del Controller imposterà l'opzione al valore massimo.

La seguente tabella descrive la variabile di uscita:

Uscita

Tipo

Commento

SetRTCDrift

RTCSETDRIFT_ERROR

Restituisce RTC_OK (00 hex) se il comando è corretto; altrimenti restituisce il codice ID dell'errore rilevato.

Esempio

In questo esempio, la funzione è chiamata solo una volta durante il primo ciclo del task MAST. Accelera l'RTC di 4 sec alla settimana (18 sec al mese).

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