Forum: Compiler & IDEs serielle Daten auswerten / interpretieren


von Thorsten (Gast)


Lesenswert?

Hallo,

ich stehe vor dem Problem, eine serielle Übertragung (hier: Funk) 
irgendwie auswerten zu müssen.
Wie macht man sowas am besten?

Meine Überlegung:
-Startmarkierung
-|Ziel-ID|
-|Sender-ID|
-|Nutzdaten|
-|Checksumme|
-Endmarkierung

Da sind aber noch viele Fragen offen:
- Wenn ich z.B. "|" als Markierung für Start und Ende eines "Blocks" 
nehme, was passiert, wenn meine Nutzdaten ein "|" enthalten?
- Wie programmiert man das? Ich hätte das jetzt mit Zuständen gemacht:

Z0: nix
Z1: Startmarkierung wurde empfangen
Z1: ZielID empfangen
...

Z6: Endmarkierung empfangen => auswerten

In jedem Zustand würde ich das dann empfangene auf Gültigkeit prüfen 
(kommt das End-Zeichen nach x zeichen, oder was anderes? Sind es gültige 
Zeichen für eine ID?.....). Wenn nicht: Wieder nach Z0.

Thorsten

von Εrnst B. (ernst)


Lesenswert?

Ja, mit einer State-Machine ist das schon sinnvoll gelöst.
Vorallem wenn du keine fixe Länge eines Kommandos hast, oder noch 
Timeouts implementieren willst.
Wenn du die Daten ASCII-Kodiert schickst, kannst du statt dem '|' ja 
auch andere Trennzeichen nehmen, der "Record Seperator" 0x1E bietet sich 
da an.

Wenn du binär sendest, könntest du die Trennzeichen einsparen, und 
entweder mit fixen längen arbeiten (Sender/Empfänger ID) oder vor dem 
Block die Länge der nachfolgenden Daten schicken.

von Thorsten (Gast)


Lesenswert?

Danke dir!
Dann gehe ich mal ans Werk :)

von Torben (Gast)


Lesenswert?

Hallo,

Beitrag "Auswertung RS232-Befehle"

Richtig, die Nutzdaten als ASCII (+ 0x30) senden, dann kannst du als 
Start STX und ETX nutzen.

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
Noch kein Account? Hier anmelden.