如何用python查找串行流的第一个字节?

2024-05-10 15:04:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从RS232中读取一个数据流,该数据流使用python3.3.2和pyserial。我从以下几点开始:

ser = serial.Serial('/dev/ttyUSB0', baudrate=19200, timeout=3, stopbits=serial.STOPBITS_TWO)
ser.write(bytes([0x05, 0x69, 0x02, 0x0A, 0x86]))

在这之后,我每秒都会得到一个107字节长的数据集。第一个字节应该是107(字节数),第二个字节应该是105(代码)。在

从107和105开始分离一个107字节长的数据集的最佳方法是什么?如果我使用print(ser.read(107))几次,我会得到:

^{pr2}$

^ {< CD2>}(ASCII为107)位于中间。在


Tags: 数据dev字节timeoutserialrs232ser数据流
1条回答
网友
1楼 · 发布于 2024-05-10 15:04:38

在发出请求之前刷新输入可能会有帮助。一、 e

ser.read(ser.inWaiting())

读出所有正在等待的字节。然后,希望不再发送字节,您可以发送命令:

^{pr2}$

这是为了确保接下来的所有字节都是这个命令的应答。在

然后读取数据,直到得到107:

found = False
buffer = '' # what is left from the previous run...
while not found:
    rd = ser.read(50)
    buffer += rd
    sp = buffer.split(chr(107), 1)
    if len(sp) == 2:
        pkt = chr(107) + sp[1] # candidate for a valid packet
        if pkt[1] == chr(105): # 
            while len(pkt) < 107: # TODO add a timeout condition here...
                rd = ser.read(107 - len(pkt))
                pkt += rd
            found = True
        else:
            buffer = pkt[1:] # process this further...
    else: # no 107 found; empty the buffer.
        buffer = ''
# Now we have a pkt of 107 bytes and can do whatever we want with it.

相关问题 更多 >