Autor |
Beitrag |
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 17:48
Hallo ich melde mich mal wieder und habe folgendes Problem.
Ich bekomme von einer Steurung über die serielle Schnittstelle folgenden hex String geliefert:
070513192311070800FA <-- Das ist die Zeit und das Datum
dann eine Sekunde drauf sieht das ganze dann so aus:
070613192311070800FB <-- also er zählt einfach immer eins drauf so wie ich das mitbekommen habe.
In dec. wäre es diese Ziffern: 070919253517070800254
Nun weis ich nicht was für eine Formatierung das ist.
Sind das die Sekunden von irgendeinen bestimmten Punkt an? Also sowas wie unix timestamp?
also mein aktueller unixtimstamp vom PC hat nichtmal so viele stellen deshalb weiß ich nicht obs einfach alle sekunden sind.
Gibts routinen mit denen ich testen kann was es sein könnte also einfach mal einsetzen und er spukt mir dann was aus und ich kann dann abschätzen obs stimmt oder nicht?
Ich bin auf dateutils gestoßen aber da meine Delphi hilfe nicht funktioniert weis ich nicht wie ichs eventuell anwenden kann.
Also mit ShowMessage(IntToStr(DateTimeToUnix(7750070919253517070800254)));
hab ichs probiert, kommt aber ne fehlermeldung.
Ich bin ratlos wie der String formatiert ist.
Zuletzt bearbeitet von daywalker0086 am Do 27.11.08 18:35, insgesamt 1-mal bearbeitet
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Do 27.11.08 18:11
Also wenn das Sekunden sind, dann ist das einige 10 Millionen mal die Lebenszeit des Universums.
Der TimeStamp müsste dann schon von einen ziemlich mächtigen Stempler kommen
Versuche doch mal (vom Ende der Hexzahl beginnend) immer 2 Zeichen mehr zu nehmen und die resultierende Zahl mit der aktuellen Uhrzeit (Sekunden ab 0 Uhr) oder einem bekannten TimeStamp zu vergleichen.
Außerdem (oder ist es ein Schreibfehler?) ändert sich in der Hexzahl noch eine zweite Ziffer.
ub60
Edit: Wenn Dir jemand helfen soll, wäre es sinnvoll, mehrere Werte für den String zusammen mit der genauen aktuellen Zeit des Computers anzugeben (so genau wie möglich).
|
|
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 18:34
achso die ersten vier ziffern müssen weg hatte ich vergessen, das sind nur steuerzeichen habs geändert.
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 27.11.08 18:34
Das letzte Byte scheint eine Prüfsumme zu sein.
Ferner komm ich, wenn ich di ersten 4 Bytes als Unix-Timestamp betrachte auf etwa 41 Jahre.
Hast Du zufällig etwas mehr Informationen zu dieser Steuerung? Typbezeichnung? Protokoll-Beschreibung? ... Evtl. könnte es auch helfen, verschiedene Beispiel-Paare von gesendetem String und dessen Übersetzung zu haben (sofern Du da was hinbekommst).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 18:38
leider hab ich keine genaue Uhrzeit und datum dazu und ein Protokoll gibts auch nicht, man soll ein fertiges Programm zu kaufen um die Zeit zu sehen. Na mal schauen wie gesagt die ersten zwei ziffern mussten weg was ich oben schon geändert hab jetzt siehts schon ein wenig besser aus
edit. mit der Prüfsumme hast du warscheinlich recht also fällt die auch noch weg, es wird langsam.
es müsste letzten sonntag sein zwischen 17 und 19:00 .
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 27.11.08 18:42
Könntest Du bitte für eine Minute eine Aufzeichnung der Time-Stamps machen, die da geliefert werden, hab eine Vermutung in Richtung BCD:
ss:nn:HH ?? DD.MM.YY
Dann könnte das schon fast passen ...
P.S.: Bitte mal nicht im ersten Posting am Timestamp rumeditieren, mach das lieber in ner Ergänzung, wo Du die bekannten Bytes einträgst:
Ausgangspunkt war:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| 4D32 Protokoll-Kopf\Header-Feld 07 Längenangabe des Pakets 06 Sekunde (BCD) ??? 13 Minute (BCD) ??? 19 Stunde (BCD) ??? 23 ??? (Könnte Tag sein, aber unbekannt) 11 ??? (Könnte sowohl Monat als auch Tag sein) 07 ??? (DayOfWeek oder Jahr) 08 ??? (Könnte Jahr sein) 00FB Prüfsumme (16-Bit Byte-Summe über gesamtes Paket, ohne Prüfsummenbytes) |
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 18:51
Also ich hab hier ein paar mitschnitte:
4D320756121923110708014A
4D320757121923110708014B
4D320758121923110708014C
4D320759121923110708014D
4D32070013192311070800F5
4D32070113192311070800F6
4D32070213192311070800F7
4D32070313192311070800F8
4D32070413192311070800F9
4D32070513192311070800FA
4D32070613192311070800FB
4D32070713192311070800FC
4D32070813192311070800FD
4D32070913192311070800FE
4D3207101319231107080105
4D3207111319231107080106
4D3207121319231107080107
4D3207131319231107080108
4D3207141319231107080109
4D320715131923110708010A
4D320716131923110708010B
4D320717131923110708010C
|
|
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 18:56
könnte das 23.11.08 sein 19:13 7. Tag der Woche ??? also bei dem string: 4D32 07 09 13 19 23 11 07 08 00 FE
Leider hab ich kein String von nem anderen Tag
Zuletzt bearbeitet von daywalker0086 am Do 27.11.08 19:11, insgesamt 1-mal bearbeitet
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 27.11.08 19:10
Jap. Würde rein Kalendertechnisch passen.
Und auch die Darstellung via BCD bestätigt sich bei deinem Mitschnitt (sieht man an dem Minutenwechsel).
Halten wir also als Stand fest:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| 4D32 Protokoll-Kopf\Header-Feld 07 Längenangabe des Pakets 06 Sekunde (BCD) 13 Minute (BCD) 19 Stunde (BCD) 23 Tag (BCD) 11 Monat (BCD) 07 DayOfWeek (BCD, Mo=1,...,So=7) 08 Jahr (BCD) 00FB Prüfsumme (16-Bit Byte-Summe über gesamtes Paket, ohne Prüfsummenbytes) |
Und? Um welches proprietäre Gerät handelt es sich eigentlich *G*
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 19:21
Sooo ich danke euch für eure Mithilfe und hab es jetzt erstmal so gelöst:
uhrzeit.Caption:= Daten[6]+'.'+Daten[7]+'.'+Daten[9]+' '+Daten[5]+':'+Daten[4];
Daten[] ist mein Array wo die einzelnen hexwerte gespeichert sind
bei dem 4D320716131923110708010B
kommt dann 23.11.08 19:13 Raus.
Das sollte so passen.
Es handelt sich übrigens um eine Heizkesselsteuerung mit serieller Schnittstelle
|
|
daywalker0086
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Do 27.11.08 19:33
Jetzt hab ich noch ein kleines Problem ich wollte noch den tag anzeigen lassen also hab ich das so gemacht: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| case Daten[8] of 1: tag:= 'Mo'; 2: tag:= 'Di'; 3: tag:= 'Mi'; 4: tag:= 'Do'; 5: tag:= 'Fr'; 6: tag:= 'Sa'; 7: tag:= 'So'; uhrzeit.Caption:= tag+' '+Daten[6]+'.'+Daten[7]+'.'+Daten[9]+' '+Daten[5]+':'+Daten[4]; |
Das geht ja aber ned weil ich bei der Case anweisung ein ordinaltyp brauche, habt ihr ne andere Idee oder soll ich if anweisungen schreiben?
Edit: hat sich erledigt: case strtoint(Daten[8]) of
bringt mir das gewünschte ergebnis, warum ich da nicht gleich drauf gekommen bin
|
|