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