Seite 1 von 1

Problem: Serielle Schnittstelle auslesen

Verfasst: Montag 18. Juni 2007, 09:30
von lemmi82
Hallo zusammen,
mein Vorhaben ist einfach beschrieben, ich will mittels der seriellen Schnittstelle einen Microcontroller steuern.
Um nun zunächst die Kommunikation mit der seriellen Schnittstelle zu testen habe ich mal ein Messgerät rangehängt, das einen Seriellen Ein-/Ausgang hat. Ich will nur testen, ob das mit pyserial alles klappt. Also schreibe ich:

Code: Alles auswählen

import serial
import time		
ser = serial.Serial(port=0, timeout=2)
print ser.portstr	
ser.write ("ID?")	
print ser.read()

Code: Alles auswählen

"ID?"
soll das Gerät veranlassen seine Kennung zu senden. Aber es wird nichts ausgelesen. Das es am Gerät liegt wage ich auszuschließen. Hat jemand von euch eine Idee, woran das liegen könnte?
Ich verwende einen Linux PC mit Fedora

Verfasst: Montag 18. Juni 2007, 09:51
von BlackJack
Falscher Port? Oder vielleicht erwartet das Gerät nach dem Befehl noch ein Zeilenendezeichen?

Verfasst: Montag 18. Juni 2007, 10:00
von lemmi82
Hallo, ich habe beide Ports probiert. Ohne Erfolg. Das mit dem Zeilenendezeichen könnte sein. Hast du eine Idee, was ich da senden muss? Eine andere Frage ist, ob ich unter Linux den Port noch anderswo öffnen muss? Ich habe /dev/ttyS0 und /dev/ttyS1 jeweils chmod 777 Rechte gegeben (ist das erforderlich?) noch was?

Verfasst: Montag 18. Juni 2007, 10:09
von BlackJack
Das Zeilenende ist '\n', damit würde der Befehl also so aussehen: 'ID?\n'.

Eventuell kann auch noch ein `ser.flush()` nötig sein, damit die Daten auch wirklich rausgeschrieben werden.

Wenn sich das Programm nicht über Rechte oder Dateien die nicht geöffnet werden können beschwert, dann würde ich mir darum erst einmal keine Gedanken machen.

Verfasst: Montag 18. Juni 2007, 10:12
von thelittlebug

Code: Alles auswählen

zeilenende = "\n"
Ich hätte /dev/ttyS0 und 1 nicht mit chmod geändert. Klingt für mich falsch. Hätte ich noch nie gebraucht, selbst ohne Rootrechte geht bei mir nämlich,

Code: Alles auswählen

thelittlebug@ubuntu:~$ cat /dev/ttyS0
ohne Rechteproblem.

Was mir eigentlich viel mehr abgeht sind die Verbindungseinstellungen ala 19200 8N1 -> 19200 Baud, 8 DataBits, Parity None, 1 Stopbit

Wenn das nicht richtig eingestellt ist wird sich nicht viel tun ;)

lgherby[/code]

Verfasst: Montag 18. Juni 2007, 10:25
von lemmi82
Hallo thelittlebug und BlackJack,
danke für eure Hilfe! In Komibation mit dem Zeilenende "\n" und der richtig gewählten Baudrate/Bitzahl/Stopbits geht es jetzt.
Wenn man es weiß ist es wie immer alles ganz einfach!
Danke nochmal! Tolles Forum!

Verfasst: Dienstag 19. Juni 2007, 02:20
von lunas
Versuch doch mal Pin 2 und Pin 3 des Steckers kurzzuschließen. An der Male-Seite klappt das ganz gut mit einem Jumper, für die Female-Seite genügt ein kurzer Draht.
Wenn Du an den richtigen Port sendest, dann solltest Du so Deine Daten wieder empfangen können (Pin2/3 sind Tx und Rx). Dann kannst Du dir sparen mit dem Protokoll eines Dir unbekannten Geräts zu experimentieren (was möglicherweise eine zusätzliche Fehlerquelle ist) und siehst, ob Dein Programm bis zur V24 Schnittstelle auch funktioniert.

lunas

Verfasst: Donnerstag 21. Juni 2007, 10:15
von alpha
Also so mach ich es:

Code: Alles auswählen

#!/usr/bin/python

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(100)
r = ser.read(10)
#i = ser.inWaiting()
print r
ser.close()
Wie schon mein Vorredner gesagt hat.. erstmal Schnittstelle einstellen
(Baudrate, Parity, Start/Stopbits usw)

Gruß
alpha