我对Python和PySerial有疑问。 在我的Raspberry Pi上,我想从设备读取串口。我有两种我想读的设备。他们都有不同的设置:
ser = serial.Serial()
ser.baudrate = 9600
ser.bytesize=serial.SEVENBITS
ser.parity=serial.PARITY_EVEN
ser.stopbits=serial.STOPBITS_ONE
ser.xonxoff=0
ser.rtscts=0
ser.timeout=20
ser.port="/dev/ttyUSB0
和
ser = serial.Serial()
ser.baudrate = 115200
ser.bytesize=serial.EIGHTBITS
ser.parity=serial.PARITY_NONE
ser.stopbits=serial.STOPBITS_ONE
ser.xonxoff=1
ser.rtscts=0
ser.timeout=20
ser.port="/dev/ttyUSB0
这是读取串口的代码:
try:
ser.open()
except:
sys.exit ("Error opening %s." % ser.name)
t_count = 0
while t_count < 20:
t_line = ''
try:
t_raw = ser.readline()
except serial.SerialException:
sys.exit ("Serial port %s could not be read." % ser.name )
t_str = str(t_raw)
t_line = t_str.strip()
print (t_line)
t_count += 1
try:
ser.close()
except:
sys.exit ("Oops %s. Program aborted. Could not close serial port." % ser.name )
因此,当我连接到具有115200的设备但设备运行9600时,我得到了超时。但是在我的程序中,它只会超时20次(for循环将运行的次数),并且不会抛出任何异常。甚至在循环20次之后程序退出之前。没有错误消息。
我想要实现的是以下内容,我想让python脚本自我检测他所连接的内容。当readline()超时20次时应更改设置。 (通过运行其他功能或其他东西)。 我无法检查readline是否返回空,因为串行消息中有空行。
有没有办法获得正确的例外?或者任何其他聪明的方法来解决这个问题?
(顺便说一句,我确信设置有效。因为我测试了它们并运行良好。)
提前致谢。
干杯!