| Autor |
Beitrag |
oOXTCOo
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 14:40
hallo!
ich habe folgenedes problem...
ich muss für einen f-bus frame immer zu einen hexwert einen hexwert addieren, ich denke das soll die größe des zu lesenden blocks darstellen.
wie kann ich mir jetzt die differenz ausrechnen, damit ich weiß mich welchen wert immer addiert wurde?
so sehen die frames aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| 4B 13 17 00 00 00 00 00 00 00 00 00 ED 23 7E 4B 13 17 00 02 00 00 00 01 00 00 00 39 34 7E 4B 13 17 00 02 00 00 00 02 00 00 00 F4 11 7E 4B 13 17 00 02 00 00 00 03 00 00 00 4F 0D 7E 4B 13 17 00 02 00 00 00 04 00 00 00 6E 5A 7E 4B 13 17 00 02 00 00 00 05 00 00 00 D5 46 7E 4B 13 17 00 02 00 00 00 06 00 00 00 18 63 7E 4B 13 17 00 02 00 00 00 07 00 00 00 A3 7F 7E 4B 13 17 00 02 00 00 00 08 00 00 00 5A CD 7E 4B 13 17 00 02 00 00 00 09 00 00 00 E1 D1 7E 4B 13 17 00 02 00 00 00 0A 00 00 00 2C F4 7E 4B 13 17 00 02 00 00 00 0B 00 00 00 97 E8 7E 4B 13 17 00 02 00 00 00 0C 00 00 00 B6 BF 7E 4B 13 17 00 02 00 00 00 0D 00 00 00 0D A3 7E 4B 13 17 00 02 00 00 00 0E 00 00 00 C0 86 7E 4B 13 17 00 02 00 00 00 0F 00 00 00 7B 9A 7E 4B 13 17 00 02 00 00 00 10 00 00 00 23 EB 7E 4B 13 17 00 02 00 00 00 11 00 00 00 98 F7 7E |
läuft bis über 4000 commands...
das sind die gemeinten hexwerte:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ED 23 39 34 F4 11 4F 0D 6E 5A D5 46 18 63 A3 7F |
wie kann ich jetzt den hexwert erfahren, der benutzt wurde um zb von "ED 23" auf "39 34" zu kommen...? ich weiß das immer mit dem selben hexwert addiert wird, doch wie errechne ich den wert damit ich die schleife machen kann die mir dann die 4000 commands erstellt?
start mit:
ED 23 + fraglicher hexwert = 39 34
39 34 + fraglicher hexwert = F4 11
F4 11 + fraglicher hexwert = 4F 0D
usw... den fraglichen hexwert muss ich wissen...
bitte um hilfe!
danke...
grüße
hari
Moderiert von Narses: Titel geändert.
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Zuletzt bearbeitet von oOXTCOo am So 12.07.09 14:44, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.07.09 14:44
Du kannst einen String mit einem Hexwert mit StrToInt in eine Zahl umwandeln und normal damit rechnen. Du musst nur vor den String noch ein '$' schreiben vorher.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 14:46
jaenicke hat folgendes geschrieben : | | Du kannst einen String mit einem Hexwert mit StrToInt in eine Zahl umwandeln und normal damit rechnen. Du musst nur vor den String noch ein '$' schreiben vorher. |
ja die funktion habe ich am laufen...
hatte es schonmal für ein anderes prorgamm geschrieben, diese schleife verwende ich jetzt, nur weis ich nicht mehr wie ich den wert mit dem addiert wird heraus bekomme...
oder meist du, ich kann einfach beide hexwerte zu dezimal wandeln und dann subdrahieren und bekomme dann die diffrenez? die different dann wieder zurück nach hex und ich hab sie?
ich müsste ja auch direkt in hex subdrahieren können und dann direkt den hexwert bekommen oder?
ich teste das mal...
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.07.09 14:53
Richtig. Du könntest natürlich die Subtraktion auch manuell mit den hexadezimalen Buchstaben machen.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 15:08
jaenicke hat folgendes geschrieben : | | Richtig. Du könntest natürlich die Subtraktion auch manuell mit den hexadezimalen Buchstaben machen. |
klappt nicht, komme nie auf dem nächsten wert des fbus frames...
komisch...
ED23 - 3934 = B3EF <<< sollte dann die differenz sein
wenn ich jetzt versuche auf 3934 zu kommen passiert das:
ED23 + B3EF = A113 sollte aber 3934 sein ?!?
ach... minus rechnen! dann komm ich drauf...
ED23 - B3EF = 3934
das dürfte rückwerts laufen mit diesem f-bus frame...
nein denkfehler, dann passt das nächste ergebnis wieder nicht
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.07.09 15:12
oOXTCOo hat folgendes geschrieben : | | ED23 - 3934 = B3EF <<< sollte dann die differenz sein |
Ist sie doch auch.
Normale Subtraktion, da kommt das doch exakt raus.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 15:15
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
ja aber die selbe summe muss ja dann wieder mit dem nächsten das: F4 11 ergebnis liefern...?
--- Moderiert von Narses: Beiträge zusammengefasst---
ich komm einfach nicht drauf... hat wer eine idee?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 12.07.09 16:01
Ich versteh das Problem nicht.
Du möchtest von ED 23 auf 39 34 kommen, korrekt?
3934 - ed23 = 4c11
ed23 + 4c11 = 3934
?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 16:30
Xentar hat folgendes geschrieben : | Ich versteh das Problem nicht.
Du möchtest von ED 23 auf 39 34 kommen, korrekt?
3934 - ed23 = 4c11
ed23 + 4c11 = 3934
? |
ja genau, und dann von 3934 weiter zu F4 11 und davon weiter 6E 5A ...
damit ich in einer schleife diese fbus frames bauen kann... es durchläuft zb 4000 mal die schleife und bei jedem durchlauf wird am anfang die sequence nummer (das funktioniert ja) verändert und der zeite wert ist diese eben.
wenns nur ein paar wären würde ichs einfach so wie sie sind nehmen, aber es sind über 4000 solche frames...
ich hatte das schonmal gebraucht, da musst ich einfach nur einen hexwert addieren, das klappt hier aber nicht...
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 12.07.09 16:45
Ich versteh das Problem immer noch nicht.
Warum klappt es hier nicht, einfach einen Hexwert zu addieren? Musst dann natürlich den Übertrag wegschmeißen, aber sonst passt das doch.
Ist doch simpelste Addition / Subtraktion.
von 3934 -> F411 wären es BADD, von F411 -> 6e5a = 7a49 usw.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 16:52
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
nein, es muss ja ein fixer wert sein, denn ich immer wieder addiere...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ED 23 + 4C11 = 39 34 + 4C11 = 8578 sollte aber F411 sein F4 11 4F 0D 6E 5A D5 46 18 63 A3 7F |
es soll so funktionieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| for I:=0 to 4999 do begin
Value1:=Value1+Value2;
memo1.lines.add('4B 13 17 00 02 00 00 00 '+SEQUENCE+' 00 00 00 '+ inttostr(Value1)+' 7E');
end; |
vereinfacht geschrieben, statt ins memo werden die werte in den buffer geschrieben und dann zum gerät gesendet, dann wird von der antwort des gerätes das ack frame gesendet, und dann wieder der nächste frame...
die hexwerte die ich brauche müssen dann immer den nächsten wert für den nächsten frame ergeben, sonst passt das ergebnis nicht bzw. nimmt das gerät das ich ansteuere den frame nicht an...
ich kann damit den speicher meines gerätes auslesen, der aber sehr gross ist und zirka 4000 frames braucht bis der speicher komplett ausgelesen ist...
ich hatte das gleich prinzip mal für nokia geräte gemacht womit man den permanent memory auslesen konnte, da funktionierte es haar genauso, nur das es mit addieren super funktioniert hat, aber hier weiß ich nicht wie ich immer auf die nächste summe komme...
es kann ja auch sein das mal mehr mal weniger frames gebaut werden müssen je nachdem wie gross der speicher ist den ich auslesen möchte...
hoffe ich habs jetzt verständlich rüber gebracht...
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Zuletzt bearbeitet von oOXTCOo am So 12.07.09 17:00, insgesamt 1-mal bearbeitet
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 12.07.09 16:58
Ach, jetzt versteh ich. Sorry, denkfehler.
Es soll also immer mit dem gleichen Wert addiert werden, und nicht jedesmal neu berechnet?
Dann würd ich fast sagen: geht nicht.
Wie wir ja nun schon herausgefunden haben, sind die Abstände zwischen den Werten unterschiedlich groß.
Sicher, dass das so funktioniert? Gibt doch bestimmt ne Protokoll Spezifikation oder sowas.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 17:01
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
ja genau
die befürchtung habe ich auch, aber irgendwie muss es gehen, ich habe das fbus frame gesnifft und im programm kann man einstellen von wo bis wo man auslesen möchte, der frame muss sich doch irgendwie zusammensätzten lassen?
also du meinst das es einen algo dafür geben muss? wie gesagt bei nokia geräten ist es einfach $08 immer dazu und es passt... ich werde mal den prorgammierer von qmat anschreiben, möglicherweise gibt er mir ja einen tipp...
danke trotzdem für deine hilfe, wenn dir nochwas einfallen sollte...
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Zuletzt bearbeitet von oOXTCOo am So 12.07.09 17:06, insgesamt 1-mal bearbeitet
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 12.07.09 17:04
Frag den Hersteller des Gerätes, ob das Protokoll öffentlich ist, bzw. frag mal ne Suchmaschine, ob andere Leute schonmal mit diesem Gerät rumgespielt haben.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 12.07.09 17:08
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
habe ich schon, ist ein qualcomm chip eines usb modems... dessen efs müsste ich auslesen.
mein programm funktiniert zwar, da ich für jede firmware nun den passenden frame rausgesucht habe, ich wollte es aber so machen, so dass programm für firmware updates gerüstet ist, und einfach den komplett efs ausliest, den ich dann auswerten kann und die gewünschte position dann suchen kann.
im moment lade ich genau den teil zur passenden firmware raus und werte diesen aus, das ist aber sehr mühsam und es gibt zick firmware versionen...
das bedeutet kommt eine neue firmware raus, muss ich das programm wieder erweitern, würde ich den kompletten efs lesen können, habe ich 100% die gewünschte position drinn die ich dann nur aus dem buffer raus suchen müsste...
mir fällt da nochwas ein, ich muss mir das mal in ascii ansehen... vieleicht werden gar keine zahlen addiert, vieleicht sind es einfach nur buchstaben und es geht nach bestimmte ascii zeichen, da es doch at commands sind und keine fbus frames eigentlich...
in ascii siehts auch nach nix aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| K...........í#~. K...........94~. K...........ô.~. K...........O.~. K...........nZ~. K...........ÕF~. K............c~. K...........£.~. K...........ZÍ~. K...........áÑ~. K...........,ô~. K...........—è~. K...........¶¿~. K............£~. |
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt und nachfolgenden, leeren Beitrag gelöscht.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 12.07.09 18:26
Einen Post nachträglich unkenntlich machen, ist nicht gerade "nett"..
Hatte den noch lesen können. War eine Vermutung, dass es sich bei den Werten um eine CRC handelt.
Ob das stimmt, kann ich nicht genau sagen. Hab grad keine Lust, das nachzubauen, wäre aber auch möglich.
Für Delphi gibt es fertige Funktionen, um die CRC zu berechnen. Kansnte ja mal suchen und ausprobieren.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: Mo 13.07.09 11:58
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
ich hatte den post unleserlich gemacht, da ich vom programmierer den richitigen tipp bekommen habe und meiner flasch war... war also keine böse absicht...
ist ein crc16 ... ich habe glaube ich einen falschen crc geposted, und habe dann den richitgen gefunden, darum habe ich ihn sofort gelöscht... ums genau zu sagen: CRC16 CCITT habe mir noch nicht angeshene was da der unterschied ist...?
das sollte der richitge sein (hoffe ich):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| WORD crc16_table2[CRC_TAB_SIZE] = ;
WORD crc_16_l_step2(WORD crc, byte data)
DWORD CSerial::CalcCRC16(byte* buf_ptr, DWORD len, BOOL value) |
habt ihr sowas fertig im forum?
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mo 13.07.09 12:33
Ich glaube nicht, daß Deine Angaben stimmen. Alle Deine Daten sind mit CRC-16/X-25 kompatibel. (Dein Polynom 0x1189 aus crc16_table2 wäre auch äußerst ungewöhnlich). Beschreibung zu CRC-16/X-25 u.a. hier CRC-Katalog und Pascal/Delphi-Quellcode und Beispiel-EXEs hier home.netsurf.de/wolf...ardt/crchash_de.html.
Gammatester
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mo 13.07.09 14:27
Edit: Um Verwirrung zu vermeiden entfernt.
Beste Grüße
Zuletzt bearbeitet von Tastaro am Mo 13.07.09 15:51, insgesamt 1-mal bearbeitet
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mo 13.07.09 15:01
Und was soll die Unit uCrc hier? Die crc16-Funktionen sind doch 'CRC-16/ZMODEM'. Beispielsweise liefert Deine Unit den Wert $66DC für den ersten Datensatz (statt $23ED)!
Gammatester
|
|