Python:PySerial随机与设备断开连接

时间:2016-10-05 13:53:02

标签: python pyserial stability

我有一个使用PySerial运行数据采集的进程。它现在工作正常,但我必须做一些奇怪的事情才能使它连续工作,我不确定这是否正常,所以我问这个问题。

会发生什么:看起来连接偶尔会丢失!大约每30-60分钟一次,有大误差条(可能会持续数小时并且可以,但有时会经常发生)。

我的问题:这是标准吗?

我的临时解决方案:我写了一个简单的“重新打开”功能,如下所示:

def ReopenDevice(devObject):
    try:
        devObject.close()
        devObject.open()
    except Exception as e:
        print("Error while trying to connect to device " + devObject.port + ". The error says: " + str(e))
        time.sleep(2)

我所做的是,如果数据拉动失败2分钟,我会使用此功能重新打开设备,并且它会继续正常运行而没有任何问题。

我的程序模型:这是一个GUI程序,用户点击“开始”之类的东西,该按钮做了一些准备工作并通过multiprocessing.Process()运行一个函数,该函数以:< / p>

devObj = serial.Serial()
#... other params
devObj.open()

然后该函数运行一个while循环,用于保持轮询数据,如:

bytesToRead = devObj.inWaiting()
if bytesToRead != 0:
    buffer = decodeString(devObj.read(bytesToRead))
    #process buffer and push it to a list...

我知道问题发生的方式是,devObj.inWaiting()保持返回零...无论设备上有多少数据!

这种行为是否是预期的,应该始终考虑它是否发生?

1 个答案:

答案 0 :(得分:0)

在不经常调用inWaiting()之后问题大大减少了。无论如何,我保留了重新连接部分,以确保我的程序永远不会失败。感谢“Kobi K”提出可能的问题原因。