首页 文章

Python串行写 - 丢失字节

提问于
浏览
0

我试图用Python 2.7 pySerial包通过串口(用RS232,RS485测试)发送9个字节 . 如果我将字节写入串口,则一些字节会随机丢失(不会到达接收端) . 如果我在每个字节写入之间使用1毫秒等待,则所有字节都到达接收端 .

我测试了同一操作系统上2个串行终端之间的功能 .

这是 causes packet (byte) losses 的代码片段:

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()

is working 的片段:

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或屏幕用于终端仿真

测试环境:

  • ATC USB / RS485转换器

  • 带USB-Serial适配器的ATC Serial / RS485转换器

1 回答

  • 0

    通常,USB串行转换器必须配置为不关闭缓冲区 . 正如您所看到的,如果您提供睡眠以等待数据完成,则可以正常工作 . 但是如果你只是转储一堆字符然后关闭设备它的缓冲区可能仍然有数据在关闭时被破坏 . 我建议您将设备配置为不刷新缓冲区(如果可能)或等待字符时间再执行关闭 .

相关问题