Vai al contenuto

Problema con funzione SNTPRequest

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

  • Questo topic ha 2 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 settimana fa da Anonimo.
Stai visualizzando 4 post - dal 1 a 4 (di 4 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 PCK055A06_.

    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.

    #85804
    Anonimo
    Inattivo

    Ho inserito la nuova “ST_SNTPClient” con la libreria Pck055a050 come richiesto. Nella compilazione del programma inserito nel Task Back, mi esce il seguente errore:

    “ST_SNTPCLIENT(42) – errore S1305:  TO_DATE_AND_TIME => Funzione sconosciuta”

    Ho provato a vedere di trovare nella Project Libraries la funzione TO_DATE_AND_TIME, ma non sono riuscito a trovarla. Mi potreste indicare la via per arrivare ad una soluzione.

    #85808
    Sergio Bertana
    Amministratore del forum

    Il FB SNTPClient si trova nella raccolta di librerie PCK055A060.

    Nelle nuove versioni di raccolta librerie si utilizzano i tipi TIME e DATA che sono disponibili solo nella architettura XUnified. Non mi dici su che sistema stai eseguendo il programma e che versione di sistema operativo stai utilizzando. Per risolvere il problema hai due soluzioni:

      • Aggiorni il sistema operativo all’ultima versione, per i sistemi basati su architettura ARM vedi articolo  per i sistemi basati su architettura Cortex vedi articolo.
      • Utilizzi il precedente FB SNTPRequest di cui è riportato il programma di esempio in questo topic.
Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Devi essere connesso per rispondere a questo topic.