TIA UnixTime to DTL

Atlas

Level-2
Beiträge
65
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

hat jemand eine Lösung für eine S7-1200 CPU um einen Timestamp im UNIX Format (UDINT) nach DTL zu wandeln?

Ich finde einige Lösungen um DTL zu UNIX Time zu wandeln. Aber leider nichts um UNIX Time zu DTL konvertieren...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so hatte ich das mal gelöst, man müsste es quasi nur invertieren.
die Lösung könnt Ihr ja dann wieder hier posten :-)

Code:
FUNCTION "DTL_TO_UNIX" : DInt
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      dateTime {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;   // date and time tag
   END_VAR
   VAR_TEMP 
      temp_LDT : LDT;   // need to format date and time into LDT
   END_VAR
   VAR CONSTANT 
      NANO_SECOND_TO_SECOND : LInt := 1000000000;   // factor to calculate from nanasecont into second
   END_VAR

BEGIN

 // convert DTL to LDT, becausethe beginning of LDT is based on the unix time stamp
 #temp_LDT := DTL_TO_LDT(#dateTime);
 // convert LDT to LInt, divide it with the constand from Nanosecond into seconds
 // convert from LInt to DInt --> Unix format
 #DTL_TO_UNIX := LINT_TO_DINT(LDT_TO_LINT(#temp_LDT) / #NANO_SECOND_TO_SECOND);
 
 RETURN;
END_FUNCTION
 
Auaaaaa, Asche auf mein Haupt, die 1200 hab ich glatt überlesen.
Die 1200 unterstützt kein LDT, ich hatte es mal so auf einer 1500 gelöst.

Dann die Lösung nach der Wiki Methode oder aus OSCAT :-)
Danke für den Hinweis!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Geht denn Dein Code mit DTL_TO_LDT und auch die eigentlich gesuchte "quasi invertierte" Lösung mit LDT_TO_DTL auch mit der hier geforderten S7-1200? Falls nicht, dann gäbe es schon eine Function DINT_DT in OSCAT oder man könnte den in Wikipedia gezeigten C-Quellcode UnixzeitNachDatumZeit() nach SCL umsetzen.

Harald

OMG ich hatte die beiden Bausteine schon seit Ewigkeiten im Projekt, aber nie so genau hinterfragt was die genau für eine Aufgabe hatten :ROFLMAO:

Danke PN/DP und selbstverständlich an alle anderen Helfer ;-) Jetzt klappt es mit Unix to Date&Time ;-)
 
Zuletzt bearbeitet:
zwar schon alt
Da ich aber gerade auch danach gesucht habe, und zuerst hier gelandet bin.

In der Siemens Bibliothek mit generellen Funktionen (LGF)
Gibt es die zwei Bausteine, die auch auf einer 1200er laufen

LGF_DTLToUnixTime
LGF_UnixTimeToDTL

 
Zurück
Oben