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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.