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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Pindrei P. (pindrei)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht lesenswert
Welches Datum ist denn o.g. Beispiel?

von Markus V. (valvestino)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
10 picosekunden timestamp, ven 15 lug 2011, 12.41.39, CEST

von cri (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Eher sind es unix time, millisekunden, CPU/PROZESS-ID

von Mark B. (markbrandis)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
FILETIME

von Pindrei (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.