Seite 1 von 1
RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 08:10
von PythonDonald
Hallo liebe Programmierer
ich bin noch recht neu in der Python Welt und erstelle derzeit in einem Projekt eine Oberfläche/GUI auf dem Raspberry, womit ich Daten eines Messgerätes aufzeichnen und speichern kann. Dieses funktioniert soweit auch sehr gut. Jedoch verwende ich hierzu das analoge Ausgangssignal (Spannung) des Messgerätes. Nun möchte ich das ganze noch Digital versuchen.
Hierbei habe ich nur leider seit Tagen keinen Fortschritt. Ich verwende dazu den Raspberry und einen CP2102 Konverter.
Als Hintergrundinfo: Das Messgerät besitzt einen Knopf, mit dem manuell ein Wert gesendet werden kann. Dieser kommt auch an, wenn mein Programm Starte, und eben diese Taste betätige. So erscheint in der Ausgabe der korrekte Displaywert. Ich bin mir auch über die Anschlüsse noch nicht ganz sicher, wie es richtig verbunden wird. Ich habe nur TX RX und GND am Messgerät die ich benutzen kann (ansonsten noch Analog und Mitutoyo). Wenn ich TX auf TX und RX auf RX schalte, bekomme ich den Wert korrekt per Knopfdruck. Wenn ich TX auf RX und RX auf TX schalte, wird nur noch ein Code in Hex ausgegeben. Und sobald ich GND dazuschalte, funktioniert gar nichts mehr. Wenn ich die Zeile ser.timeout = 0.1 verwende, kommt immer nur die Antwort: b' '. Als ob nicht ausgelesen werden kann. Meiner Vermutung nach ist einfach der Befehl oder Inhalt falsch, welche ich dem Messgerät sende.
Hier mein einfacher Code:
Code: Alles auswählen
import serial, time
port = 'usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0'
ser = serial.Serial('/dev/serial/by-id/' + port)
ser.timeout = 0.1
ser.baudrate = 9600
ser.bytesize = 8
ser.parity = 'N'
ser.startbits = 1
ser.stopbits = 1
#ser.close()
#ser.open()
ser.write(b'a?\r\n')
antwort = ser.readline()
print(antwort)
In der Anleitung steht hierzu folgender Absatz:
"Die im Display angezeigten Werte können auch einzeln über die RS-232 Schnittstelle von einem Rechner angefordert werden, indem man a"?" (ASCII D63 [3fh] eingibt)."
Ich habe nun in dem Programm schon jede erdenkliche Kombiantion eingeben, da die Anleitung meiner Meinung nach sehr Schwammig geschrieben ist, und auch die Klammersetzung komisch ist. Vielleicht handelt es sich hier sogar um einen Übersetzungsfehler
Habt ihr vielleicht eine Idee, woran es liegen kann, dass ich keine Antwort bekomme?
Vielen Dank für euer Bemühungen im vorraus
LG PythonDonald

Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 08:26
von __deets__
Ohne das die elektrische Situation geklärt ist, kann man keine Aussage treffen. Ohne ground geht nicht, und traditionell müssen RX auf TX und umgekehrt verbunden werden. Und das die Spannungen kompatibel sind muss auch sichergestellt sein. Sonst frittierst du eine oder beide Seiten.
Was das Zeichen angeht - IMHO ein einzelnes Fragezeichen. Ganz bestimmt ohne a davor. Das ist eine komische Notation die “ascii” bedeuten soll denke ich mal. Ob nach dem Fragezeichen dann noch CRLF wie bei dir kommen müssen - kann sein. Halte ich aber für unwahrscheinlich, wenn es sich hierbei um das einzige Kommando handelt. Oder kann das Ding mehr?
Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 08:36
von PythonDonald
Danke für deine Antwort deets.
Ich schaue mir mal beide Spannungen an.
Was genau meinst du mir kann das Ding mehr?
Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 08:38
von __deets__
Und nochmal ein nachtrag: um die Verkabelung zu prüfen, muss dein Programm einfach nur die ganze Zeit lesen. Oder du benutzt zb screen dafür, “screen /dev/usb-Serial... 9600” - und dann müssen da Daten ankommen.
Mit “mehr” meine ich kann das mehr Einstellungen/Befehle seriell entgegen nehmen. Davon hängt ab, ob man ein komplexeres Protokoll als ein-Zeichen-Nachrichten braucht. Sieht aber nicht so aus, ich habe
http://www.bronx-systems.de/download.ph ... a61661d17a gefunden. Also OHNE CRLF probieren!
Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 09:38
von PythonDonald
Danke.
Ne also laut Anleitung kann nur dieser eine Befehl eingeben werden. Und ich habe genau dieses Gerät

