我试图用Python2.7 RS232包通过串行端口发送9个字节(用RS485、RS485测试)。如果我将字节写入串行端口,一些字节就会随机丢失(不要到达接收端)。如果在单个字节的每次写入之间使用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()
随机丢包的根本原因是什么?
系统详细信息:
测试环境:
发布于 2014-08-23 14:18:59
通常,USB串行转换器必须配置为在关闭时不刷新缓冲区。正如您所看到的,如果您提供一个睡眠来等待数据的完成,它就会工作。但是,如果您只是转储一堆字符,然后关闭设备,它的缓冲区可能仍然有数据,在关闭时会被破坏。我只建议您将设备配置为不刷新缓冲区(如果可能的话),或者在执行关闭之前等待字符时间。
https://stackoverflow.com/questions/25394723
复制相似问题