serielle Daten auswerten / interpretieren

Gast #804155
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
#804172
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren