python serial - inWaiting Frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
blumengiesser
User
Beiträge: 6
Registriert: Montag 15. September 2014, 14:29

Hallo! Ich bastel gerade ein Skript, das ankommende Daten auf der Seriellen Schnittstelle ausliest. Dies funktioniert auch soweit. Der Datenstring der ankommt ist aber unterschiedlich lang und wenn man zur falschen Zeit "readline" ausführt und die Übertragung nicht abgeschlossen ist fehlt oft eines der letzten Zeichen. Ich prüfe mit "inWaiting" ob der String zum Großteil da ist und lese dann aus. Hat einer eine Idee wie man warten kann bis das letzte Zeichen auch angekommen ist?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du musst einfach so lange Daten sammeln, bis alle notwendigen Daten angekommen sind ;-) Wann du genug Daten hast, das kannst letztendlich nur du entscheiden, denn nur du kennst wahrscheinlich das Protokoll. Python oder dein OS haben damit nichts zu tun. Wenn du Glück hast, dann musst du nur nach einem Terminatorzeichen suchen, zum Beispiel ein Newline. Dann kannst du bis dahin die Daten verabeiten und wartest auf das nächste Newline. Natürlich könnten auch mehrere Newlines enthalten sein, dann müsstest du eben öfter die Daten zerschneiden. Wenn du Pech hast, dann hast du ein komplexes Format und musst versuchen es zu parsen. Wenn genug Daten dar waren, dann hast du ein Paket gefunden. Wenn nicht, dann musst du auf die nächsten Daten warten und das Parsen noch einmal versuchen.
Das Leben ist wie ein Tennisball.
BlackJack

`readline()` sollte aber eigentlich solange blockieren bis eine Zeile komplett ist. Ausnahmen: Man hat einen Timeout konfiguriert oder die Gegenseite schliesst die Verbindung. Also ich denke wir brauchen mehr Informationen über das tatsächliche Problem.
blumengiesser
User
Beiträge: 6
Registriert: Montag 15. September 2014, 14:29

Vielen vielen Dank! Es lag an folgendem: a) ich hatte für bessere Lesbarkeit im Terminal / hterm nicht das EOL ('\n') sondern das ('\r') verschickt. Und b) den Timeout auf 0 gesetzt. Erst dachte ich das wäre richtig, aber man muß den komplett weglassen. Dann klappt es auch mit dem empfang von Zeichen :-)

Vielen Dank!
Antworten