Forum: PC-Programmierung Python. Datenstrom (uart)


von Montgomery (Gast)


Lesenswert?

servus!

Ich bekomme über einen Uart Daten herein. Das sind Messwerte die am 
Anfang einer Übertragung ein STX senden, dann einen float Wert als 
ascii-String ohne 0 und zuletzt ein ETX.
Ich bin nun recht frisch auf dem PC und Python und benötige daher mal 
euren Rat, wie ich so einen Datenstrom am besten einlese, bearbeite und 
die Messwerte in ein (2d)-Array schreibe.
Konkret ist es so, dass vom Uart nur auf Anfrage was kommt, der 
angeschlossene Controller hat kein Eigenleben, könnte aber natürlich 
auch mal wirklich ein Stream sein.

Für einen binären Datenstrom ohne STX/ETX Markierungen würde ich alles 
in eine bytes-Sequenz lesen und dann struct.unpack() machen. Ginge DAS 
schon sinniger?


Aber wie ich einen Datenstrom untersuchen kann, der Steuerzeichnen und 
ascii-Strings enthät wie oben beschrieben ist mir ein Rätsel. Auf einem 
uc fühle ich mich wohl, aber jetzt bin ich doch schon sehr schnell an 
dem Punkt, wo eine Höchstsprache mir mehr Fragezeichen aufgibt als 
Ehrfurcht.
Und ich glaube ähnliche Probleme werden mich sehr, sehr oft plagen, bei 
meinem Hobby.

Wer kann helfen? Code-Schnipsel und Denkanstöße sind sehr willkommen.

von Montgomery (Gast)


Lesenswert?

Also zur Vollständigkeit: ich vermute, dass es viel zu umständlich und 
damit auch langsam ist, z.B. das was über uart reinkommt jeweils an 
einen String zu 'appenden' und dann über split o.ä. Operationen die 
float-Strings zwischen den Steuerzeichen zu extrahieren?

von Nico W. (nico_w)


Lesenswert?

Kommt drauf an was für dich zu langsam ist.
Ne normale UART liegt ja normal bei vielleicht 115200 baud. Da sollte 
Python auf aktueller Hardware deutlich schneller sein.

Was bekommst du denn genau über UART?
Wie willst du das bearbeiten?

unpack ist eine gute Sache für binären Datenstrom. Man sollte aber 
entweder die Länge kennen, oder aber ggf. mit Escapes arbeiten.

von Felix U. (ubfx)


Lesenswert?

Montgomery schrieb:
> dass es viel zu umständlich und
> damit auch langsam ist, z.B. das was über uart reinkommt jeweils an
> einen String zu 'appenden' und dann über split o.ä. Operationen die
> float-Strings zwischen den Steuerzeichen zu extrahieren?

In der Zeit, die du auf einem uC brauchst um einen String aus floats zu 
erstellen, kannst du auf einer aktuellen CPU zig Megabytes Strings 
verarbeiten.
Way to go wäre die floats als 16/32 Bit floats zu übertragen und dann 
mit unpack auszulesen. STX kannst du als "\x02" schreiben, ETX als 
"\x03"

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.