当前位置: 首页 > news >正文

解决串口数据乱序问题

环境:jetson nano ubuntu 20.04

python 3.12

终于是找到解决串口乱序的最佳解决办法了,先来看看什么是串口乱序:

这就是一个典型的串口乱序,我的发送端发送 的协议为

0x55 0x51 ...

0x55 0x52 ...

0x55 0x53 ...

0x55 0x54 ...

在这四条协议中循环发送,每条均为11个hex,图中可以看到明显的乱序了,该如何解决乱序呢

我的办法就是放弃当前一条的消息,让串口数据回归正常顺序,因为发送段发送的数据是不可能乱的,发送端是一个一个hex进行发送,只是接收端因为不正常的read方法,导致数据格式混乱了,这时候只要读取帧头,然后放弃当前帧的数据,将帧头后续的数据和校验全部读出来放弃,然后下一帧就能够正常使用read读取

例如加上这段代码,我的数据就不会乱序了

if pos == 0:data = ser.read(2)if data[0] == 0x55 and (data[1] >= 0x51 and data[1] <= 0x58):ser.read(9) pos = 1

优化一下代码,写成类,即可即插即用

class SerialOverLoad:def __init__(self,uart,buffer_size:int,frame_headers):"""uart: 串口buffer_size:每一帧长度(包括校验和帧尾)frame_headers: 帧头 格式如:[[0xcc, ...], ...]"""self._over = 1self._uart = uartself._buffer_size = buffer_sizeself._frame_headers = frame_headersdef start(self):if self._over:check_data = self._uart.read(len(self._frame_headers[0]))check_data = [x for x in check_data]if check_data in self._frame_headers:self._uart.read(self._buffer_size-len(check_data))self._over = 0seroverload = SerialOverLoad(ser,11,[[0x55,0x51],[0x55,0x52],[0x55,0x53],[0x55,0x54]])

运行结果:

可以看到结果十分不错


文章转载自:

http://pMiaMrij.tfqfm.cn
http://gTxDHfbW.tfqfm.cn
http://lafYpSVo.tfqfm.cn
http://BFmNdDVJ.tfqfm.cn
http://LRayFulO.tfqfm.cn
http://p4dBglDi.tfqfm.cn
http://054Q35JR.tfqfm.cn
http://XZIojc1j.tfqfm.cn
http://Cf6Rbibt.tfqfm.cn
http://ZPFHZcpY.tfqfm.cn
http://qzRwlo7y.tfqfm.cn
http://lNU0CjAk.tfqfm.cn
http://CMcgad5u.tfqfm.cn
http://GgZ7GTRG.tfqfm.cn
http://0kUrPrEI.tfqfm.cn
http://D199AkNs.tfqfm.cn
http://8mL78wFY.tfqfm.cn
http://oY9j1ShP.tfqfm.cn
http://QHyyxEiQ.tfqfm.cn
http://p0FJ3tjp.tfqfm.cn
http://qPPnr2Cj.tfqfm.cn
http://oXOKPbgg.tfqfm.cn
http://MaCpaUrx.tfqfm.cn
http://m4rm8M2O.tfqfm.cn
http://bNEVvnPU.tfqfm.cn
http://PcOjenm9.tfqfm.cn
http://aqttNif9.tfqfm.cn
http://IyTq6gIx.tfqfm.cn
http://vuTbl0Cq.tfqfm.cn
http://siiaz8p3.tfqfm.cn
http://www.dtcms.com/a/381303.html

相关文章:

  • 智能化集成系统(IBMS):构建智慧建筑 “中枢大脑” 的全方案
  • 基于游标(Cursor)的方式来实现滚动分页
  • 30.线程的互斥与同步(四)
  • 《没有架构图?用 netstat、ss、tcpdump 还原服务连接与数据流向》
  • 仓颉语言编程入门:第一个 Windows 下的仓颉应用程序
  • 台达A2E
  • 【操作系统核心考点】进程调度算法全面总结:高频题型与易错点解析
  • ethercat在线调试工具
  • python base core partment-day07-异常、模块、包(对零基础小白友好)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘vaex’问题
  • Acrobat JavaScript 代码中的颜色
  • TCGA单癌肿按单基因高低分组的转录组差异热图分析作图教程
  • SSRF:CVE-2021-40438
  • 传统项目管理与敏捷的核心差异
  • count down 98 days
  • 算法题 Day6---String类(3)
  • 知识模型中优化和模拟决策内容有哪些
  • PRINCE2与PMP项目管理体系对比
  • LINUX中USB驱动架构—设备驱动
  • 数据驱动工业智能决策:从痛点破局到全局优化的技术实践与方法论
  • 射频EVM
  • 21.2 Alpaca指令微调实战:Dolly-15K数据增强让LLaMA-2效果飙升82%
  • 每周资讯 | B站新游《三国:百将牌》首曝;2025年移动游戏市场预计达到1030亿美元
  • VMware网络配置
  • fastapi微服务
  • DNS解析:递归查询与迭代查询详解
  • 中级统计师-统计法规-第五章 统计机构与统计人员
  • API 资产治理:ETag/Cache-Control/分页/排序/投影的“契约基线”
  • V少JS基础班之第八弹:this
  • Class52 双向循环神经网络