2016-10-05 100 views
0

我有一个使用PySerial运行数据采集的进程。现在工作正常,但是为了让它连续工作我需要做一些奇怪的事情,但我不确定这是否正常,所以我在问这个问题。Python: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()保持零返回......不管^ h设备上有很多数据!

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

+0

很难说出什么问题,因为它可能与配置问题(baudRate/Parity)有关,甚至与设备本身有关,一个问题是你的环路是否有睡眠?也许你是用请求“泛滥”设备,它可以处理它。 –

+0

@KobiK其实没有。我不会在循环中“睡觉”。因为我想尽可能快地提取所有可用的数据,而设备只排队16KB的数据。 –

+0

如果它只是'inWaiting()',那么它不应该是一个问题,但如果你发送的命令是不同的情况,正如我说的很难回答,因为它可能是硬件问题。 –

回答

0

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