首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python串行写丢失字节

Python串行写丢失字节
EN

Stack Overflow用户
提问于 2014-08-19 23:47:16
回答 1查看 2.7K关注 0票数 0

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

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

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

代码语言:javascript
运行
复制
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()

正在运行的片段

代码语言:javascript
运行
复制
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
  • 使用迷你或屏幕进行终端仿真。

测试环境:

  • ATC USB/USB 485转换器
  • 带USB串行适配器的ATC串行/USB 485转换器
EN

回答 1

Stack Overflow用户

发布于 2014-08-23 14:18:59

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25394723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档