Seite 1 von 1
Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:07
von Kirikkayis
Hey,
ich hab eine Serielleschnitstelle von der ich Daten erhalte.
Problem:
Wenn ich keine Daten erhalte wirkt mein timeout nicht. Warum aber??
Code: Alles auswählen
import serial
s=serial.Serial()
s.port = 'COM1'
s.baudrate = 9600
s.bytesize = 7
s.stopbits = serial.STOPBITS_ONE
s.parity= serial.PARITY_EVEN
s.rtscts = True
s.timeout = 20
s.open()
CAB_DATEN = []
while True:
serial_line = s.readline().decode("utf-8")
CAB_DATEN.append(serial_line)
if(serial_line == 36):
break
Laut meines Verständnisses müsste das Skript, wenn keine Daten kommen, nach 20 Sekunden aus der while-Schleife rausspringen.
Habe ich hier einen Denkfehler ?
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:15
von sparrow
Du solltest "while True" statt "while 1" verwenden.
Was genau sollte deiner Meinung in deinem gezeigten Code dazu führen, dass der timeout zu einem Verlassen der Schleife führt?
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:16
von Kirikkayis
Naja wenn nach 20 Sekunden nichts ankommt solls abbrechen??
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:18
von sparrow
Das beantwortet meine Frage nicht:
Was meinst du, führt in deinem Code dazu, dass bei einem Timeout die Schleife verlassen wird?
Der Timeout sorgt dafür, dass der Code fortgesetzt wird, wenn der Timeout erreicht wird. Bis dahin blockiert der Code an der entsprechenden Stelle.
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:20
von __blackjack__
@Kirikkayis: Wie sieht denn Dein *tatsächlicher* Code aus, denn der da verlässt die ``while``-Schleife beim ersten `readline()` mit einer `SerialException` weil der Port nicht geöffnet wird.
Die Klammern beim ``if`` gehören da nicht hin.
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:31
von Kirikkayis
__blackjack__ hat geschrieben: Donnerstag 1. August 2019, 12:20
@Kirikkayis: Wie sieht denn Dein *tatsächlicher* Code aus, denn der da verlässt die ``while``-Schleife beim ersten `readline()` mit einer `SerialException` weil der Port nicht geöffnet wird.
Die Klammern beim ``if`` gehören da nicht hin.
Hast recht, hab falsch abgeschrieben (muss alles abtippen da ich auf dem anderen Laptop kein WLAN hab

)
Nun sollte der Code richtig sein.
Hab eben folgendes probiert:
Funktioniert auch, frage ist ob man das so macht :S
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:39
von sparrow
Eben erzählt __blackjack__ dir noch, dass bei dem if keine Klammern hingehören (und das nicht zum ersten Mal), du zitierst das sogar und setzt dann doch wieder welche.
Dann rätst du wild irgendwelchen völlig absurden Code.
Was ist denn s.timeout?!? Hast du das mal geprüft?
Arbeite ein vernünftiges Tutorial durch, um die Grundlagen zu lernen. Die offizielle Dokumentation hat eines. Programmieren funktioniert nie durch raten.
Bei so wenig Eigeninitiative zum Lernen und Umsetzen bin ich raus.
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 12:48
von __blackjack__
@Kirikkayis: Man kann Rechner sofern die Schnittstellen vorhanden sind auch per seriellem Kabel verbinden wenn sie kein Wifi haben.
USB? Auch kein Bluetooth? Lautsprecher und Mikrofon zum Morsen (oder ähnliches)? QR-Code anzeigen auf dem einen Rechner, Webcam auf dem anderen? Alles ist besser als abtippen.
Re: Pyserial timeout
Verfasst: Donnerstag 1. August 2019, 13:03
von Kirikkayis
@sparrow deine Schreibweise ist einfach nur frech.
Ich habe hier kein Thema eröffnet um von dir fertig gemacht zu werden.
Re: Pyserial timeout
Verfasst: Freitag 2. August 2019, 11:03
von harryberlin
edit: war leider mist verzapft. deswegen ist folgende aussage falsch.
du musst try: und except SerialTimeout: (hoffe habs richtig im kopf) nehmen.
dein timeout ist immer wahr, da du es ja auf 20 setzt.
Re: Pyserial timeout
Verfasst: Freitag 2. August 2019, 11:05
von __deets__
Leider nein, harryberlin. Bei einem gessetzten timeout kehrt der read-Aufruf einfach nur zurueck, mit den bis dahin gelesenen Bytes. Im Zweifel eben b"".
Re: Pyserial timeout
Verfasst: Freitag 2. August 2019, 11:12
von harryberlin
ok, habs editiert, dann sollte geprüft werden was man zurück bekommt bzw. nicht zurück bekommt.