0

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

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

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

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
  • 蟒蛇 2.7
  • Minicom 或 screen 用于终端仿真

测试环境:

  • ATC USB/RS485 转换器
  • ATC 串行/RS485 转换器,带 USB 串行适配器
4

1 回答 1

0

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

于 2014-08-23T14:18:59.297 回答