Python(Pyserial):串行挂断时该怎么办?

时间:2015-03-12 19:13:04

标签: python serial-port

在下面的代码中,我向一些teensy(arduino)板发送消息,以帮助我动态识别它们。问题是,这个代码每隔一段时间就被挂起(我假设)当'pot_port.read(1)'没有收到它正在寻找的字节。我怎样才能避免这种情况,或者如果它被挂断了,我该如何解决呢?

    for port in current_ports:
        if 'ACM' in port:
            print port
            pot_port = serial.Serial(port, BAUD_RATE, timeout=TIMEOUT)
            time.sleep(1)
            pot_port.write('#')
            time.sleep(1)
            response = pot_port.read(1)
            print response
            if response is 'a':
                matrix_port = pot_port
            elif response is 'b':
                led_port = pot_port

更新:我采取了一些预防措施只调用.read(),如果有任何东西可以阅读这个新代码。

    for port in current_ports:
        if 'ACM' in port:
            print port
            pot_port = serial.Serial(port, BAUD_RATE, timeout=TIMEOUT)
            print pot_port.inWaiting()
            pot_port.flushInput()
            print pot_port.inWaiting()
            while pot_port.inWaiting() == 0:
                 pot_port.flushInput()
                 time.sleep(1)
                 pot_port.write('#')
                 time.sleep(1)
                 print pot_port.inWaiting()
            response = pot_port.read(1)
            pot_port.flushInput()
            print response
            if response is 'a':
                matrix_port = pot_port
            elif response is 'b':
                led_port = pot_port

到目前为止似乎工作得很好,如果有人有任何建议,我全都耳朵。

1 个答案:

答案 0 :(得分:0)

正如你所做的那样,检查等待()是一种可行的方法。

我使用的方法是将TIMEOUT设置为正值,这样如果在TIMEOUT秒内没有收到任何内容,你的.read(1)将放弃并返回一个空字符串。

pot_port = serial.Serial(port, BAUD_RATE, timeout=10)
response = pot_port.read(1)
if response:
    do_something_useful()
else:
    fault_response()