PySerial - Verlust des ersten Zeichens nach PortOpen

Gast #6935001
Lesenswert?
• ▲
▼
Hallo Forum,

ich habe da einen merkwürdigen Fehler mit PySerial. Wenn ich den Port 
konfiguriere und dann öffne und 3 Zeichen sende, kommen beim ersten Mal 
nur 2 Zeichen an. Das erste Zeichen wurde verloren.
Wenn ich den Port dann schließe und ein 2. mal öffne und 3 Zeichen 
sende, kommen 3 Zeichen an.
Wenn ich den Port dann schließe und ein 3. mal öffne und 3 Zeichen 
sende, kommen wieder nur 2 Zeichen (ohne das erste) an.

So geht es immer im Wechsel.

Wenn ich allerdings eine gerade Anzahl Zeichen sende, geht niemals ein 
Zeichen verloren.

Auf dem Oszilloskop ist zu sehen, dass immer alle Zeichen korrekt 
gesendet werden.

Ich hatte schon "timeout" und "write_timeout" von None auf 0 umgestellt, 
das hat aber keine Wirkung.

OS: LinuxMint 21.2
Port: USB-TTL-Seriellwandler
Python: 3.8
PySerial: 3.5

Minimalbeispiel:
1
ser = serial.Serial()
2
ser.port = '/dev/ttyUSB0'
3
ser.baudrate = 9600
4
ser.parity = serial.PARITY_NONE
5
ser.bytesize = serial.EIGHTBITS
6
ser.timeout = 0
7
ser.write_timeout = 0
8

9
result = ser.open()
10
print(result)
11
time.sleep(0.1)
12

13
if result is None:
14
    for i in range(1):
15
        string = bytes('Hal', 'ascii')
16
        print(string)
17
        ser.write(string)
18
        # Selbes Verhalten mit:
19
        # ser.write("Hal".encode("utf-8"))
20

21
        time.sleep(0.2)
22

23
        print(f'SerOut: {ser.out_waiting}, SerIn : {ser.in_waiting}')
24
        print(f'Lesen: {ser.read(10)}')
25

26
        time.sleep(0.2)
27
else:
28
    print('Fehler beim Öffnen')
29

30
 ser.close()

Kann mir da jemand helfen? Danke im Voraus.
Gast #6935131
Lesenswert?
• ▲
▼
Danke für die Tipps.

Es ist auf jeden Fall vom Chip abhängig. Bei FTDI klappt alles wie 
erwartet. Bei meinem (alten) CH-341 passiert der oben beschriebene 
Wechsel und bei einem Prolific PL2303 fehlt sogar der gesamte erste 
String (getestet bei Länge 3).

Pullups bringen hier leider nichts, da "hinten" RS232 rauskommt. Und wie 
beschrieben war auf dem Oszilloskop alles wie erwartet zu sehen.

Und mit
1
stty -F /dev/ttyUSB0
 in einem Terminal und
1
tail -f /dev/ttyUSB0
 kommt nur mit dem FTDI alles korrekt an. Bei den anderen beiden habe 
ich überhaupt nichts erhalten. Das wird aber wohl an einer fehlenden 
Konfiguration mit stty liegen.

Da ich jetzt weiß, woher das Problem kommt, kann ich zumindest zukünftig 
darauf reagieren.
Mein längerfristiges Ziel ist die Kommunikation mit einem 
Mikrocontroller (sowohl Arduino als auch eigene Platinen) über 
USB-Wandler sowie Max3232. Und hier bin ich ja weitestgehend frei in der 
Wahl des Wandlers.

Für mich ist das Problem damit erst mal erledigt. Danke nochmal.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.