我有一个使用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()
保持返回零...无论设备上有多少数据!
这种行为是否是预期的,应该始终考虑它是否发生?
答案 0 :(得分:0)
在不经常调用inWaiting()
之后问题大大减少了。无论如何,我保留了重新连接部分,以确保我的程序永远不会失败。感谢“Kobi K”提出可能的问题原因。