以前interCharTimeout
,從3.0版本inter_byte_timeout
。什麼是pyserial中的inter_byte_timeout(interCharTimeout)?
API:http://pyserial.readthedocs.org/en/latest/pyserial_api.html#serial.Serial.inter_byte_timeout
我懷疑下面是普通timeout
和inter_byte_timeout
之間的區別如下:
- 超時:調用讀取功能,當倒計時開始。即使字節一直到來,當從讀取函數被調用時經過指定的時間量時,它將停止讀取/拋出異常。
- inter_byte_timeout:每次接收到一個字節時,開始倒計時時鐘。如果字符在字節間以fx 1ms連續傳輸,如果inter_byte_timeout剛好大於1ms,則它可以永遠持續。
我說得對嗎?
我懷疑沒有,因爲我不能使功能超時。我嘗試了下面的例子。我期待inter_byte_timeout使它能夠讀取和打印一個「字符串」,因爲它們是由arduino寫的,每秒一個。相反,它每三秒鐘超時,然後打印出那段時間的內容。
Arduino的草圖寫入序列:
void setup() {
Serial.begin(9600);
while(!Serial); //wait for connection
for (int i=0;true;i++){
Serial.printf("=== iteration %d ===\n", i);
delay(1000); //ms
}
}
void loop() {
}
Python腳本:
import serial
ser=serial.Serial(port='/dev/ttyACM0', timeout=3,inter_byte_timeout=0.01)
for i in range(100):
a = ser.read(10000)
print i, len(a), repr(a)
命令行輸出:
~$ python test.py
0 60 '=== iteration 0 ===\n=== iteration 1 ===\n=== iteration 2 ===\n'
1 60 '=== iteration 3 ===\n=== iteration 4 ===\n=== iteration 5 ===\n'
2 60 '=== iteration 6 ===\n=== iteration 7 ===\n=== iteration 8 ===\n'
我在Ubuntu上使用串口3.0.1。另一端的串行設備是Teensy(Arduino模擬)。
哇,ndemou!很好找,對我來說這是一個pyserial補丁的候選人。我會認爲指定的任何非零值應該設置爲最小可能的非零值(如果太低),而不是零!像:'vtime = max(int(self。_inter_byte_timeout * 10),1)if self._inter_byte_timeout else 0' – RufusVS