0

我连接到串口的代码

    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 表示每个数据包的开始,在第二张图片中,您可以看到它与前一个数据包的剩余块相连。我是串行编程的新手,如果能帮助我理解我的错误,我将不胜感激。第一个包 第二个包

4

1 回答 1

1

我没有关于 pyserial 的具体知识,但是之前用不同的语言处理过串行通信,我得出的结论是你不能确定你的数据将如何发送/接收。

您有多种选择:

  • 总是发送相同数量的 N 字节,并且在接收端,等到缓冲区有超过 N 的数据,然后再读取一块 N 字节。
  • 实现带有分隔符的协议(例如“\n”)并解析接收到的数据以通过查找分隔符来重构您的数据。
于 2018-02-07T14:54:01.110 回答