python 读取串口read_until(b"\r\n") 处理太慢 丢数据
时间: 2023-08-07 18:02:10 浏览: 170
当使用read_until(b"\r\n")函数读取串口数据时,如果数据处理太慢就会导致丢失数据。这是因为read_until函数是阻塞式的,它会一直等待数据的到来,直到读取到以特定字符结尾的完整数据包。
为了避免数据丢失,可以采用以下方法:
1. 设置串口的超时时间,当串口接收数据的时间超过超时时间时,read_until函数会自动返回。可以使用serial.Serial类的timeout属性来设置超时时间,例如:ser.timeout = 1 # 设置超时时间为1秒
2. 使用非阻塞式的读取方式,可以使用readline()函数或者read()函数读取数据,同时使用select模块来判断串口是否有数据可读。这样可以避免read_until函数等待时间过长导致的数据丢失问题。例如:
```python
import serial
import select
ser = serial.Serial('COM1', 9600, timeout=1)
while True:
# 使用select模块判断串口是否有数据可读
r, w, e = select.select([ser], [], [], 1)
if ser in r:
# 读取数据
data = ser.readline()
print(data)
```
在上述代码中,使用select模块判断串口是否有数据可读,如果有数据可读就使用readline()函数读取数据,如果没有数据可读则等待1秒后重新判断。这样可以避免read_until函数等待时间过长导致的数据丢失问题。
阅读全文