pySerial inWaiting gibt falsche Anzahl von bytes

Ich habe ein einfaches Programm zum testen serieller Funktionalität. Mein serielles Gerät reagiert auf zwei Eingänge. Wenn der Benutzer ein 'a', antwortet er mit 'fg'. Wenn der Benutzer andere Zeichen/byte, antwortet er mit 'z'. Wenn ich 'b' an das serielle Gerät, wird es wieder 'z' just fine. Wenn ich send 'ein', sollte es wieder die beiden 'f' und 'g', also zwei bytes statt nur einem.

Siehe code unten.

#!/usr/bin/env python

import serial

ser = serial.Serial(
    port = '/dev/ttyUSB0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS
    )

ser.write('a')
byteData = ser.read(1) # read one, blocking
moreBytes = ser.inWaiting()

if moreBytes:
    byteData = byteData + ser.read(moreBytes)
    print byteData

print byteData


ser.close()

Ausgabe :

user@ubuntu:~/code/native$ ./serialTesting.py 
f

inWaiting() gibt den Wert 0, so wird es niemals liest das zweite byte. Wenn ich eine kleine änderung am code, und manuell Lesen Sie die beiden erwarteten bytes, funktioniert es einwandfrei.

#!/usr/bin/env python

import serial

ser = serial.Serial(
    port = '/dev/ttyUSB0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS
    )

ser.write('a')
byteData = ser.read(2) # read two expected bytes for the result 'fg'

print byteData

ser.close()

Die Ausgabe ist wie erwartet:

user@ubuntu:~/code/native$ ./serialTesting.py 
fg

InformationsquelleAutor user791953 | 2013-10-03

Schreibe einen Kommentar