在 Python 中的特定时间内通过串口等待数据
Waiting for data by serial port during certain time in Python
我必须在一定时间内通过串口等待一定大小的数据。如果我这次获得的数据较少,那么我想避免读取数据。如果我早点获得足够的数据,那么我想阅读它们并停止等待数据。
我目前的解决方案是这样的:
serial.open()
start_time = time()
while serial.in_waiting < expected_data_size: # waiting certain size of data
if time_to_wait < time() - start_time: # time is expired
serial.close()
return
data = serial.read(expected_data_size)
serial.close()
但我认为这不是好的解决方案,因为比较(在 "while" 和 "if" 块中)发生很多次,同时等待数据。
请告诉我,如何在 Python 中更好地实现它 3. 要使用串行端口,我使用 pySerial。
提前致谢!
你不需要发明新轮子。
1)当你打开端口时,你应该设置超时。
2) 端口打开后,需要设置读取的数据大小 "read" API.
读取 API 将 return 数据大小或 return 如果发生超时,数据会减少。
查看文档中的示例:
>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
... x = ser.read() # read one byte
... s = ser.read(10) # read up to ten bytes (timeout)
我必须在一定时间内通过串口等待一定大小的数据。如果我这次获得的数据较少,那么我想避免读取数据。如果我早点获得足够的数据,那么我想阅读它们并停止等待数据。
我目前的解决方案是这样的:
serial.open()
start_time = time()
while serial.in_waiting < expected_data_size: # waiting certain size of data
if time_to_wait < time() - start_time: # time is expired
serial.close()
return
data = serial.read(expected_data_size)
serial.close()
但我认为这不是好的解决方案,因为比较(在 "while" 和 "if" 块中)发生很多次,同时等待数据。
请告诉我,如何在 Python 中更好地实现它 3. 要使用串行端口,我使用 pySerial。
提前致谢!
你不需要发明新轮子。 1)当你打开端口时,你应该设置超时。 2) 端口打开后,需要设置读取的数据大小 "read" API.
读取 API 将 return 数据大小或 return 如果发生超时,数据会减少。
查看文档中的示例:
>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
... x = ser.read() # read one byte
... s = ser.read(10) # read up to ten bytes (timeout)