使用ser.read丢失字节 - Python

时间:2017-04-04 04:30:07

标签: python serial-port pyserial uart

我试图从微控制器读取数据,配置:19200,8数据位,偶校验和1个停止位。控制器通过rs485传输数据,我正在通过rs485到rs232转换器读取数据。数据每4ms传输一次,并且在代码中显示的相应字节上每4ms需要一次反射。我在微控制器上编写了类似的代码,一切正常,但我需要在Python上实现相同的功能。从python读取时,我注意到通过ser.read()读取时会丢失一些字节。我还有一个逻辑分析仪转换,看看我缺少什么数据。我在类似的帖子上尝试了多种解决方案,但它对我没有用,因为解决方案要求我增加暂停时间 例如Losing data in received serial string

import serial
import time
ser = serial.Serial()

ser.port='COM1'  # This is COM1, use 1 for COM2 etc
ser.baudrate=19200
ser.bytesize=serial.EIGHTBITS
ser.parity=serial.PARITY_EVEN
ser.stopbits=serial.STOPBITS_ONE
ser.xonxoff=0
ser.rtscts=0
ser.timeout=0

while True:
    rxbuf = ser.read(1)
    print(rxbuf)
    if(rxbuf == b'\x05' or rxbuf == b'\x06' or rxbuf == b'\x15'):
        time.sleep(0.004)
        ser.write(b'\x05')
    elif (rxbuf == b'\x02' or rxbuf == b'\x01'):  
        rxbuf_len = ser.read(16)
        print(rxbuf_len)

输出: B '\ X05 \' B '\ X05 \' B '\ X05 \' B '\ X05 \' B '\ XF5 \' B '\ X28 \' B '\ X76 \' B '\ X02 \' B '\ XF2 \ X97 \ X00 \ X00 \ x8er \ x9a \ XC0 \ X14 \ XFF \ XFF |:F \ X18 \ X00'

这是错误的,在0xF5之前有一个0x02,除了许多其他字节之外还没有被读取。

0 个答案:

没有答案