我在這裏有這個簡短的代碼片段,工作正常,但我有擺脫硬編碼部分的問題。PySerial超時和回調
ser = serial.Serial()
ser.baudrate = 38400
ser.port = '/dev/ttyUSB0'
ser.parity = serial.PARITY_EVEN
ser.timeout = 1
ser.open()
ser.flushInput()
ser.write(command) #command here is a simple request for data to my device
msg = ser.read(200)
ser.close()
雖然這工作正常,我遇到的問題是這樣的。根據註冊的內容,返回消息的長度可以從8字節到近200字節。通過使用超時,如果它沒有收到200字節,我會阻止我的讀取命令停頓。我也不知道返回消息的長度,因此我不能動態更改ser.read。此外,在傳輸結束時沒有不變的結束符或常量字符以在while循環中鎖定。
有沒有一個更穩定/動態的方式來做到這一點?如果請求太長,我可能會耗盡時間,或者如果沒有完整的數據傳輸,我可能會破壞讀取緩衝區。另一方面,增加定時器意味着我的請求速率會減慢(但是增加讀取緩衝區沒有問題)。
發送響應的設備會一次發送答覆,還是會在數據中出現時間差?真的,通過串行鏈路發送數據的設備應該提供某種分組。 – quamrana