Uno dei casi più comuni in cui è necessario sincronizzare l’orario tra due sistemi è quando in una applicazione oltre al PLC di controllo vi è un pannello operatore. Questo FB da eseguire in task Back facilita la gestione della Data/Ora tra il PLC e i pannelli operatore Weintek. Il FB se definito in NTPSyncTime gestisce la sincronizzazione del clock del PLC aggiornandosi con il server NTP. Inoltre provvede a gestire la variabile di ora (Nel formato HH:MM:SS) definita in pSTime e la variabile di data (In formato localizzato) definita in pSDate. Dal pannello operatore è possibile visualizzare le due variabili.
I dati nelle variabili sono espressi in formato UDINT in modo da poterli gestire sul pannello con oggetti di visualizzazione numerica utilizando il formato di visualizzazione custom (Vedi immagine a lato). Per il campo ora in tutti i paesi del mondo si può utilizzare il carattere “:” come separatore. Per il campo data sarà necessario impostare il corretto valore del parametro Locale ed utilizzare il corretto carattere di separazione.
Sincronizzazione NTP su pannello
Abiamo visto come il FB WeintekHMIClock permetta una facile visualizzazione ed impostazione della data/ora sul PLC. Con il FB SNTPServer è possibile utilizzare il PLC come server di riferimento tempo, quindi impostando l’IP del PLC come server di riferimento sul pannello il riferimento di tempo del PLC sarà utilizzato anche dal pannello garantendo la sincronizzazione di tempo tra i due sistemi.
Per l’impostazione del server di rifeimento tempo sul pannello, da programma EasyBuilder nel menù System Parameter Settings->Time Sync/DST impostare le opzioni di sincronizzazione definendo l’IP del PLC (Vedi immagine a lato).
Le impostazioni sono per l’Italia occorrerà adeguarle per il paese dove il pannello è installato. Come server di tempo si è impostato l’indirizzo IP del PLC, occorrerà variarlo in base alla propria applicazione.
Utilizzo struttura “WEINTEK_HMI_DATETIME”
Oltre alle variabili indirizzate da pSDate e pSTime il FB gestisce anche la struttura dati puntata da pSDTStruct, la struttura è definita nel modo gestito dal pannello Weintek. Questo permette di utilizzarla per inizializzare l’orologio del pannello all’accensione utilizzando i dati acquisiti dal PLC.
Come si vede dall’immagine a lato occorre definire l’indirizzo della struttura per l’accesso da Modbus disabilitando la sincronizzazione con il server NTP. Alla accensione il pannello imposterà il proprio Real Time Clock acquisendo i dati dal PLC. Per la visualizzazione della Data/Ora occorerà riferirsi ai relativi registri del pannello. Per inputare nuovi valori occorrerà attivare un trigger sulla scrittura che esegua una macro per trasferire i registri del pannello sulla struttura del PLC via Modbus.
LW-9017 (16bit) : local second
LW-9018 (16bit) : local minute
LW-9019 (16bit) : local hour
LW-9020 (16bit) : local day
LW-9021 (16bit) : local month
LW-9022 (16bit) : local year
LW-9023 (16bit) : local week
Approfondimenti
- In questo topic si tratta questo argomento affrontato in un altro modo.
- In questo topic esempio di macro su HMI per la scalatura dei valori di tempo
Descrizione
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
TimeZone (SINT) Fuso orario numero che indica la differenza in ore dell’ora locale rispetto al Tempo Coordinato Universale (UTC) riferito al meridiano di Greenwich. Per l’Italia il valore da definire è +1.
DaylightZone (USINT) Zona di cambio ora legale, il sistema provvede automaticamente al cambio di ora in base alla zona definita. Le zone sono 3: 0) Nessuna ora legale.1) Europa, ora legale da Aprile ad Ottobre. 2) USA, ora legale da Aprile a Novembre. (Per l’Italia impostare 1).
Locale (LOCAL_DATE) Definisce il formato data ritornato in pSDate.
pSDate (@UDINT) Definire l’indirizzo della variabile UDINT per visualizzazione data (Formato localizzato) su HMI. Se eNULL non viene gestita.
pSTime (@UDINT) Definire l’indirizzo della variabile UDINT per visualizzazione ora (Formato HH:MM:SS) su HMI. Se eNULL non viene gestita.
pSDTStruct (@WEINTEK_HMI_DATETIME) Definire l’indirizzo della struttura di tipo WEINTEK_HMI_DATETIME per variabili tempo su HMI. Se eNULL non viene gestita.
SNTPReq (@SNTPClient) Definire l’indirizzo del FB SNTPClient di gestione richiesta NTP. Se eNULL non viene effettuata la sincronizzazione con il server, utilizzando RTC del sistema.
NTPSyncTime (TIME) Tempo di attesa tra esecuzioni richieste NTP (Default 5 minuti).
Fault (BOOL) Attivo per un loop se errore esecuzione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
TimeZone (SINT) Fuso orario numero che indica la differenza in ore dell’ora locale rispetto al Tempo Coordinato Universale (UTC) riferito al meridiano di Greenwich. Per l’Italia il valore da definire è +1.
DaylightZone (USINT) Zona di cambio ora legale, il sistema provvede automaticamente al cambio di ora in base alla zona definita. Le zone sono 3: 0) Nessuna ora legale.1) Europa, ora legale da Aprile ad Ottobre. 2) USA, ora legale da Aprile a Novembre. (Per l’Italia impostare 1).
Locale (LOCAL_DATE) Definisce il formato data ritornato in pSDate.
pSDate (@UDINT) Definire l’indirizzo della variabile UDINT per visualizzazione data (Formato localizzato) su HMI. Se eNULL non viene gestita.
pSTime (@UDINT) Definire l’indirizzo della variabile UDINT per visualizzazione ora (Formato HH:MM:SS) su HMI. Se eNULL non viene gestita.
pSDTStruct (@WEINTEK_HMI_DATETIME) Definire l’indirizzo della struttura di tipo WEINTEK_HMI_DATETIME per variabili tempo su HMI. Se eNULL non viene gestita.
SNTPReq (@SNTPClient) Definire l’indirizzo del FB SNTPClient di gestione richiesta NTP. Se eNULL non viene effettuata la sincronizzazione con il server, utilizzando RTC del sistema.
NTPSyncTime (TIME) Tempo di attesa tra esecuzioni richieste NTP (Default 5 minuti).
Fault (BOOL) Attivo per un loop se errore esecuzione.
Errors (UDINT) Numero errori esecuzione.

