Home › Forum › Programmazione IEC 61131 (LogicLab) › Funzione per la conversione epoch time in stringa data/ora
- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 11 anni, 1 mese fa da Sergio Bertana.
-
AutorePost
-
Marzo 11, 2013 alle 2:29 pm #35337EmilianoPartecipante
Vorrei utilizzare SysETimeToDate con una funzione in ST, praticamente dovrei convertire una data/ora in stringa, come per esempio:
OString:=Converti(data_in_epoch_time,ADR(strout));
Quindi OString dovrà essere del tipo: 05/03/2013 17:50:20, ma al momento della compilazione mi da questo errore:
etd – error A4110: SysDateToETime => Invalid data type
etd dichiarata nella funzione come VAR_INPUT Type SysETimeToDate (primo parametro della funzione ‘data_in_epoch’)
il tutto funziona come programma, ma se creo la funzione non va! Ci sono degli sbocchi o devo abbandonare l’utilizzo della funzione per quanto riguarda le date ?Marzo 11, 2013 alle 2:35 pm #37591Sergio BertanaAmministratore del forumIl problema è che tu stai istanziando una FB la SysETimeToDate in una funzione. Nella normativa IEC 611131 le funzioni non possono avere al loro interno dati statici, quindi per realizzare quello che tu vuoi, devi per forza realizzare un blocco funzione. Ecco il listato di una FB che ha in entrata una variabile di tempo in Epoch time ETime ed una uscita con una stringa formattata di data ed ora OString.
ETToD(EpochTime:=ETime); (* Valore di epoch time *)
i:=SysVarsnprintf(ADR(OString[0]), 4, ‘d/’, USINT_TYPE, ADR(ETToD.Day));
i:=SysVarsnprintf(ADR(OString[3]), 4, ‘d/’, USINT_TYPE, ADR(ETToD.Month));
i:=SysVarsnprintf(ADR(OString[6]), 6, ‘d ‘, UINT_TYPE, ADR(ETToD.Year));
i:=SysVarsnprintf(ADR(OString[11]), 4, ‘d:’, USINT_TYPE, ADR(ETToD.Hour));
i:=SysVarsnprintf(ADR(OString[14]), 4, ‘d:’, USINT_TYPE, ADR(ETToD.Minute));
i:=SysVarsnprintf(ADR(OString[17]), 3, ‘d’, USINT_TYPE, ADR(ETToD.Second));Allego stampa e programma sorgente di un semplice porogramma di test.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.