LabVIEWForum.de
CRC XOR berechen , string vergleichen und ersetzen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: CRC XOR berechen , string vergleichen und ersetzen (/Thread-CRC-XOR-berechen-string-vergleichen-und-ersetzen)

Seiten: 1 2


CRC XOR berechen , string vergleichen und ersetzen - dexter - 24.07.2012 10:11

Hallo
ich lese X Datenpakete besteht aus 10 Bytes über RS 232-Port ein. 1 Datenpaket hat folgendem
Muster
Byte Daten
0...6 0xA5
7 counter
8 Telegrammzähler
9 CRC
Ich möchte selbst den CRC-XOR von den ausgelesenen Daten berechen. Also die Bytes 0bis 8 werden dafür
herangezogen, und danach vergleichen mit ausgelesene Byte n°9. Wenn beide gleich sind speiche ich ein 1(Hex)
wenn nicht ein 0(H)
Die CRC berechnung klappt nicht für die Daten die ich auslese. Irgendwie muss ich den Schieberegister nach jeder Berechnung zurücksetzen aber weiss nicht wie. Ich muss danach 2 String vergleichen (die von mir berechnete CRC und ausgelesene CRC) und Byte n°9 mit 0 oder 1 ersetzen

Besten Dank für Idee

Dexter[attachment=40791]

lv11_img


RE: CRC XOR berechen , string vergleichen und ersetzen - jg - 24.07.2012 10:25

Mglw. so?!
[attachment=40792]
Bei CRC-Checksummen gibt es so viele Vorschriften wie Sand am Meer. Ohne Angabe der genauen Berechnung hat man da wenig Chancen.

Übrigens, deine Sequenz ist überflüssig, eben so die Case-Struktur.

THINK DATAFLOW.

Gruß, Jens


RE: CRC XOR berechen , string vergleichen und ersetzen - GerdW - 24.07.2012 10:38

Hallo Dexter,

neben Jens' Vorschlag kannst du natürlich alles drumherum ebenfalls direkt mit dem U8-Array erledigen:
[attachment=40793]
Außerdem:
- Das empfangene Datenpaket stimmt nicht mit deiner Beschreibung überein. Als erstes Byte gibst du nämlich 0xAA (statt 0xA5) vor!
- Bisher hast du nichts ersetzt beim Schreiben (lt. deinem Kommentar im BD), sondern angehangen. Ich habe es dabei belassen...


RE: CRC XOR berechen , string vergleichen und ersetzen - dexter - 25.07.2012 10:12

Hallo Gerd, JG
Danke für die schnelle Antwort. Die Berechnung der CRC-XOR gibt mir immer falsche Ergebnisse,denn ich bekomme nur 0 raus nach dem Vergleich und selten 1.
Ich lese alle 20ms ein Datenpaket, wenn ein Verbindung besteht aus.
Wie kann ich jetzt mein Programm ändert damit die Checksumme für jede Datenpaket(besteht aus 9 Bytes) erfolgen kann.
Wenn ich nur für ein Telegramm rechne bekomme ich das gewünschte Ergebnis also mache ich irgendwie falsch.
[attachment=40810]





ZU JG
Bei CRC-Checksummen gibt es so viele Vorschriften wie Sand am Meer. Ohne Angabe der genauen Berechnung hat man da wenig Chancen.

Danke für deine schnelle Antwort. Ich habe dein Vorschlag ausprobiert aber das Ergebnis hat sich nicht geändert. Ich habe für die Checksumme ein VIs der gut rechnen kann (XOR)
[attachment=40809]


RE: CRC XOR berechen , string vergleichen und ersetzen - GerdW - 25.07.2012 11:47

Hallo Dexter,

um beurteilen zu können, was du da rechnest, wäre es sehr vorteilhaft, wenn du uns einen typischen ReadString mitteilen würdest...

- Dein VI laufen lassen
- Wenn empfangene Botschaft im ReadString steht: Rechtsklick darauf->Datenoperation->Als Standard setzen
- VI speichern und hier anhängen


RE: CRC XOR berechen , string vergleichen und ersetzen - dexter - 25.07.2012 13:43

Hallo Gerd,
so sieht empfangene Botschaft in ReadString aus, also Datenpakete fangen immer mit AA an.
[attachment=40816]


RE: CRC XOR berechen , string vergleichen und ersetzen - GerdW - 25.07.2012 13:59

Hallo dexter,

probier das mal:
[attachment=40818]
Die String-Konstante ist aus deinem VI gebildet worden...
Ich berechne den CRC über neun (statt bisher acht!) Byte - nämlich die komplette Botschaft ohne CRC-Byte!
(Bitte den Kommentar im BD noch anpassen Smile )


RE: CRC XOR berechen , string vergleichen und ersetzen - dexter - 26.07.2012 13:36

Danke Gerd
deine beide Vorschläge funktionieren einwandfrei.


RE: CRC XOR berechen , string vergleichen und ersetzen - dexter - 27.07.2012 10:45

Hallo
ich habe nun ein kleines Problem. Ich habe festgestellt dass nach ca 12s bekomme ich falsche Ergebnisse. Woran liegt das? Ich bekomme die Daten über ein Pedale und die Daten werden alle 25ms gesendet. Wenn ich den Pedal- Fußschalter nur kurz halte ist alles ok aber wenn ich lange halte bekomme ich manchmal die Daten versetzt, oder unvollstandig (leere Byte),dann sind die CRC falsch.
Die VISA serielle Port konfig wurde mit 115200 eingestellt.
Wie kann ich alle ausgelesene Telegramm fehlerfrei wegschreiben und die auch bearbeiten?

Normal Fall
AA 21 1 0 0 0 0 4 BC 32
AA 21 1 0 0 0 0 4 BD 33

Falsche Ergebnisse
AA AA 21 1 0 0 0 0 AA 21
AA 21 1 AA 21 1 0 0 0 0
AA 21 1 0 0 AA 21 1 0 0
AA 21 1 0 0 AA 21 1 0 0
AA 21 AA 21 1 0 0 0 0 4
AA 21 1 0 0 0 0 4 AA 21
AA 21
AA 21
AA 21 1 0 0 0 0 4 D2 5C
Besten Dank für Hilfe


RE: CRC XOR berechen , string vergleichen und ersetzen - dexter - 27.07.2012 12:13

Hallo Gerd
wie kann ich dieser Fehler beheben damit ich alle Telegramm auslesen und wegschreiben kann
Danke

Mögliche Ursachen:

VISA: (Hex 0xBFFF006C) Während der Übertragung ist ein Überlauffehler aufgetreten. Ein Zeichen wurde von der Hardware nicht gelesen, bevor das nächste Zeichen ankam.