我有一個使用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設備上有很多數據!
這種行爲是否是預期的,應該始終考慮是否發生或不發生?
很難說出什麼問題,因爲它可能與配置問題(baudRate/Parity)有關,甚至與設備本身有關,一個問題是你的環路是否有睡眠?也許你是用請求「氾濫」設備,它可以處理它。 –
@KobiK其實沒有。我不會在循環中「睡覺」。因爲我想盡可能快地提取所有可用的數據,而設備只排隊16KB的數據。 –
如果它只是'inWaiting()',那麼它不應該是一個問題,但如果你發送的命令是不同的情況,正如我說的很難回答,因爲它可能是硬件問題。 –