mikrocontroller.net

Forum: PC-Programmierung RS232 String in Python entschlüsseln


Autor: Maddin S. (maddin91)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade etwas verwirrt bei der Entschlüsselung eines Empfangenen 
Strings über RS232 mit Python.

Ich empfange in regelmäßigen Abständen einen Datenstring von einem 
Messgerät, den ich entschlüsseln möchte. Es sollten Daten wie 
Temperatur, Druck und Spannung enthalten sein. Leider enthält der String 
anscheinend zahlreiche Sonderzeichen, die sowohl in Python als auch in 
unterschiedlichen Editoren komplett unterschiedlich dargestellt werden.

So sieht der String aus (in Python wieder ganz anders, siehe Screen):

6 6 ñÛ„5á°X+íê,‚\+È      æÊ       '       â    j


Per Zufall bin ich darauf gestoßen, dass mir "print(string, 0)" den 
String anscheinend ohne die Sonderzeichen liefert (siehe Screenshot). 
Und das scheint mir der richtige String zu sein, mit dem man auch was 
anfangen kann. Leider ist es mir nicht möglich diese Darstellungsart 
irgendwie anders zu reproduzieren. Warscheinlich ist es ein ganz banales 
Problem ich komm aber einfahc nicht auf die Lösung. Und wieso zeigt die 
Print-Funktion hier überhaupt so ein unterschiedliches Verhalten?

Viele Grüße
Martin

Autor: DPA (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Maddin S. schrieb:
> Per Zufall bin ich darauf gestoßen, dass mir "print(string, 0)" den
> String anscheinend ohne die Sonderzeichen liefert (siehe Screenshot).
> Und das scheint mir der richtige String zu sein, mit dem man auch was
> anfangen kann.

Dass dort sind einfach nur die nicht darstellbaren Zeichen escaped. Bist 
du dir sicher, dass, dass die Baudrate usw. stimmen?
Ansonsten sind es vermutlich Binärdaten. Da würde ich erstmal einen 
Hexdump vieler Nachrichten machen, eine Liste welche werte man glaubt, 
dass übertragen werden sollten, und dann schauen, ob man irgendwelche 
Zusammenhänge findet. Wenn man das Messgerät kennen würde, vielleicht 
würde man dann dazu auch noch was finden.

Autor: Sven B. (scummos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
print() bringt dir gar nichts, das interpretiert den String in 
irgendeinem Encoding. Je nach Encoding sieht das unterschiedlich aus, 
aber vermutlich sind alle falsch. Du musst dir die einzelnen Bytes 
anschauen, am besten als Hex.

Es kann aber auch gut sein, dass die Daten Müll sind, wegen falscher 
Baudrate etc.

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baudrate etc. stimmt.

Ich hatte mir jetzt gedacht, dass es evtl. Hex-Zahlen sind, die jeweils 
durch ein "\x" getrennt sind und mir das halt immer als Sonderzeichen 
angezeigt wird. Ist das keine Möglichkeit?

Autor: Martin HR (horo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es kann helfen, die Daten mit dem Scope anzuschauen und die kürzeste 
Bitdauer zu suchen, daraus kannst Du die Bitrate bestimmen:
~100 µs => 9600, 50 µs => 19200,... ~9 µs => 115200.
Ansonsten ist ein Hexdump ein Mittel der Wahl, um die Werte zuzuordnen.

Gibt es zu dem Messgerät ein zugehöriges PC-Programm, mit dem Du 
sinnvolle Daten empfängst oder hast Du nur das Gerät zur Verfügung?
Hersteller und Typ-Bezeichnung wäre auch interessant zu wissen.

Ciao, Martin

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin S. schrieb:
> dass es evtl. Hex-Zahlen sind, die jeweils durch ein "\x" getrennt sind
> und mir das halt immer als Sonderzeichen angezeigt wird. Ist das keine
> Möglichkeit?

Nein, ziemlich sicher ist das keine Möglichkeit.

Nimm ein Programm wie z.B. hterm und zeichne damit die empfangenen Daten 
auf. Sieh Dir an, wie hterm die Daten anzeigt.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin S. schrieb:
> Ich hatte mir jetzt gedacht, dass es evtl. Hex-Zahlen sind, die jeweils
> durch ein "\x" getrennt

Das \x kommt von der Darstellung als Hexzahl (siehe Escape-Sequenz auf 
Wikipedia)

Da die Daten nicht Menschenlesbar vorliegen, werden es wohl Binärdaten 
sein.
Das Format sollte im Manual zum Messgerät stehen.

Autor: Maddin S. (maddin91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok. Bis hier hin schonmal danke. Das mit der Darstellung hab ich jetzt 
verstanden.

Ich versuche jetzt aus dem Hex-Dump einen Bezug zu den Daten zu 
erkennen.

Falls jemand Lust hat mitzurätseln =) :


36 01 00 31 00 F1 01 DB 01 C3 01 91 01 3C 02 F5
01 AF 01 5B 01 2B 01 EB 02 EA 02 2C 01 8B 01 5E
02 2D 01 C8 00 00 00 02 00 00 00 66 CA 01 00 01
00 00 00 00 00 0A 00 02 00 13 00 00 00 11 00 05
00 E2 07 02 00 00 00 10 00 0D 0C

Und die dazu gehörenden Messwerte:

HV [V]:      1723.2
M_ [°C]:     60.3
D_ [°C]:     32.8
Pres [Bar]:  1000.4
Flow[l/h]    34.70
C_DPUMP[mA]: 59.20


Ist das so der richtige Weg?

Gruß
Martin

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maddin S. schrieb:
> Ist das so der richtige Weg?

Ja.

Jetzt brauchst du noch mehr von den Datensätzen, damit du erkennen 
kannst, wo sich etwas ändert.
Mal absichtlich einen Wert (deutlich) ändern (z.B. Druck) und schauen 
wie die Daten dann aussehen.

Autor: Sven B. (scummos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, erstmal einfach 50 verschiedene Datensätze hintereinander an 
derselben Stelle vom Bildschirm ausgeben in Hex, und da wo's flackert 
sind die Messwerte ;)

Autor: Bert3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Was für ein Messagerät ist denn genau (Hersteller, Typ usw.)?
  ->Vielleicht finden sich ja Dokus/Tools
2. Hast du ein Programm vom Hersteller das dir die Daten über RS232 
liefert?
  ->Also hast du eine Programm/Daten-Referenz für die Analyse?
3. Wie ist dein Log-Aufbau, hast du ein Hersteller-Programm, forderst 
Daten an und schaust Live was auf der Leitung passiert oder hängst du 
dich einfach an die RS232 und schon sprudeln Daten?
  ->Manche Messgeräte senden ständig Daten über die Leitung (und da ist 
alles drinn), andere liefern nur Daten wenn man sie gezielt danach fragt 
(request/response), manche müsse mit x Werten konfiguriert werden und 
sprudeln dann automatisch usw. - es ist völlig unklar was dein Gerät 
macht, abhängig davon muss deine Analysen ganz unterschiedlich sein

mit dem Portmon kann man live zu schauen: 
https://docs.microsoft.com/en-us/sysinternals/down...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.