Serielle Kommunikation / Protokoll mit Hochsprache

Gast #1031424
Lesenswert?

Hallo,

wie lässt sich eine serielle Kommunikation elegant in einer Hochsprache 
umsetzen?

Problem:

> PC sendet einen Befehl
< Gerät antwortet dem Befehl entsprechend

Sowohl der Befehl als auch die Antwort unterscheiden sich in ihrem 
Format, teilweise ist die Antwort paketweise und muss vom PC bestätigt 
werden.

Drumherum braucht man natürlich Funktionen zum Ansprechen der 
Schnittstelle, Fehlerbehandlung, Herstellen/Prüfen der Verbindung zum 
Gerät, etc. die dann ggf. auch von höheren Funktionen benutzt werden.

Wie baut man so ein Programm auf? Einen Haufen Prozeduren/Funktionen 
bekommt man bei einem bottom-up Ansatz, hat dann aber am Ende teilweise 
ziemlich spezialisierten Code (jeder Gerätebefehl bekommt eine eigene 
Funktion, die dann aber teilweise redundaten Code enthält).

Sollte man eine allgemeine Funktion Befehl() bauen, wo aus einer Liste 
ein Handler für den Befehl ausgewählt wird?

Bringt ein objektorientierter Ansatz evtl. etwas?
Und wozu gehört dann die serielle Schnittstelle vom PC (gehört das 
Öffnen der Schnittstelle zum Geräte-Objekt, oder habe ich ein Objekt der 
lokalen seriellen Schnittstelle - und wie verbindet man sowas?)?

Aber selbst wenn das als Objekt gekapselt wird, vielleicht so in der 
Art:
1
Geraet = Device.new()
2
Geraet.supported_baudrates = (9600,56700)
3
..
4
antwort = Geraet.befehl("CMD param")
muss die Antwort unterschiedlich behandelt werden.
Wie geht so was allgemein?
Gast #1038874
Lesenswert?

Erst mal sollten die Begriffe eindeutig sein. In Anlehnung an das 
OSI-Modell (ja das kann man bei einer seriellen Kommunikation zugrunde 
legen) sind Nachrichten zwischen den Kommunikationspartnern "Messages" 
und Nachrichten zwischen den einzelnen Instanzen bei einem 
Kommunikationspartner "Primitives".
D.h., ein Timeraufruf ist ein Primitiv, die Antwort des Timers auch, 
auch so der einer untergeordneten Schicht (Layer).

Die Messages sind "paarweise" so aufgeteilt:

Von einem Master oder dem Initiator einer "Session" wird ein REQUEST 
gesendet und mit einer CONFIRMATION vom Slave beantwortet. Der Slave 
kann seinerseits mit einer INDICATION sich melden und bekommt vom Master 
als Antwort ein RESPONSE.

So läuft das zwischen den Kommunikationspartnern. Die Verarbeitung der 
Messages bei jedem erfolgt in mehreren Schichten (siehe OSI-Modell). Die 
niederste (die Transportschicht), kümmert sich nur um die 
übertragungstechnische Gestaltung; in der Regel also das Hinzufügen von 
Start- und Stoppbits oder die richtige Kodierung.
Die darüberliegende Schicht übernimmt die Sicherungsfunktion z.B. in 
Form von CRC, HEC oder dergleichen.
Und die (nur hier vereinfacht dargestellte) Application Layer 
beschäftigt sich mit dem Inhalt der Messages.

Was jede Message noch haben sollte: eine eineindeutige Nummer, auf die 
die Antwort Bezug nimmt (und auf die der Sender auch wartet).

Es lohnt sich, das Ganze grafisch darzulegen, damit man den Überblick 
bekommt (und auch behält).

Blackbird

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