Forum: PC-Programmierung Zeitstempel 18 Stellig aus Codesys SPS Programm (sqlite Datenbank)


von Pindrei P. (pindrei)


Lesenswert?

Hallo,

ich schreibe aktuell ein kleines php Skript, welches Daten aus eine 
Datenbank auslesen und anzeigen soll.
Leider werde ich aus der Information, die in der Spalte mit dem 
Zeitstempel hinterlegt sind nicht schlau. Als Zeitstempel ist z.B. 
folgende Zahl:

131072649970520000

als Integer hinterlegt und beinhaltet das aktuelle Datum und die 
Uhrzeit. Erkennt jemand das Zahlenformat? Für ein Unix Zeitstempel ist 
die Zahl zu lang (>2038).

Bei der Datenbank handelt es sich um eine von Codesys 3.5 (SPS) 
erstellte SQLite Datenbank. Diese beinhaltet Alarmmeldungen mit 
Zeitstempel.

MfG

pindrei

von Peter II (Gast)


Lesenswert?

Pindrei P. schrieb:
> Erkennt jemand das Zahlenformat?

schau doch einfach mal wie der Zeitstempel nach 1 stunde bzw. 1 Minute 
sich ändert. Dann sollte es recht klar sein was es ist.

von SR (Gast)


Lesenswert?

Pindrei P. schrieb:
> 131072649970520000

Mach doch mal so viele Stellen weg, dass es was sinnvolles wird. 13XXXX 
ist IMHO so Mitte 2012 - 2014 gewesen als Timestamp.

Die restlichen Stellen sind halt dann noch paar "zerquetschte" Sekunden.

von Pindrei (Gast)


Lesenswert?

SR schrieb:
> Mach doch mal so viele Stellen weg, dass es was sinnvolles wird. 13XXXX
> ist IMHO so Mitte 2012 - 2014 gewesen als Timestamp.
> Die restlichen Stellen sind halt dann noch paar "zerquetschte" Sekunden.

Mmh, das habe ich schon versucht. Ich habe es auch schon mit einen 
Faktor versucht. Leider ohne Erfolg. Ich habe dir Zeit beobachtet, die 
70 änderte ich im Sekundentakt. Jedoch komme ich da nicht weiter. 
Vermutlich ist es ein SPS Datentyp, der aus zwei Datentypen 
zusammengesetzt ist......

von Peter II (Gast)


Lesenswert?

Pindrei schrieb:
> Mmh, das habe ich schon versucht. Ich habe es auch schon mit einen
> Faktor versucht. Leider ohne Erfolg. Ich habe dir Zeit beobachtet, die
> 70 änderte ich im Sekundentakt. Jedoch komme ich da nicht weiter.
> Vermutlich ist es ein SPS Datentyp, der aus zwei Datentypen
> zusammengesetzt ist......

dann mache uns mal ein Tabelle wo du mehre Beispiele zeigst. Jeweils die 
echte Zeit zu dem Wert.

von SR (Gast)


Lesenswert?

Welches Datum ist denn o.g. Beispiel?

von Markus V. (valvestino)


Lesenswert?

Schreibe doch einfach mal zwei Datensätze mit einem definierten 
Zeitstempel, z.B. 01.01.2016T00:00:00.000 und 02.01.2016T00:00:00.000, 
schaue in der DB nach, welche Integerwerte dort hinterlegt sind, bilde 
deren Differenz und prüft, ob das Ergebnis in ein Format 
Sekunden/Millisekunden/Microsekunden/... pro Tag passt. Diese Formate 
sind eigentlich recht gängig.

Grüße
Markus

von cri (Gast)


Lesenswert?

10 picosekunden timestamp, ven 15 lug 2011, 12.41.39, CEST

von cri (Gast)


Lesenswert?

Eher sind es unix time, millisekunden, CPU/PROZESS-ID

von Mark B. (markbrandis)


Lesenswert?

Pindrei P. schrieb:
> Bei der Datenbank handelt es sich um eine von Codesys 3.5 (SPS)
> erstellte SQLite Datenbank. Diese beinhaltet Alarmmeldungen mit
> Zeitstempel.

Ich gehe mal stark davon aus dass bereits Code existiert, der diese 
Werte aus der Datenbank ausliest. Ansonsten wären diese Daten "write 
only" und somit auch recht nutzlos ;-)

Wie rechnet denn der vorhandene Code die Werte um?

: Bearbeitet durch User
von Pindrei (Gast)


Lesenswert?

Gute Frage, da gibt es keine Informationen drüber. Der Zeitstempel war 
von heute zum Zeitpunkt meiner Fragestellung. Ich werde morgen mal eine 
Tabelle abfertigen. Mittlerweile vermute ich das ich den Wert teilen 
muss und die Informationen getrennt sind......

von Wurfbrot (Gast)


Lesenswert?

FILETIME

von Pindrei (Gast)


Lesenswert?

Wurfbrot schrieb:
> FILETIME

Ui, das sieht gut aus.
http://www.silisoftware.com/tools/date.php
Ich werde es morgen direkt testen und dann hoffen, dass es dafür eine 
php Funktion gibt. Auf 100er nanosekunden seit 1601 wäre ich nicht 
gekommen. Eventuell findet ja ein Archäologe irgend wann solch eine alte 
Datei....

von Pindrei P. (pindrei)


Lesenswert?

Ja FILETIME passt. Die Umrechnung lautet:

            $zeit = floatval($FILETIME]);
            $zeit = $zeit / 10000000.00 - 11644473600.00;
            echo  date("Y-m-d H:i:s",$zeit) ;

....natürlich bin ich zuerst in die 32/64bit Falle getappt ;-)

von Mark B. (markbrandis)


Lesenswert?

Pindrei P. schrieb:
> Ja FILETIME passt. Die Umrechnung lautet:
>
>             $zeit = floatval($FILETIME]);
>             $zeit = $zeit / 10000000.00 - 11644473600.00;
>             echo  date("Y-m-d H:i:s",$zeit) ;

Übrigens darf man auch in PHP den Konstanten einen Namen geben. Sonst 
weiß später keine Sau mehr, wie man gerade auf diese Werte gekommen ist 
;-)

von Pindrei P. (pindrei)


Lesenswert?

Mark B. schrieb:
> Übrigens darf man auch in PHP den Konstanten einen Namen geben. Sonst
> weiß später keine Sau mehr, wie man gerade auf diese Werte gekommen ist
> ;-)

OK da muss ich dir recht geben, noch sinnvoller wäre eine Funktion zur 
Umrechnung ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.