Forum: Mikrocontroller und Digitale Elektronik Kommunikationsprotokoll PC <-> uC für Tests und Logging


von Oz z. (ozzy)


Lesenswert?

Hallo,

   ich bin auf der Suche nach einem Protokoll, um zwischen dem Host (PC) 
und dem uC (z.B. STM32) über USB kommunizieren zu können. Mein Wunsch 
wäre auf der uC Seite eine zentrale Stelle, die Daten an die 
entsprechenden Module weitergibt, und auch die zurückgegeben Daten 
wieder an den Host zurück schickt. Nett wäre so etwas wie 
Callback-Funktionen, wodurch sich die Module nur bei dem 
Kommunikationsmodul registrieren müssen, und dann bei einer 
entsprechenden Nachricht die Callback Funktion aufgerufen wird. Und 
super wäre auch ein "Continuous-Mode", mit dem ich auch Messwerte 
kontinuierlich an den Host übergeben kann (z.B. AD-Werte).
   Bevor ich das Rad jetzt das zweite/dritte mal erfinde und alles 
selber schreibe: habt Ihr so etwas im Einsatz oder etwas im Hinterkopf, 
was mir helfen würde?

Vielen Dank schon einmal im Voraus!

von Wolfgang (Gast)


Lesenswert?

Oz z. schrieb:
> ich bin auf der Suche nach einem Protokoll, um zwischen dem Host (PC)
> und dem uC (z.B. STM32) über USB kommunizieren zu können.
Um was für Datenraten geht es dir dabei. Reicht auf PC-Seite eine 
(virtuelle) serielle Schnittstelle?

von Oz z. (ozzy)


Lesenswert?

Hallo,

   danke für Deine Antwort. Ja, das reicht mir völlig aus!

von Einer K. (Gast)


Lesenswert?

Oz z. schrieb:
> Bevor ich das Rad jetzt das zweite/dritte mal erfinde und alles
> selber schreibe: habt Ihr so etwas im Einsatz oder etwas im Hinterkopf,
> was mir helfen würde?


In der Arduino Welt gibt es den CmdMessenger.
Dieser deckt einiges von deinen Anforderungen ab.

Evtl kannst du dir da was abschauen.

von Stefan F. (Gast)


Lesenswert?

Dazu fällt mir spontan MQTT ein - das geht allerdings in der Regel über 
Ethernet. Für serielle Schnittstellen gibt es Adapter-Programme.

Installiere Dir einen MQTT Broker auf deinen PC, der zeigt Dir die 
Nachrichten dann im Web-Browser an und du kannst auch welche per 
Eingabeformular an den µc senden.

Ansonsten rate ich auf jeden Fall zu einem Text-Basierten Protokoll, 
dass man man notfalls mit einem simplen Terminalprogramm oder copy 
Befehl nutzen kann.

von Toby P. (Gast)


Lesenswert?

Aus http://www.serialcominstruments.com/SerialComInstruments Doku.pdf

Beitrag "Daten von der seriellen Schnittstelle einfach darstellen"


#nMn< # - Identifier Messwertübertragung Start
n - Instrumenten-Nummer
M - Identifier Messwert Start
m - Messwert
< - Ende Messwert

Mit realen Werten dann z.B. so :
#41M15.345< in Klartext: schicke an Instrument Nr. 41 den Wert 15,3

von Oz z. (ozzy)


Lesenswert?

Hallo,

danke für die Tips, also der CmdMessenger sieht schon echt interessant 
aus, den werde ich mir mal genauer ansehen!

von Matthias L. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dazu fällt mir spontan MQTT ein

Bloss nicht. Völlig unbrauchbar dieser Subscribe/Publish Quatsch für 
solche Anwendungen.



>Fall zu einem Text-Basierten Protokoll
Denkbar. Aber warum? Damit man es lesen kann? Wer tut das noch, wenn die 
unterste Kommunikationsschicht (Übertragung) sauber funktioniert....

von Stefan F. (Gast)


Lesenswert?

Matthias L. schrieb:
>> zu einem Text-Basierten Protokoll
> Denkbar. Aber warum? Damit man es lesen kann?

Genau. Und damit man nicht zwei Baustellen gleichzeitig hat, weil man 
beiden Enden des Kabels sein eigenes erstes Kommunikationsprotokoll 
entwickelt, dass man eben nicht mit einem Terminalprogramm debuggen 
kann. Daran scheitern nämlich viele.

von Olaf (Gast)


Lesenswert?

> habt Ihr so etwas im Einsatz oder etwas im Hinterkopf,
> was mir helfen würde?

Such mal nach Modbus. Das ist ein in der Industrie verbreitetes 
Protokoll
wo du den Standard einfach so runterladen und lesen kannst.
Das hat gleich drei Vorteile:

1. Deine Protokollbeschreibung ist schon fertig.

2. Das Protokoll ist seit vielen Jahren in der Praxis bewaehrt und du 
machst
   nicht irgendwelche dummen Anfaengerfehler die du hinterher bereust.

3. Es gibt Diagnosesoftware die du auf den Bus klemmen kannst. Das hilft
   beim debuggen.

Olaf

von Martin J. (martin-j)


Lesenswert?

Ich stand vor einiger Zeit vor einem ähnlichen Problem, mir war aber 
Modbus zu unpraktisch, da man direkt mit irgendwelchen Registern 
hantieren muss. Deshalb hab ich nun ein recht flexibles Protokoll 
basierend auf JSON implementiert, siehe hier: 
https://libre.solar/thingset/

Eine embedded C++ Bibliothek mit Beispiel: 
https://github.com/LibreSolar/thingset-device-library

Man kann über das Protokoll sowohl Daten lesen und schreiben als auch 
eine Funktion aufrufen (intern entweder mit einer Variablen oder einem 
callback verknüpft). Diverse Beispiele sind in der Doku zu finden.

von 50c (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Installiere Dir einen MQTT Broker auf deinen PC, der zeigt Dir die
> Nachrichten dann im Web-Browser an und du kannst auch welche per
> Eingabeformular an den µc senden.

hhhhääää, was wird da wie im Browser angezeigt und was für ein 
Eingabeformular?

von Stefan F. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Installiere Dir einen MQTT Broker auf deinen PC, der zeigt Dir die
>> Nachrichten dann im Web-Browser an und du kannst auch welche per
>> Eingabeformular an den µc senden.

50c schrieb:
> hhhhääää, was wird da wie im Browser angezeigt und was für ein
> Eingabeformular?

Als ich das neulich mal ausprobiert hatte, stieß ich auf einen MQTT 
Broker mit Webinterface, wo man die ganze Nachrichten sehen konnte und 
auch welche manuell erzeugen konnte, indem man ein Formular ausfüllt.

http://activemq.apache.org/components/classic/

von 50c (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Als ich das neulich mal ausprobiert hatte, stieß ich auf einen MQTT
> Broker mit Webinterface, wo man die ganze Nachrichten sehen konnte und
> auch welche manuell erzeugen konnte, indem man ein Formular ausfüllt.
>
> http://activemq.apache.org/components/classic/

...ok, activemq kannte ich noch nicht, aber eine Web-Gui gehört aber 
nicht zum normalen Standard eines MQTT-Brokers. Deshalb ist deine Anwort 
schon etwas verwirrend...

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.