PySerial随机断开与设备的连接



我有一个使用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()运行一个以

开头的函数:
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()一直返回零…不管设备上有多少数据!

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

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

最新更新