2016-10-05 99 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」提出問題的可能原因。