Forum: Mikrocontroller und Digitale Elektronik Bibliothek zum bidirektionalen Datenaustausch?


von Alexander P. (alexatmikro)


Lesenswert?

Hallo,

ich suche eine Bibliothek, welche den bidirektionalen (seriellen) 
Datenaustausch zwischen µC und PC (Programm auch in C) eine Stufe 'über' 
der low level Kommunikation managen kann.


Was meine ich mit low-level:
In verschiedenen Projekten verwende ich verschiedene (virtuell) serielle 
Verbindungen zwischen µC und PC (derzeit USB mit dem virtual serial code 
von atmel, PC seite boost::asio). Mit low-level meine ich die serielle 
Datenübetragung, also am 'Ende der Linie' fallen 8-bit Datenblöcke 
'raus'.


Was meine ich mit 'eine Stufe drüber':
Das ist die Schicht, welche die Datenblöcke zusammensetzt, erkennt, daß 
es sich um Daten oder ggf. einen Befehl handelt und entsprechende 
Aktionen ausfürt.


Bisher habe ich einen unidirektionalen Ansatz (µC ist der Sender, PC der 
Empfänger).
Ich kann Datensatzstrukturen definieren, also z.B.
Format 1: float, uint32_t, uint8_t
Format 2: uint32_t, uint8_t, uint8_t

Senderseitig kann ich vom Programm aus die einzelnen Daten für 
verchiedene Formate in einen 'Zwischencontainer' schreiben, und, sobald 
der Satz vollständig ist rausschicken.

Die übertragung sieht dann (xml-inspiriert) so aus:
<f>1</f><d> .......</d><d> .......</d><d> .......</d>
<f>2</f><d> .......</d><f>1</f><d> .......</d> ...

Ich gebe bekannt, daß nun daten nach format 1 kommen (-> der sender weiß 
wie er die nächsten x bit interpretieren soll).
<d> kapselt die daten (zur kontrolle u.a. checksum). Irgenwann sende ich 
einen Block nach Format 2 und dann wieder Format 1.


Das ganze würde ich nun erweitern um Befehle, Befehle mit Argumenten und 
Bidirektionalität.
Beispiel:
Ich sende vom PC aus den Befehl 'schalte port ab: port1'.



Bevor ich das mache wollte ich mal nachfragen ob's sowas nicht schon 
irgendwo (in C) gibt. Man muß das Rad ja nicht neu erfinden...

Gruß
Alex

von spess53 (Gast)


Lesenswert?

Hi

Ob es das in C gibt weiß ich nicht. Aber in Pascal nennt sich das 
Stream.

MfG Spess

von Thomas S. (klegom)


Lesenswert?

Alexander Poddey schrieb:
> Bevor ich das mache wollte ich mal nachfragen ob's sowas nicht schon
> irgendwo (in C) gibt. Man muß das Rad ja nicht neu erfinden...

Ja, Datenübertragungsprotokolle gibt es hunderte.

Man baut das auch im allgemeinen in "Schichten" auf, wie Du das ja schon 
angefangen hast.

In der Ebene2, das heißt eine oberhalb der RS232 macht man normalerweise 
ein Protokoll, das 3 Dinge beherrscht:

1. Block Beginn und Block Ende Kennzeichnen
2. Ein "Prüfzeichen" um Übertragungsstörungen zu erkennen
3. Einen Mechanismus um den Datenfluss zu steuern (Der Empfänger kann 
den Sender bremsen, damit die Daten nicht zu schnell kommen)

Beispiele für ein solches Protokoll: PPP oder LSV

Eine Anmerkung noch: Wenn Du ein eigenes Protokoll erfinden willst, dann 
schau Dir doch die ASCII Tabelle mal genauer an. Im unteren Bereich gibt 
es Zeichen, die dafür vorgesehen sind. Z.B. "Start of Text" und "End of 
Text" usw. Das macht das erkennen des Blockanfangs und Blockendes viel 
einfacher.

XML ist ein DATEIFORMAT und für serielle Datenübertragung nicht sehr 
geeignet. Erstens ist der overhead sehr groß und zweitens brauchst Du 
einen Parser, weil Du ja immer mehrere Zeichen gemeinsam kennen musst, 
um z.B. einen Anfang zu erkennen.

Wenn Du ein Standard Protokoll implementierst, dann könnte Dein PC 
direkt mit dem Mikrocontroller sprechen, ohne dass Du am PC was 
programmieren musst. Du müsstest dann z.B. PPP, IP und UDP 
Ipmlementieren.

Hier ist beschrieben wie PPP geht: 
http://www.rfc-editor.org/rfc/rfc1661.txt

von Alexander P. (alexatmikro)


Lesenswert?

Hallo Thomas,

Du hast recht: ich will ja eigentlich kein eigenes protokoll erfinden - 
das haben schlauere vor mir schon gemacht.

Am liebsten würde ich auf eine existierende implementierung (µC 
Zielplattform: AT91SAM7 und ATMEGA) zurückgreifen.

Gibts da was?

Danke
Alex

von Thomas S. (klegom)


Lesenswert?

Alexander Poddey schrieb:
> am liebsten würde ich auf eine existierende implementierung (µC
> Zielplattform: AT91SAM7 und ATMEGA) zurückgreifen.
>
> Gibts da was?

Ich kenne leider nichts.

von Stephan (Gast)


Lesenswert?

Hi
schau dir mal MODBUS an. Das Protokoll ist leicht zu implementieren.
geholfen wird dir auf www.modbus.org oder hier im Forum (siehe auch 
Linksammlung)

mfg
Stephan

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.