Soll ich dieses screen einfach oben in den Pfad reinschreiben?
Und ohne CRLF geht es leider auch nicht
screen/dev... funktioniert leider nicht (file not found error)
Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 10:16
von __deets__
Du musst schon ein bisschen abstrahieren. Damit war der Pfad zu deinem USB serial device gemeint. Den ich hier auf meinem iPhone nicht komplett runterbeten kann und will.
Und screen ist ein externes Programm. Damit kannst du OHNE Python verifizieren, ob bei Druck auf die TXD Taste Daten ankommen.
Last but not least: doch, das Ding kann mehr. Die Anleitung ist schlecht, aber es werden Control Codes erwähnt die auch die anderen Tasten emulieren. Waschsalon genau heißt muss ich mal recherchieren.
Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 10:24
von __deets__
Und noch eine Anmerkung: durch deinen absurd kleinen timeout kehrt der Versuch zu lesen zu schnell zurück. Potentiell bevor eine Antwort kommt. Warum hast du den eingeführt?
Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 13:39
von PythonDonald
Hi,
also ich habe das im Pfad so wie du gesagt hast eingefügt, aber da kommt halt: File Not Found Error.
Kurz zu dem Screen. Ich habe auf dem Raspberry das Programm CuteCom installiert. Damit habe ich überprüft, das auf Tastendruck der richtige Wert wie in meinem Programm ankommt und danach habe ich den TX vom Raspi auf den RX vom Raspi geschaltet und gesehen, dass wenn ich ein Wort sende, es auch wieder ankommt. Meinst du so etwas in der Art?
Den Timeout habe ich leider durch Unkenntnis übernommen. Heißt es das nach 0,1 Sekunden abgebrochen wird und vielleicht danach erst die Antwort kommt?
Soll ich das rausnehmen?
Ich war fleißig und habe mit dem Oszilloskop die Signale aufgenommen. Das Messgerät ist im Ruhezustand auf ca. 5,7 Volt und beim Senden von Daten im Bereich von + / - 5,7 Volt. Der Raspi ist im Ruhezustand auf 3,3 Volt und beim Senden im Bereich von 0 Volt - 3,3 Volt. Daher denke ich passt es nicht zusammen oder ? Ich als Leihe würde jetzt sagen das es per Knopfdruck geht, weil 5,7 erkennt der Pi als HIGH und -5,7 als 0 Volt und somit LOW richtig ? Andersrum sind die 0 Volt vom Raspi natürlich keine -5,7 Volt, die das Messgerät erwartet. Würdest du das so unterschreiben?
LG und Danke, du hilft mir echt weiter

Re: RS232 Datenübertragung
Verfasst: Donnerstag 20. Juni 2019, 13:56
von __deets__
Was ich meinte ist der Pfad
/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
Den moechte ich nicht auf dem iPhone eingeben (jetzt sitze ich am Rechner...), aber das ist nunmal der Pfad zu deiner seriellen Schnittstelle.
Aber wenn du mit einem anderen Terminal-Programm verifiziert hast, dass es geht, ist das ja prinzipiell ok, und du musst es nicht mit screen machen.
Der PI wiederum hat NICHTs mit der seriellen Schnittstelle und deren Volt zu tun. Das haette er nur, wenn du den ihm eingebauten UART auf der Pinleiste verwandt haettest - aber dann waere er auch schon kaputt. +/-5V sind "normal" 5V TTL seriell, und durch Glueck hast du wohl einen Adapter, der das schluckt.
Hast du mal die Dokumentation des serial Moduls angeschaut? Was steht da zu dem Thema timeout?
Re: RS232 Datenübertragung
Verfasst: Freitag 21. Juni 2019, 07:02
von PythonDonald
Guten Morgen, ja den Pfad habe ich in sofern geändert, wie du es gesagt hattest, aber leider ohne Erfolg.
Okay, dann brauche ich das mit dem Programm Screen ja nicht mehr überprüfen.
Ich habe hier in der Doku geschaut, aber nichts gefunden:
https://www.silabs.com/documents/public ... 2102-9.pdf
Hast du noch eine Möglichkeit, wieso das nicht funktioniert? Passt das denn jetzt mit den Pegeln?
Re: RS232 Datenübertragung
Verfasst: Freitag 21. Juni 2019, 07:36
von __deets__
Ich habe nicht nach der silabs Dokumentation gefragt. Sondern der von pyserial. Und was es mit timeout auf sich hat.
Und warum kehrst du immer wieder zu den Pegeln etc zurück, wenn du etabliert hast, das es geht? Python braucht keine anderen Pegel als ein serielles Terminal Programm.
Re: RS232 Datenübertragung
Verfasst: Freitag 21. Juni 2019, 08:38
von PythonDonald
Achso sorry. Ich werde da noch mal nachschauen.
Naja ich habe ja nur festgestellt, dass die Pegel unterschiedlich sind. Aber du meinst, dass ist ja der normale Pegel, dann ist ja gut. Tut mir leid.
Re: RS232 Datenübertragung
Verfasst: Freitag 21. Juni 2019, 23:36
von __deets__
Es gibt eine andere Anleitung zu einem umfangreicheren Gerät das augenscheinlich eine ähnliche wenn nicht gleiche Firmware benutzt. Daraus geht auch nochmal klarer das ? hervor.
https://static.brw.ch/pdf/6023_MAN_172120_AFG_Mk4_D.pdf
Und die ASCII-Werte 0x01-0x05 zur Emulation von Tasten. So wie viele andere Möglichkeiten, die ggf auch. Ei dir gehen.
Re: RS232 Datenübertragung
Verfasst: Sonntag 23. Juni 2019, 20:28
von harryberlin
regulär ist der pfad /dev/ttyUSB0 oder 1,2,3 für ein silabs chipsatz
Re: RS232 Datenübertragung
Verfasst: Montag 24. Juni 2019, 07:16
von PythonDonald
@deets:
ich kann ja andere Befehle noch mal testen, aber bei mir geht das mit dem ? ja leider immer noch nicht.
@haaryberlin:
danke, das habe ich am Anfang auch versucht, aber ist meine Bezeichnung nicht genauer? das habe ich quasi ausgelesen? meinst du daran kann das liegen? woher weiß ich denn welcher USB-Port das ist?
Re: RS232 Datenübertragung
Verfasst: Montag 24. Juni 2019, 07:32
von __deets__
Nein, am Pfad kann das nicht liegen. Das ist ein begrüßenswertes Feature das da ein präziser Name vergeben wird, statt einer nicht stabilen Aufzählung.
Ich frag zum dritten mal: hast du dir angeschaut was der timeout bewirkt?