Python. Datenstrom (uart)

Gast #5165292
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.
Gast #5165314
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?
#5170296
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.
#5170310
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"

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.