串口的数据协议解析

接收来自串口的数据并解析,看起来是件容易的事情。而实际上,当协议变得复杂时,处理不好或者考虑不完善,会产生很多问题。

 

一般来说,通过串口传输的单个数据包都不会太大,否则,会导致数据被覆盖。对于通过串口传输的大数据,处理的办法是分割成多个小的数据包。可能出现的情况是因为接收和读取的不同步,接收到的数据需要分为多次读取,每次读取的单个数据包的一部分或者是一个数据包的后半部分和一个数据包的前半部分。另一种可能性是通过蓝牙或者红外等技术传输时,在数据流中加入了多余的数据。当传输的通道变得不可靠时,就需要引入一些冗余和机制来保证上层数据的正确性。

 

 

解析数据的第一步是要从字节流中提取出一个完整的数据包,我在这里只是对如何抓取一个完整的数据包并解析记录一些思路。

 

对于一个完整的数据包来说,必须要有可识别的部分。通常的识别方法是确定的前缀、后缀和数据结构。一般来说,前缀很好识别,而后缀,可能要结合数据结构来识别。

 

 

使用一个队列来存储中间数据,思路如下:

1. 如果队列非空;

   将队列中的数据取出,与新到达的数据合在一起,按照队列为空处理。

2. 如果队列为空;

  扫描字节流:

      如果找到了前缀,则判断以该前缀开始的数据是否一个完整的数据包。如果是,则处理,并将该数据包的结尾作为新的扫描起点。如果找不到前缀,则将从该次扫描起点的所有数据压入队列。

 

 

 

 

 

 

 

 

已标记关键词 清除标记
相关推荐
<p> <span style="font-size:14pt;">课程背景<span></span></span> </p> <p> <span>Modbus </span><span>协议是工业自动化控制系统中常见的通信协议协议的全面理解是个痛点。<span></span></span> </p> <p> <span>本课程主讲老师集<span>10</span>多年在<span>Modbus</span>协议学习、使用中的经验心得,结合当前物联网浪潮下<span>Modbus</span>协议开发的痛点,推出这套面向<span>Modbus </span>协议初学者的课程。本课程不同于以往市面课程只是协议讲解无实现代码,而是采用讲解与实践并重的方式,结合<span>STM32F103ZET6</span>开发板进行手把手编程实践,十分有利于初学者学习。<span></span></span> </p> <p> <span>涵盖了学习者在<span>Modbus</span>协议方面会遇到的方方面面的问题,是目前全网首个对<span>Modbus</span>协议进行全面总结的课程。<span></span></span> </p> <p> <span style="font-size:14pt;">课程名称<span></span></span> </p> <p> <span style="font-size:15pt;"><span> </span></span><span><span>  </span><<Modbus</span><span>协议讲解及实现<span>>></span></span> </p> <p> <span style="font-size:14pt;">课程内容<span></span></span> </p> <p> <span>1</span><span>、<span>Modbus </span>协议的基础。<span></span></span> </p> <p> <span>2</span><span>、<span>Modbus</span>协议栈函数编程实现。<span></span></span> </p> <p> <span>3</span><span>、<span>Modbus</span>协议在串行链路编程实现。<span></span></span> </p> <p> <span>4</span><span>、<span>Modbus</span>协议在以太网链路编程实现。<span></span></span> </p> <p> <span>5</span><span>、常见问题的解决方法。<span></span></span> </p> <p> <span style="font-size:14pt;">带给您的价值<span></span></span> </p> <p> <span>通过学习本课程,您可以做到如下:<span></span></span> </p> <p> <span>1</span><span>、全面彻底的理解<span>Modbus</span>协议。<span></span></span> </p> <p> <span>2</span><span>、理解在串行链路,以太网链路的实现。<span></span></span> </p> <p> <span>3</span><span>、掌握<span>Modbus</span>协议解析的函数编程方法,调试工具的使用。<span></span></span> </p> <p> <span>4</span><span>、掌握多个串口,网口同时运行同一个<span>Modbus</span>协议栈的方法。<span></span></span> </p> <p> <span>5</span><span>、掌握<span>Modbus</span>协议下,负数,浮点数等处理方法。<span></span></span> </p> <p> <span style="font-size:14pt;">讲师简介<span></span></span> </p> <p> <span>许孝刚,山东大学工程硕士,副高职称,技术总监。<span></span></span> </p> <p> <span>10</span><span>多年丰富嵌入式系统开发经验,国家软考“嵌入式系统设计师”。<span></span></span> </p> <p> <span>2017</span><span>年获得“华为开发者社区杰出贡献者”奖励。<span></span></span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页