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

LabVIEWForum.de

Normale Version: CRC XOR berechen , string vergleichen und ersetzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
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
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...
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]
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
Hallo Gerd,
so sieht empfangene Botschaft in ReadString aus, also Datenpakete fangen immer mit AA an.
[attachment=40816]
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 )
Danke Gerd
deine beide Vorschläge funktionieren einwandfrei.
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
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.
Seiten: 1 2
Referenz-URLs