direkter Zugriff auf die Schnittstelle per Terminal-Programm#

Um überhaupt erstmal eine serielle Verbindung zu testen bzw. auch die Verbindungsparameter herauszufinden, bietet es sich an, ein Terminalprogramm zu benutzen. Leider haben die guten Zeiten von Linux erst angefangen, als Modemverbindungen und Mailboxen (BBS-Systeme) aus der Mode kamen (oder kamen diese aus der Mode, weil Linux mit seinen Netzwerkfähigkeiten aufkam?!?). Auf jeden Fall ist mit Minicom ein Programm der Maßstab für Terminalprogramme unter Linux, daß mir recht altbacken vorkommt. Es ist ein reines Konsolen-Programm. (Immer noch besser als Hyperterminal unter Windows). Wir haben das lokale Echo nicht zum Laufen gebracht.

Auf Minicoms Seite habe ich allerdings noch einen Link zu CuteCom gefunden, das unter QT läuft. Sollte man sich bei Gelegenheit mal ansehen.

Programmierung der seriellen Schnittstelle#

Angeregt durch die gestrigen ersten Gehversuche von Thomas mit Franz' frisch erworbenen
Mitsubishi-Industrieroboter per Minicom zu kommunizieren, fallen mir spontan zwei Möglichkeiten ein,
automatisiert Kontakt mit dem Gerät aufzunehmen:

Java und javax.com
siehe Javakurs der FHN Krefeld zum Thema serielle Schnittstelle
Dort wird auch Hyperterminal als minicomm-Alternative angesprochen
Die offizielle Java-COM-Schnittstelle ist eine Erweiterung des JDK: http://java.sun.com/products/javacomm/, leider gibt es von Sun keine Implementierung für Linux, daher verweist Sun auf: http://www.geeksville.com/~kevinh/linuxcomm.html und http://java.sun.com/products/javacomm/reference/faqs/index.html
Python & pyserial
siehe Sourceforge.net für Linux und Co.

Short introduction, ebenfalls von Sourceforge

Open port 0 at "9600,8,N,1", no timeout

 >>> import serial
 >>> ser = serial.Serial(0)  #open first serial port
 >>> print ser.portstr       #check which port was realy used
 >>> ser.write("hello")      #write a string
 >>> ser.close()             #close port

Open named port at "19200,8,N,1", 1s timeout

 >>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
 >>> x = ser.read()          #read one byte
 >>> s = ser.read(10)        #read up to ten bytes (timeout)
 >>> line = ser.readline()   #read a '\n' terminated line
 >>> ser.close()

Open second port at "38400,8,E,1", non blocking HW handshaking

 >>> ser = serial.Serial(1, 38400, timeout=0,
 ...                     parity=serial.PARITY_EVEN, rtscts=1)
 >>> s = ser.read(100)       #read up to one hunded bytes
 ...                         #or as much is in the buffer

Get a Serial instance and configure/open it later

 >>> ser = serial.Serial()
 >>> ser.baudrate = 19200
 >>> ser.port = 0
 >>> ser Serial<id=0xa81c10, open=False>(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0)
 >>> ser.open()
 >>> ser.isOpen()
 True
 >>> ser.close()
 >>> ser.isOpen()
 False

Be carefully when using "readline". Do specify a timeout when opening the serial port otherwise it could block forever if no newline character is received. Also note that "readlines" only works with a timeout. "readlines" depends on having a timeout and interprets that as EOF (end of file). It raises an exception if the port is not opened correctly.

Do also have a look at the example files in the examples directory in the source distribution or online in CVS repository .

für Win32: Serial-Package von Roger Burnham, http://www.marshallsoft.com

 >>> from Serial import Serial
 >>> #create a 'configuration dictionary' with the port settings
 >>> myconfig = Serial.PortDict()
 >>> myconfig['port'] = Serial.COM4
 >>> # create and open a port with these settings
 >>> myport = Serial.Port(myconfig)
 >>> myport.open()
 >>> myport.send('ATI\015') #ask modem to identify itself
 >>> print myport.read() #get back an y response

Stand vom 25.02.2008
Der wortkarge Mitsubishi-Industrie-Robby liefert momentan über die USB2Serial-Schnittstelle keine Rückmeldung. Um eine Blockade im Konverter auszuschließen, könnte man sich, z.B. auf der Messe "Embedded World" in Nürnberg morgen, über die USB-Prog Hardware informieren und hoffentlich den Konverter als Fehlerquelle auschließen. Franz fährt auf jeden Fall hin. --MarkusMonderkamp

--MarkusMonderkamp, 12.02.2008

Tags:  Java, Python

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-7) was last changed on 27-Feb-2008 13:39 by MarkusMonderkamp