Hallo Leute, ich versuche seit einiger Zeit eine Reihe von Sensoren auszulesen bzw. zu parametriesieren. Kommunikation via seriell. Protokoll usw. ist mir bekannt. Es hapert im Moment eigentlich nur an der Checksum bzw. das was ich dafür halte. Habe ein Bild angehängt mit 2 Datenblöcken aus dem Sensor. Alles in grün sind Nutzdaten welche ich kenne und zuordnen kann. Die 1. Zeile besteht aus "S" für Sensor, Typ und Version. Diese Daten fließen wohl nicht in die Checksum ein. Der Rest in Grün wohl schon. Rot ist die Checksum. Ändert sich mit jeder Änderung der Nutzdaten. Und zwar recht einfach. Erhöhe ich ein Byte um 1, so wird auch die Checksum um 1 erhöt. Muss also was einfaches sein. Kein CRC usw. Zur Verdeutlichung habe ich einen zweiten Block angefügt welcher genau um ein Byte verändert ist. Dieses Byte wurde nur um 1 hochgezählt. Hier sieht wie die Checksum dann ebenfalls um 1 erhöht ist. Habe schon diverses versucht (Bytes summieren und dann Mod 255 usw). Außerdem finde ich die Anordnung sehr merkwürdig. Warum steht die Checksum derart in der Mitte? Jede Zeile definiert einen Satz Parameter für einen Sensorwert (Alarmschwelle, Adressen usw.) Die unterste Zeile enthält weitere Optionen. Alles ohne Hintergrundfarbe kann ich nicht zuordnen und ändert sich auch meist nicht. Jemand eine Idee wie sich die Checksum (rot) hier berechnet? Kann gerne noch weitere Blöcke erzeugen. gruß cyblord
cyblord ---- schrieb: > Rot ist die Checksum. Ändert sich mit jeder Änderung der Nutzdaten. Und > zwar recht einfach. Erhöhe ich ein Byte um 1, so wird auch die Checksum > um 1 erhöt. Muss also was einfaches sein. Kein CRC usw. > Kann gerne noch weitere Blöcke erzeugen. Na dann mach das mal. Ist doch ganz einfach, wenn du schon festgestellt hast, daß eine Erhöhung um 1 auch die CS um 1 erhöht, dann ist es doch naheliegend, erstmal herauszufinden, ob dies ein allgemein gültiges Gesetz ist. Sprich: du läßt das Byte von 0..255 durchlaufen und schaust, was mit der Checksum passiert. Läuft die auch regulär durch (mit einem Wraparound irgendwo natürlich), dann ist das Problem bereits gelöst, denn du hast mit der Stelle, an der der Wraparound erfolgt, auch gleichzeitig die Konstante gefunden, die zu deinem Testbyte addiert werden muß, um auf die CS zu kommen. Dann probierst du dasselbe mit dem nächsten Byte. usw. Ergibt sich überall dasselbe Ergebnis, ist das Gesamtproblem gelöst. Du addierst sämtliche gefundenen Konstanten und hast damit die Konstante für's Gesamtsystem gefunden. Vermutlich wirst du aber feststellen, daß es doch nicht so einfach ist.
c-hater schrieb: > cyblord ---- schrieb: > >> Rot ist die Checksum. Ändert sich mit jeder Änderung der Nutzdaten. Und >> zwar recht einfach. Erhöhe ich ein Byte um 1, so wird auch die Checksum >> um 1 erhöt. Muss also was einfaches sein. Kein CRC usw. > >> Kann gerne noch weitere Blöcke erzeugen. > > Na dann mach das mal. Ist doch ganz einfach, wenn du schon festgestellt > hast, daß eine Erhöhung um 1 auch die CS um 1 erhöht, dann ist es doch > naheliegend, erstmal herauszufinden, ob dies ein allgemein gültiges > Gesetz ist. Sprich: du läßt das Byte von 0..255 durchlaufen und schaust, > was mit der Checksum passiert. So einfach ist das nicht. Viele Bytes können nur Werte von 0-15 oder 0xFF annehmen. > Läuft die auch regulär durch (mit einem > Wraparound irgendwo natürlich), dann ist das Problem bereits gelöst, > denn du hast mit der Stelle, an der der Wraparound erfolgt, auch > gleichzeitig die Konstante gefunden, die zu deinem Testbyte addiert > werden muß, um auf die CS zu kommen. Werde aber mal versuchen einen Wert zu finden welchen ich komplett ablaufen lassen kann. > Vermutlich wirst du aber feststellen, daß es doch nicht so einfach ist. Das fürche ich auch. gruß cyblord
Also ich kenne die Prüfsummenberechnung als XOR-Verknüpfung der Nutzdaten. Zuerst wird Byte 1 mit Byte 2 XOR verknüpft, das Ergebnis daraus mit Byte 3 usw. bis zum letzen Byte der Nutzdaten. Das Ergebnis der letzten XOR-Verknüpfung ist dann die Prüfsumme.
Gisbert schrieb: > Also ich kenne die Prüfsummenberechnung als XOR-Verknüpfung der > Nutzdaten. > Zuerst wird Byte 1 mit Byte 2 XOR verknüpft, das Ergebnis daraus mit > Byte 3 usw. bis zum letzen Byte der Nutzdaten. Das Ergebnis der letzten > XOR-Verknüpfung ist dann die Prüfsumme. Hab ich natürlich auch schon versucht. Bisher ohne auf die richtige Checksum zu kommen. Hier mal ein Block als Text:
1 | 53 06 0122 |
2 | |
3 | 571B B70F 05 FF 00 FF 0000 |
4 | FF3F 00C0 0A FF 00 FF 0013 |
5 | FF3F 00C0 0B FF 00 FF 0000 |
6 | FF3F 00C0 FF FF 00 FF 0000 |
7 | FF3F 00C0 FF FF 00 FF 0000 |
8 | FF3F 00C0 FF FF 00 FF 0000 |
9 | FFFFFFFFFFFFFFFFFFFFFF06 |
gruß cyblord
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.