RS232 Kommunikation - Protokoll

OP #2013963
Lesenswert?

Schönen Abend!

Ich möchte vom PC aus mit meinem uC sprechen. Ich weiß aber nicht wie 
ich das am besten anstelle. Soll ich am PC ein Frame zusammenstellen aus 
ein paar Bytes und das an den uC schicken? Oder soll ich alles einzeln 
schicken? Also ich meine das so: Ich habe ein Visual C# Programm wo ich 
z.B. 5 Relais schalte. Soll ich nun pro Relais einen Datensatz schicken 
oder den Status aller Relais immer schicken auch wenn sich nur der eines 
verändert?

Soll ich am uC die Empfangenen Daten sofort Auswerten, also jedes 
einzelne Byte, oder den ganzen Datensatz empfangen und dann erst 
Auswerten? Hat jemand von euch ein Codebeispiel dazu?

Wie löst man das?

BG
Andreas
Gast #2013975
Lesenswert?

wenn es wirklich nur 5 Relays sein sollen kannst du dir es ganz einfach 
machen. Sende einfach ein byte( also 8bit). Jedes Relay ordnest du ein 
bit zu und schon geht es. Das hat den Vorteil das es erstmal recht 
schnell umzusetzen ist und du dabei bestimmt auch etwas erfahrung 
sammelst. Wenn du später mehr machen willst, kann man immer noch auf ein 
etwas kompizierteres Protokoll wechseln.
Gast #2013984
Lesenswert?

Meine Fresse, das kannst du halten wie ein Dachdecker.
Hauptsache der uC versteht es. Denk dir ein Protokoll
aus und arbeite damit. Wenn du mit einem Byte auskommst
dann schick nur ein Byte. Wenn du mehr brauchst dann schick
mehr.
#2014015
Lesenswert?

Ich bastele mir gerne "menschenlesbare" ASCII-Protokolle. Das Zeichen 
zum Abschluß eines Kommandos oder einer Abfrage wäre dann natürlich 
CR/LF. So bleibt es flexibel, du kannst verschiedene Kommandos 
definieren, die unterschiedlich lang sein dürfen und beliebige Mengen 
von Parametern haben können. Außerdem ist ein ASCII-Protokoll praktisch 
zum Debuggen.

Das Schema ist immer wie folgt:

Die Interrupt-Routine für den Empfang auf der seriellen Schnittstelle 
sammelt alle Zeichen in einen globalen Puffer. Wird CR oder LF 
empfangen, wird dieser Puffer in einen zweiten "Parser"-Puffer kopiert 
und das Parser-Flag gesetzt.

In der Hauptschleife werte ich das Flag aus. Ist es gesetzt, rufe ich 
den Parser auf.

Im Parser untersuche ich den Puffer, separiere Kommando und dazugehörige 
Daten, konvertiere Strings in Integer, rufe die entsprechenden 
Funktionen auf oder setze entsprechende Flags und globale Variablen, die 
im Hauptprogramm bearbeitet werden. Zum Schluß lösche ich das 
Parser-Flag.

Dieses Schema ist intuitiv zu verstehen, der Code ist einfach und lässt 
sich gut lesen.

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