RS232- Schnittstelle mit Python auslesen - aber wie?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
think_mupp
User
Beiträge: 4
Registriert: Donnerstag 27. April 2006, 15:42

Hallo Community,

zuerst mal ein großes Lob für dieses tolle Forum, ich habe keinen Rat mehr an wem ich mich sonst noch wenden kann!

Ich benötige ein Pyhton Quellcode um eine Serielle COMM Schnittstelle (RS232) auszulesen.

Hintergrund:
Ich benutze ein Barcode scanner (ohne Software) mit dem ich im HyperTerminal Barcodes in Klartext auslesen kann!
Das ist aber nicht das, was ich mir eigentlich wuensche, gerne wuerde ich in einem aktiven Windowsfenster (Cursor) den Inhalt auslesen koennen!

Vielen Danke + viele Gruesse,
Dennis
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

think_mupp hat geschrieben:Ich benötige ein Pyhton Quellcode um eine Serielle COMM Schnittstelle (RS232) auszulesen.
Hi Dennis!

Das ist ein altbekanntes Thema. Die Forensuche ist nicht so schlecht. Gewöhn dich schon mal daran. ;-)

http://www.python-forum.de/topic-2550.html
http://www.python-forum.de/topic-889.html
http://www.python-forum.de/topic-2527.html
http://www.python-forum.de/topic-5351.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
think_mupp
User
Beiträge: 4
Registriert: Donnerstag 27. April 2006, 15:42

Hallo alpha,

auf Grund dem Thread http://www.python-forum.de/topic-889.html
wende ich mich an dich :)

Ich habe einen Barcode Scanner, den ich über ich die COM3 Schnittstelle angeschlossen habe - nun kann ich auch problemlos verschiedene Barcodes über den Hyperterminal auslesen.

Das reicht mir aber nicht, gerne würde ich den Barcode in einem aktiven Windows Fenster auslesen Bspl. Texteditor, OHNE den HyperTerminal zu benutzen.

Dein Beispiel Code, funtz bei mir aber nicht.
Ich bekomme folgende Fehlermeldung

"IDLE 1.1.1
>>> interface and no data is sent to or received from the Internet.
SyntaxError: invalid syntax"
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi Dennis!

Alles was ich hier schreibe ist reine Theorie, da ich kein Gerät zum Testen habe.

Die einfachste Art, mit einem Gerät über die COM-Schnitstelle zu komunizieren ist --> file().

Zuerst legst du die Schnittstellenparameter mit dem DOS-Programm "mode" fest. http://www.microsoft.com/resources/docu ... x?mfr=true

Das kannst du auch über Python machen. z.B. so:

Code: Alles auswählen

os.system("mode com1: baud=9600")
Danach kannst du den COM-Port wie eine normale Datei öffnen:

Code: Alles auswählen

f = file("COM1:", "r")
try:
    while True:
        print f.read(1)
finally:
    f.close()
Um die Daten vom Barcodescanner in das aktuelle Fenster weiterzuleiten, würde ich einfach mit **SendKeys** arbeiten.

http://aspn.activestate.com/ASPN/Cookbo ... cipe/65107
oder
http://www.rutherfurd.net/python/sendkeys/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
think_mupp
User
Beiträge: 4
Registriert: Donnerstag 27. April 2006, 15:42

gerold hat geschrieben:Hi Dennis!

Alles was ich hier schreibe ist reine Theorie, da ich kein Gerät zum Testen habe.

Die einfachste Art, mit einem Gerät über die COM-Schnitstelle zu komunizieren ist --> file().

Zuerst legst du die Schnittstellenparameter mit dem DOS-Programm "mode" fest. http://www.microsoft.com/resources/docu ... x?mfr=true

Das kannst du auch über Python machen. z.B. so:

Code: Alles auswählen

os.system("mode com1: baud=9600")
Danach kannst du den COM-Port wie eine normale Datei öffnen:

Code: Alles auswählen

f = file("COM1:", "r")
try:
    while True:
        print f.read(1)
finally:
    f.close()
Um die Daten vom Barcodescanner in das aktuelle Fenster weiterzuleiten, würde ich einfach mit **SendKeys** arbeiten.

http://aspn.activestate.com/ASPN/Cookbo ... cipe/65107
oder
http://www.rutherfurd.net/python/sendkeys/

mfg
Gerold
:-)
Hallo Gerold,

vielen Dank für deine Hilfestellung - aber du sprichst mit einem Laien ;)

Kannst du mir vielleicht den Quellcode ganz langsam erklären- besser noch vordiktieren?

Ich hatte auch bereits ein bissl experimentiert:

Code: Alles auswählen

import serial, time

ser = serial.Serial(0, 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=0, rtscts=0)
print ser.portstr
w = ser.write("!GPA\r")
#time.sleep(0.2)
r = ser.read(10)
print r
ser.close()
Leider bekomme ich eine Fehlermeldung - was mache ich falsch?

Sorry, wenn sich meine Fragen blöd anhören - ich kenne mich mit der Programmierung überhaupt nicht aus...

Vielen Dank,
für deine Unterstützung!

Edit (Leonidas): Code in Python-Tags gesetzt.
BlackJack

think_mupp hat geschrieben: Leider bekomme ich eine Fehlermeldung - was mache ich falsch?
Du verrätst uns die Fehlermeldung nicht. Am besten den Traceback komplett hier posten. Die Fehlermeldungen enthalten meistens ganz gute Hinweise wo das Problem ist.
think_mupp
User
Beiträge: 4
Registriert: Donnerstag 27. April 2006, 15:42

Hallo BlackJack,

hier die gewünschte Fehlermeldung:

"IDLE 1.1.1
>>> interface and no data is sent to or received from the Internet.
SyntaxError: invalid syntax"

Vielen Dank für deine Hilfe
BlackJack

Das ist alles? So ein Traceback enthält normalerweise mehr Informationen, zum Beispiel in welchen Zeilen der Fehler sich befindet.
Antworten