Python 串口写入 - 丢失字节

0 投票
1 回答
2994 浏览
提问于 2025-04-18 17:51

我正在尝试通过串口发送9个字节的数据(用RS232和RS485测试),使用的是Python 2.7的pySerial库。 当我把字节写入串口时,有些字节会随机丢失(在接收端收不到)。 但如果我在每次写入一个字节之间等待1毫秒,所有字节都会成功到达接收端。

我在同一个操作系统的两个串口终端之间测试了这个功能。

以下是导致数据包(字节)丢失的代码片段:

import serial
import struct

ser = serial.Serial()
ser.baudrate = 9600
ser.parity = "N"
ser.rtscts = False
ser.xonxoff = False
ser.write(struct.pack('B', 0x61))
ser.write(struct.pack('B', 0x62))
ser.write(struct.pack('B', 0x63))
...
ser.close()

以下是正常工作的代码片段:

import serial
import struct
from time import sleep

ser = serial.Serial()
ser.baudrate = 9600
ser.parity = "N"
ser.rtscts = False
ser.xonxoff = False
ser.write(struct.pack('B', 0x61))
sleep(0.001)
ser.write(struct.pack('B', 0x62))
sleep(0.001)
ser.write(struct.pack('B', 0x63))
sleep(0.001)
...
ser.close()

那么,随机丢包的根本原因可能是什么呢?

系统信息:

  • OSX 10.9.4
  • Python 2.7
  • 使用Minicom或screen进行终端仿真

测试环境:

  • ATC USB/RS485转换器
  • ATC串口/RS485转换器与USB-串口适配器

1 个回答

1

通常情况下,USB串口转换器需要设置为在关闭时不清空缓存。正如你所看到的,如果你在关闭之前让程序暂停一下,等数据传输完成,就能正常工作。但是如果你直接发送一堆字符然后关闭设备,缓存里可能还会有数据,这些数据在关闭时就会被丢掉。我建议你要么设置设备不清空缓存(如果可以的话),要么在关闭之前等一等,让字符传输完成。

撰写回答