Problema con funzione SNTPRequest
Home › Forum › Programmazione IEC 61131 (LogicLab) › Problema con funzione SNTPRequest
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 3 giorni, 7 ore fa da
Sergio Bertana.
-
AutorePost
-
Giugno 16, 2025 alle 5:16 pm #82855
Anonimo
InattivoHo 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?
Giugno 16, 2025 alle 5:24 pm #82859Sergio Bertana
Amministratore del forumIl 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.