0

我有一个使用 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()不断返回零......无论设备上有多少数据!

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

4

1 回答 1

0

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

于 2016-10-18T14:05:01.273 回答