Python PySerial在超时时更改设置

时间:2015-04-21 15:01:46

标签: python serial-port pyserial

我对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是否返回空,因为串行消息中有空行。

有没有办法获得正确的例外?或者任何其他聪明的方法来解决这个问题?

(顺便说一句,我确信设置有效。因为我测试了它们并运行良好。)

提前致谢。

干杯!

0 个答案:

没有答案