SNTPRequest, sends a SNTP request

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Gestione networking / SNTPRequest, sends a SNTP request

Questo blocco funzione esegue la lettura da un server di tempo del valore di UTC, in questo articolo è spiegato come attivare il server su di un PC. Attivando Query viene eseguita la richiesta del valore di tempo dal server il cui URL o indirizzo IP è passato in NTPServer. L'FB interroga il server e se riceve risposta corretta ritorna in UTCTime il valore di tempo UTC in Epoch. In Offset viene ritornata la differenza in mS tra il valore UTC ritornato e l'orologio NTP di riferimento.

Terminata l'esecuzione si attiva l'uscita Done, per effettuare una nuova lettura di tempo occorre disattivare e poi riattivare l'ingresso Query. In RTDelay è ritornato il tempo necessario all'invio della richiesta ed alla ricezione della risposta dal server NTP.

Function block
CODESYS: Non disponibile
LogicLab: eLLabNetworkLib

Query (BOOL) Comando attivazione richiesta. Per rieseguire il comando disabilitare e poi riabilitare l'ingresso.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.

NTPServer (@STRING) Pointer definizione server NTP. Può essere definito sia l'IP che l'URL.

Done (BOOL) Si attiva al termine della esecuzione comando.

Ok (BOOL) Attivo per un loop di programma se query eseguita correttamente.

Fault (BOOL) Attivo per un loop se errore esecuzione comando.

RTDelay (REAL) Round trip delay, tempo per inviare la richiesta e ricevere la risposta dal server (mS).

UTCTime (UDINT) Data/Ora in UTC espressa in Epoch time.

Offset (REAL) Differenza tra il valore UTC ritornato e l'orologio NTP di riferimento (mS).

Trigger di spy

Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.
Ogni 60 secondi viene eseguita la richiesta al server NTP 0.pool.ntp.org e se risposta corretta viene eseguito l'aggiornamento del real time clock.

LogicLab (Ptp119)
PROGRAM ST_SNTPRequest
VAR
    i : UDINT; (* Auxiliary variable *)
    TimeRef : UDINT; (* UTC Date/Time reference *)
    SNTPReq : SNTPRequest; (* NTP request *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SNTPRequest"
// *****************************************************************************
// At every 60 seconds it's a NTP request is sent and the real time clock is
// updated.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN
        SNTPReq.SpyOn:=TRUE; //Spy On
        SNTPReq.NTPServer:=ADR('0.pool.ntp.org'); //NTP server
    END_IF;

    // -------------------------------------------------------------------------
    // TIME SYNCRONIZATION
    // -------------------------------------------------------------------------
    // Check if time theshold to perform synchronization (Every 60 Sec).
    // Program initializations.

    IF ((SysGetUTCDateTime(TRUE)-TimeRef) > 60) THEN
        TimeRef:=SysGetUTCDateTime(TRUE); //UTC Date/Time reference
        SNTPReq.Query:=TRUE; //Query On
    END_IF;

    // Manage the NTP request to the server.

    SNTPReq(); //NTP request

    // Execution done, if Ok update the real time clock.

    IF (SNTPReq.Done) THEN
        SNTPReq.Query:=FALSE; //Query On
        IF (SNTPReq.Ok) THEN i:=SysSetUTCDateTime(SNTPReq.UTCTime); END_IF;
    END_IF;

// [End of file]

Ti è stato utile questo articolo ?