Vai al contenuto

Problema con funzione SNTPRequest

Home Forum Programmazione IEC 61131 (LogicLab) Problema con funzione SNTPRequest

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #82855
    Anonimo
    Inattivo

    Ho acquistato un modulo CPU MPS054C100 che non gestisce il Real Time Clock ed ogni volta che l’accendo per fare prove il datario è sbagliato (Non avendo acquistato la versione extended MPS054C110). Quindi volevo inserire l’aggiornamento via SNTP per l’aggiornamento del datario da Internet.

    Ho preso spunto dal programma ST_SNTPClient presente in questo articolo, ma quando lo compilo mi dice funzione sconosciuta in fatti nella libreria manca la funzione SNTPClient.

    Nella libreria trovo solo la funzione SNTPRequest, esiste un esempio che utilizzi questa funzione per l’aggiornamento datario?

    #82859
    Sergio Bertana
    Amministratore del forum

    Il blocco funzione SNTPRequest è stato sostituito dal blocco funzione SNTPClient, che verrà distribuito con il prossimo package di librerie di cui è possibile eseguire il download dal sito della versione beta PCK055A05_.

    Nel nuovo blocco funzione è stata inserita la possibilità di definire 2 diverse definizioni di server NTP. Per il resto il comportamento del FB è del tutto simile al precedente. Ti inserisco il programma ST_SNTPRequest che puoi utilizzare con il FB SNTPRequest.

    PROGRAM ST_SNTPRequest
    VAR
        ClockSync : BOOL; (* Clock syncronized *)
        TimeBf : UDINT; (* Time buffer (mS) *)
        SNTPReq : SNTPRequest; (* SNTP Request *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "ST_SNTPRequest"
    // *****************************************************************************
    // Questo programma esegue la sincronizzazione con il time server.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // INIZIALIZZAZIONI
        // -------------------------------------------------------------------------
        // Eseguo inizializzazioni. 
    
        IF (SysFirstLoop) THEN
            SNTPReq.SpyOn:=FALSE; //Spy On
            SNTPReq.NTPServer:=ADR('0.pool.ntp.org'); //NTP server
            TimeBf:=SysTimeGetMs(); //Time buffer (mS)
        END_IF;
    
        // -------------------------------------------------------------------------
        // ESEGUO SINCRONIZZAZIONE CON SERVER NTP
        // -------------------------------------------------------------------------
        // If system clock not synchronized executes the request faster.
        // If synchronized executes it slowly.
    
        IF NOT(ClockSync) THEN
            IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#30s)) THEN TimeBf:=SysTimeGetMs(); SNTPReq.Query:=TRUE; END_IF;
        ELSE
            IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#15m)) THEN TimeBf:=SysTimeGetMs(); SNTPReq.Query:=TRUE; END_IF;
        END_IF;
    
        // Manage the NTP request to the server.
        // Execution done, if Ok set the real time clock.
    
        SNTPReq(); //NTP request
        IF NOT(SNTPReq.Done) THEN RETURN; END_IF;
        SNTPReq.Query:=FALSE; //Query On
        IF NOT (SNTPReq.Ok) THEN RETURN; END_IF;
    
        // Update RTC.
    
        eTO_JUNK(SysDateSetS(SNTPReq.UTCTime));
        ClockSync:=TRUE; //Clock syncronized
    
    // [End of file]

    Come vedi quando il RTC è sincronizzato le rischieste al server sono inviate con tempi lunghi 15 minuti, anche senza chip di Real Time Clock fin che è acceso il sistema gestisce comunque il datario con una sufficente precisione.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.