Home › Forum › Terminali operatore (Weintek) › Conversione tra Epoch time e data/ora
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 3 anni, 2 mesi fa da Sergio Bertana.
-
AutorePost
-
Febbraio 18, 2021 alle 7:58 am #58997StefanoPartecipante
Ho un sistema basato su terminale serie iE ed uno SlimLine. Nel terminale ho un input numerico dove imposto un timer in ore (che può essere anche 60 ore). L’oggetto input scala il valore in secondi ed è appoggiato ad una variabile sullo SlimLine mappata via Modbus. Io dovrei visualizzare a video giorno e ora in cui scadrà questo timer.
La cosa semplice sarebbe salvare la data/ora nel momento in cui parte il timer, convertirla in Epoch (sul sito Weintek c’è la macro già fatta), sommare i secondi a cui è stato impostato il timer e riconvertire in data ora. Non ho trovato però una macro pronta che possa convertire da Epoch a data. Esiste qualcosa di già fatto?
In alternativa potrei fare l’operazione su SlimLine e andarmi già a leggere il dato, ma se si riuscissi a farlo da pannello senza toccare il programma del PLC sarebbe preferibile.
Febbraio 18, 2021 alle 8:04 am #59084Sergio BertanaAmministratore del forumHo provato a sentire anche Weintek ma non hanno una macro che converte da Epoch time a data ora. Credo che come hai detto tu la cosa più semplice sia fare transitare i dati sullo SlimLine e poi utilizzare i blocchi funzioni SysDateToETime, SysETimeToDate.
Sperando possa essere utile ad altri visitatori del forum allego il dimostrativo fornito da Weintek per la conversione da Data/Ora in Epoch ed ecco la macro utilizzata.
macro_command main() short yy, mm, dd, hh, min, ss unsigned short md[13] = {0,31,59,90,120,151,181,212,243,273,304,334} unsigned short md_leap[13] = {0,31,60,91,121,152,182,213,244,274,305,335} unsigned int epoch = 0 unsigned int a,b,c,d,e,f GetData(yy, "Local HMI", LW, 100, 1) GetData(mm, "Local HMI", LW, 101, 1) GetData(dd, "Local HMI", LW, 102, 1) GetData(hh, "Local HMI", LW, 103, 1) GetData(min, "Local HMI", LW, 104, 1) GetData(ss, "Local HMI", LW, 105, 1) yy = yy - 1900 mm = mm-1 if yy%4==0 then dd = md_leap[mm] + dd - 1 else dd = md[mm] + dd - 1 end if a = (yy-70) * 31536000 b = (yy-69) / 4 * 86400 c = (yy-1) /100 * 86400 d = (yy + 299) / 400 * 86400 epoch = ss + min*60 + hh*3600 + dd*86400 + a + b - c + d SetData(epoch, "Local HMI", LW, 0, 1) end macro_command
-
AutorePost
- Devi essere connesso per rispondere a questo topic.