pySerial 拆分数据包并发送数据。如何一次发送大字节?

pySerial splits up the packet and sends data. How do I send large bytes in one go?

我的串口连接代码

    ser = serial.Serial(
port='COM4',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,timeout=0.5
)

if (ser.isOpen):
  ser.close()

ser.open()
buf=b''


out = ''
while 1:
while ser.inWaiting() > 0:
    sleep(1)
    #if ser.outWaiting()==0:
    out = ser.read(ser.inWaiting())

if out != '':
    handle_command(out, ser)
    print ">>" + out.encode('hex')

    out = ''

这部分是我向端口写入数据的地方

    elif(some condition):

       if(ser.outWaiting()==0):
         out=ser.write(pSportTotals_p1)
         sleep(0.001)
         ser.flush()


       if(ser.outWaiting()==0):
        ser.write(pSportTotals_p2)
        sleep(0.001)
        ser.flush()

但输出不稳定,pSportsTotals_p1 分两部分发送,pSportTotals_p2 有时与前一个数据包的其余部分一起发送。在随附的屏幕截图中,0a 表示每个数据包的开始,在第二张图片中,您可以看到它与前一个数据包的剩余块相连。我是串行编程的新手,如果能帮助我理解我的错误,我将不胜感激。first packet second packet

我对 pyserial 没有具体的了解,但是之前用不同的语言处理过串口通信,我得出一个结论你不能确定你的数据是怎么回事成为 sent/received.

您有多种选择:

  • 始终发送相同数量的 N 字节,在接收端,等待缓冲区有超过 N 个数据,然后再读取 N 字节的块。
  • 实施带有分隔符(例如“\n”)的协议并解析接收到的数据以通过查找分隔符来重建您的数据。