FB per sincronizzazione con server NTP
Home › Forum › Programmazione IEC 61131 (LogicLab) › FB per sincronizzazione con server NTP
- Questo topic ha 13 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 8 anni, 10 mesi fa da
Sergio Bertana.
-
AutorePost
-
Novembre 17, 2014 alle 5:13 pm #35668
Sergio Bertana
Amministratore del forumSui 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.
Marzo 13, 2015 alle 9:16 am #38804Sergio Bertana
Amministratore del forumEcco 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.
Marzo 13, 2015 alle 2:16 pm #38805Giulio
PartecipanteDove 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 ?
Marzo 16, 2015 alle 10:34 am #38806Sergio Bertana
Amministratore del forumPer 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.
Dicembre 1, 2015 alle 9:18 am #39234Maurizio
PartecipanteHo 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.
Dicembre 1, 2015 alle 9:28 am #39235Sergio Bertana
Amministratore del forumCon 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).
Febbraio 25, 2016 alle 6:27 am #39413Anonimo
InattivoVorrei 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 ?
Febbraio 25, 2016 alle 9:31 am #39414Sergio Bertana
Amministratore del forumPremesso 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.
Maggio 24, 2016 alle 8:54 pm #39588Flea
PartecipanteStò 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.
Maggio 25, 2016 alle 1:22 pm #39589Sergio Bertana
Amministratore del forumHai 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.
Maggio 26, 2016 alle 2:07 pm #39590Flea
PartecipanteDo 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.
Maggio 26, 2016 alle 2:36 pm #39591Sergio Bertana
Amministratore del forumIntanto 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).
Maggio 27, 2016 alle 6:20 am #39592Flea
PartecipanteHo 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.
Maggio 27, 2016 alle 8:09 am #39593Sergio Bertana
Amministratore del forumLa 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.