FB per sincronizzazione con server NTP

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Programmazione IEC 61131 (LogicLab) FB per sincronizzazione con server NTP

Questo argomento contiene 13 risposte, ha 5 partecipanti, ed √® stato aggiornato da  Sergio Bertana 2 anni, 9 mesi fa.

Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #35668

    Sergio Bertana
    Amministratore del forum

    Sui nostri dispositivi è disponibile un Real Time Clock che viene tarato per avere una buona precisione nel tempo, ma ci sono casi in cui occorre sincronizzarsi con una base tempo aziendale e/o con un server NTP su Internet.

    A questo proposito abbiamo rilasciato il nuovo blocco funzione SNTPRequest (Estratto manuale) che permette di richiedere l’ora ad un server di tempo con il protocollo Network Time Protocol. Basta fornire l’indirizzo IP del server al blocco funzione, attivare il comando Query ed il FB ritornerà l’ora UTC in Epoch Time.

    #38804

    Sergio Bertana
    Amministratore del forum

    Ecco un semplice listato di programma ST per la sincronizzazione con il Time Server dell’I.N.RI.M, ntp1.inrim.it (Indirizzo IP 193.204.114.232).

      (* Ogni ora eseguo richiesta al time server. *)

      IF ((SysDateTime-STimeRef) > 3600) THEN STimeRef:=SysDateTime; SNTPReq.Query:=TRUE; END_IF;
      SNTPReq(NTPServer:=’193.204.114.232′); (* Server NTP *)

      (* Su fine esecuzione aggiorno Real Time Clock. *)

      IF (SNTPReq.Done) THEN
        SNTPReq.Query:=FALSE; (* Query On *)
        IF (SNTPReq.Ok) THEN SysDateTime:=SNTPReq.UTCTime+3600; END_IF;
      END_IF;

    Come si vede ad ogni ora (3600 Sec) forzo la query di richiesta sincronizzazione, a fine query se non vi sono errori eseguo aggiornamento Data/Ora di sistema scrivendo il valore ricevuto dal Time Server nella variabile SysDateTime.

    Siccome siamo in Italia +1 rispetto all’UTC devo sommare 1 ora (3600 Sec). Attenzione se si è nel periodo di ora legale occorre sommare 2 ore al valore.

    #38805

    Giulio
    Partecipante

    Dove posso scaricare il modulo e la relativa documentazione ?

    Rispetto all’esempio precedente esiste un modo per utilizzare il parametro “Time zone” presente nella pagina General Setup del WebServer invece di sommare la costante 3600, oppure  nel caso di fuso orario variabile devo replicare la variabile in una pagina web dedicata ?

    #38806

    Sergio Bertana
    Amministratore del forum

    Per scaricare il FB devi eseguire il download dalla pagina di LogicLab dell’ultima versione della libreria ePLCUtyLib.

    Alla attuale versione del sistema operativo l’impostazione del fuso orario non è accessibile da programma utente, quindi se tu hai la necessità di modificarlo da parte dell’utente, devi creare come hai detto una tua variabile.

    #39234

    Maurizio
    Partecipante

    Ho aggiornato la versione firmware dello SlimLine alla Sfw184b000 ed utilizzo il nuovo LogicLab 4. Ho notato che il FB per la sincronizzazione è stato modificato. Visto che sul manuale c’è solo un esempio in linguaggio ladder chiedevo se era possibile avere un esempio anche in linguaggio ST.

    #39235

    Sergio Bertana
    Amministratore del forum

    Con la nuova versione del sistema operativo abbiamo inserito la gestione del DNS, ora è possibile definire nelle connessioni TCP/UDP oltre agli indirizzi IP anche gli URLs. Ecco quindi che il FB SNTPRequest ha la possibilità di definire nell’ingresso NTPServer un URL. Per permettere di definire URLSs di lunghezza variabile abbiamo trasformato il tipo dato da STRING a pointer @USINT. Occorre quindi passare l’indirizzo della stringa definizione server.

    Nel manuale gli esempi solitamente sono in linguaggio Ladder, ma ho provveduto nella nuova versione del manuale a riportare anche un esempio in ST (Estratto manuale). Allego anche il progetto SNTPTime di esempio (Download progetto).

    #39413

    Corrado
    Partecipante

    Vorrei utilizzare il FB SNTPRequest ma ho visto che la libreria eLLabNetworkLib è una XML library che funziona solo con LogicLab 4. Avrei necessità di poter utilizzare la FB in un vecchio programma sviluppato in LogicLab 3 su un controllore MPS046B Xtarget 11.0. Come posso fare ?

    #39414

    Sergio Bertana
    Amministratore del forum

    Premesso che si può eseguire l’ugrade del firmware del modulo SlimLine e trasformarlo in un XTarget_12 (Vedi FAQ) e poi utilizzare la nuova libreria. Ti posso comunque postare la libreria ePLCUtyLib_C020.pll con il FB da te richiesto.

    #39588

    Flea
    Partecipante

    Stò utilizzando un MPS053A110, come da manuale e descritto nel forum, ho inserito un FB SNTPRequest del tipo:

    SNTP_Client(NTPServer:=ADR(‘0.pool.ntp.org’));
    IF SNTP_Client.Done THEN SNTP_Client.Query:=FALSE; END_IF;

    La request la avvio ogni 60 sec e la resetto sul SNTP_Client.Done. Il punto è che dal PLC non esce alcuna richiesta SNTP o almeno con Wireshark non la vedo uscire.

    #39589

    Sergio Bertana
    Amministratore del forum

    Hai eseguito l’upgrade all’ultima versione del sistema operativo (Vedi FAQ) ?

    Se esegui il download del programma di esempio SNTPTime postato nel post precedente puoi testarne il funzionamento, l’ho testato io adesso e funziona.

    #39590

    Flea
    Partecipante

    Do un’occhiata, ma la CPU l’ho comprata qualche settmana fa quindi credo abbia l’ultima versione. La cosa strana è che il LogicaLab NON compila l’istruzione:

    SNTP_Client(NTPServer:=ADR(‘0.pool.ntp.org’));

    mentre così

    SNTP_Client(NTPServer:=’0.pool.ntp.org’);

    Compila ma non spedisce niente. Ho notato che nel progetto di esempio il FB SNTP non viene da una libreria ma è un FB protetto all’interno del progetto stesso. Io ho usato la eLLabNetworkLib_A100.

    #39591

    Sergio Bertana
    Amministratore del forum

    Intanto le librerie solitamente non vanno mai incluse tutte nel progetto ma si importa solo gli oggetti che ci servono nello sviluppo (Topic). Ecco perchè nel mio progetto di esempio ho incluso solo l’oggetto SNTPRequest che arriva dalla libreria eLLabNetworkLib_A100 (Lo puoi verificare visualizzando le proprietà dell’oggetto, usando il tasto destro del mouse).

    Quindi se compili il progetto così com’è lo devi compilare senza problemi…

    Ma il LogicLab che utilizzi è quello scaricato dal nostro sito ? ed è l’ultima versione disponibile ? (Download).

    #39592

    Flea
    Partecipante

    Ho capito dove sta l’errore… nel progetto utilizzavo anche la libreria eLLabUtyLib_C020.plclib che include il blocco SNTPRequest (non capisco che versione) ma appunto da errore in compilazione se si antepone in puntatore ADR all’indirizzo IP del server NTP.

    Ulitlizzando il FB  dalla eLLabNetworkLib_A100 (o dal programma di esmpio postato) tutto funziona correttamente.

    #39593

    Sergio Bertana
    Amministratore del forum

    La prima versione del FB era inserito nella libreria delle utilities eLLabUtyLib_C020, poi con l’uscita di LogicLab4 abbiamo rivisto tutte le librerie creando una libreria specifica per il networking eLLabNetworkLib_A100. Quindi è stato naturale spostare il FB in questa libreria. Per vedere la versione dell’oggetto di libreria ci si posiziona sull’oggetto e poi con il tasto destro del mouse si sceglie proprietà.

    Con il nuovo sistema operativo SlimLine gestisce il DNS, quindi è possibile passare ai sockets un URL, nella vecchia versione si passava l’indirizzo IP. Quindi avendo l’IP lunghezza fissa veniva passato come STRING, mentre l’URL avendo lunghezza variabile è passato come pointer @USINT.

Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)

Devi essere loggato per rispondere a questa discussione.