Variazione data/ora da pannello
Gli oggetti Numeric sul pannello operatore possono oltre alla visualizzazione permettere anche l’impostazione dei valori. Avendo scelto il formato custom durante l’impostazione i simboli di separazione non sono più visualizzati quindi occorre impostare i dati mantenendo l’ordine ed il numero di cifre della visualizzazione. L’ora andrà quindi impostata sempre con 6 cifre 2 per l’ora, 2 per i minuti e 2 per i secondi, la stessa cosa per la data che andrà sempre impostata con 8 cifre 2 per il giorno, 2 per il mese e 4 per l’anno (L’ordine dei dati dipende dalla localizzazione).
Se definito il server NTP (Parametro SNTPReq) ed il server è attivo i valori impostati da pannello operatore non avranno effetto in quanto farà comunque riferimento l’ora NTP rilevata dal server. Nel caso si desideri operare solo con il real time clock del PLC basterà lasciare a eNULL SNTPReq.
Esempi
ST_WeintekHMIClock: Questo programma da eseguire in task Back provvede alla gestione della sincronizzazione tempo sul PLC e sul pannello operatore. Le variabili HMITime e HMIDate sono allocate in DB100 per poter essere gestite dal pannello operatore con l’ogetto Numeric utilizzando il formato di visualizzazione custom.
LogicLab (Ptp210, ST_WeintekHMIClock)
PROGRAM ST_WeintekHMIClock
VAR
HMIDate AT %MD100.16 : UDINT; (* HMI date (Localized) *)
HMITime AT %MD100.20 : UDINT; (* HMI time (HH:MM:SS) *)
HMIDTStruct AT %MD100.24 : WEINTEK_HMI_DATETIME; (* HMI Date/Time structure *)
NTPSvr : SNTPServer; (* SNTP server *)
SNTPReq : SNTPClient; (* SNTP client *)
HMIClock : WeintekHMIClock; (* Weintek HMI clock *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_WeintekHMIClock"
// *****************************************************************************
// Provides date and clock to synchronize HMI.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
// SNTP server settings.
NTPSvr.SpyOn:=TRUE; //Spy On
NTPSvr.Port:=123;
// SNTP client settings.
SNTPReq.SpyOn:=TRUE; //Spy On
SNTPReq.Port:=123; //NTP server port
SNTPReq.NTPServer:=ADR('ntp1.inrim.it'); //NTP server
// WeintekHMIClock settings.
HMIClock.SpyOn:=TRUE; //Spy On
HMIClock.TimeZone:=+1; //Timezone
HMIClock.DaylightZone:=1; //Daylightzone
HMIClock.Locale:=LOCAL_DATE#LDT_ITALY; //Date/Time format localize
HMIClock.pSDate:=ADR(HMIDate); //Pointer to date (Localized)
HMIClock.pSTime:=ADR(HMITime); //Pointer to time (HH:MM:SS)
HMIClock.pSDTStruct:=ADR(HMIDTStruct); //Pointer to Date/Time structure
HMIClock.pSNTPReq:=ADR(SNTPReq); //Pointer to SNTP request FB
HMIClock.NTPSyncTime:=T#5m; //NTP sync time
END_IF;
// -------------------------------------------------------------------------
// HMI CLOCK SUPPORT
// -------------------------------------------------------------------------
// Execute FBs.
NTPSvr.UTCTime:=TO_LDATE_AND_TIME(SysDateGetNs()); //UTC reference time (nS)
NTPSvr(Enable:=TRUE); //SNTP server
HMIClock(); //Weintek HMI clock
// [End of file]