Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: 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 :D
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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];//es wird ja bei null angefangen zu zählen
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
case Daten[8of
    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 :gruebel: