System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于队列的数据流有效数据包实时提取方法技术_技高网

一种基于队列的数据流有效数据包实时提取方法技术

技术编号:43668611 阅读:2 留言:0更新日期:2024-12-18 20:55
本发明专利技术公开了一种基于队列的数据流有效数据包实时提取方法,包括:(1)周期性访问数据流源,一次性读取数据并存入数据队列;(2)检查队列长度,若大于一个数据包长度,执行步骤(3);否则返回步骤(1);(3)从队列头部开始搜索数据包头,丢弃无效字节直至找到包头,若此时队列长度大于一个数据包长度,执行步骤(4);否则返回步骤(1);(4)读取并校验数据包,若校验通过,执行步骤(5);若校验失败,清除一个数据包长度的队列数据,返回步骤(2);(5)提取有效数据,并清空队列,返回步骤(1);若同时要求数据完整性,则只清除一个数据包长度的队列数据,返回步骤(2)。本发明专利技术提出的方法通过队列机制和有效的数据包处理流程,能够可靠、高效、实时地提取和处理数据包,同时也能保证数据的完整性和系统的稳定性。

【技术实现步骤摘要】

本专利技术涉及一种基于队列的数据流有效数据包实时提取方法,属于数据传输。


技术介绍

1、数据流传输是指将数据以连续、定序的方式在不同系统或设备之间进行传递和处理的过程。随着信息技术的不断发展,数据流传输已成为现代通信系统中一种重要的技术手段。数据流传输的一种典型形式就是通过串行通信接口进行传输。串行通信作为数据流传输的一种具体实现方式,因其接口简单、使用方便等优点,被广泛应用于各类数据通信场合。在实际应用中,数据发送端通常将数据封装成数据包,并以数据流的形式通过串行通信接口进行传输,接收端则需从接收到的数据流中准确无误地提取出完整的数据包。因此,如何从这些数据流中实时、有效地提取有效数据包是一个关键问题,尤其是在分布式非同步数据采集和控制系统中,由于存在传输速率不同步、数据包丢失、信号干扰等问题,数据的实时性和准确性至关重要。

2、公布号为cn105022712a的专利公开了一种基于数据流传输的数据包提取方法,通过判断解包进度值来执行不同的步骤以提取数据包。然而,由于需要频繁的访问接受队列和检查数据包的同步字可能导致处理延迟,对于高速数据流不够高效,无法满足高实时性和高可靠性的要求。公告号为cn107766265b的专利公开了一种支持定长包、变长包、混合包的串口数据提取方法,按照已配置的包格式,在缓冲区中提取一个数据包。然而,由于数据全部放置在缓冲区中且每次只读取一个数据包的数据,会占用大量的系统资源。同时在高数据传输速率下,可能无法满足实时性要求。

3、为了解决上述问题,有必要提出一种高效、可靠、可以保证数据的实时性和准确性的数据流有效数据包提取方法,使系统能够在复杂通信环境下确保数据的实时性和准确性,提高整个系统的性能和稳定性。


技术实现思路

1、本专利技术提出了一种基于队列的数据流有效数据包实时提取方法,通过队列机制和有效的数据包处理流程,能够可靠、高效、实时地提取和处理数据包,同时也能保证数据的完整性和系统的稳定性。

2、本专利技术的技术解决方案:

3、(1)周期性访问数据流源,一次性读取全部数据并依次存放到一个数据队列中;

4、(2)检查数据队列的长度,若大于等于一个数据包长度,执行步骤(3);若长度不够则返回步骤(1);

5、(3)从队列头部开始搜索数据包头,丢弃无效字节直至找到包头,若此时队列长度大于等于一个数据包长度,执行步骤(4);否则返回步骤(1);

6、(4)读取并校验数据包,若校验通过,执行步骤(5);若校验失败,清除一个数据包长度的队列数据并进行报警表明系统通信异常,返回步骤(2);

7、(5)提取有效数据,并清空队列,同时表明系统通信正常,返回步骤(1);若同时要求数据完整性,则只清除一个数据包长度的队列数据,返回步骤(2)继续解析并提取数据。

8、步骤(1)中,周期性访问数据流源,一次性读取全部数据并依次存放到一个数据队列中,具体包括:设置一个固定的时间间隔来访问数据流源,每次访问时,从数据流源的缓冲区中读取当前所有的数据并将读取到的所有数据按顺序依次存放到一个数据队列(先进先出队列)中。用于临时存储并按时间顺序管理接收到的数据字节。

9、步骤(2)中,检查数据队列的长度,若大于等于一个数据包长度,执行步骤(3);若长度不够则返回步骤(1),具体包括:

10、检查当前数据队列中的数据总长度。如果数据队列中的数据长度大于等于一个有效数据包的长度,则进入步骤(3),开始搜索有效数据包;如果数据长度不足,则暂时停止进一步操作,返回步骤(1),等待下一次周期性数据读取。

11、步骤(3)中,从队列头部开始搜索数据包头,丢弃无效字节直至找到包头,若此时队列长度大于等于一个数据包长度,执行步骤(4);否则返回步骤(1),具体包括:

12、从队列的头部字节(即最早收到的字节)开始逐个检查数据。数据包头通常是一个或多个特定的字节序列,用于标识数据包的开始。根据协议定义,这些字节序列可能是固定值或特定格式。如果当前检查的字节序列不是数据包头,则从队列中丢弃当前头部的一个或多个无效字节,继续向后搜索。一旦找到数据包头,检查队列中的数据长度是否足够一个完整的数据包。如果长度足够,进入步骤(4),否则返回步骤(1)。

13、步骤(4)中,读取并校验数据包,若校验通过,执行步骤(5);若校验失败,清除一个数据包长度的队列数据并进行报警表明系统通信异常,返回步骤(2),具体包括:

14、在找到数据包头后,读取接下来的数据,这些数据包括包头后的实际数据和校验数据。根据数据包的格式定义,提取必要的字段并进行数据包校验。如果校验通过,说明数据包有效,进入步骤(5);如果校验失败,表明数据包可能已损坏或数据有误,从队列中丢弃一个数据包长度的数据,继续从步骤(2)开始重新搜索下一个数据包头,同时记录下校验失败的总次数(每次失败次数自加1)。如果总次数达到设定值,则进行报警表明系统处于异常通信状态。

15、步骤(5)中,提取有效数据,并清空队列,同时表明系统通信正常,返回步骤(1);若同时要求数据完整性,则只清除一个数据包长度的队列数据,返回步骤(2)继续解析并提取数据,具体包括:

16、从通过校验的数据包中提取有效数据部分。在队列中移除整个已处理的数据包,释放空间,以便接收和处理更多的数据。将校验失败的总次数清零,以表明系统处于正常通信状态。处理完当前数据包后,不再继续解析后续的数据,清空队列,并返回步骤(1),重新开始周期性读取数据。若要求保证数据的完整性,处理完当前数据包后,返回步骤(2),在当前周期内继续解析队列中剩余的数据,提取更多的有效数据包。

本文档来自技高网...

【技术保护点】

1.一种基于队列的数据流有效数据包实时提取方法,其特征在于包括以下步骤:

2.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(1)中,周期性访问数据流源,一次性读取全部数据并依次存放到一个数据队列中,具体包括:

3.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(2)中,检查数据队列的长度,若大于等于一个数据包长度,执行步骤(3);若长度不够则返回步骤(1),具体包括:

4.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(3)中,从队列头部开始搜索数据包头,丢弃无效字节直至找到包头,若此时队列长度大于等于一个数据包长度,执行步骤(4);否则返回步骤(1),具体包括:

5.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(4)中,读取并校验数据包,若校验通过,执行步骤(5);若校验失败,清除一个数据包长度的队列数据并进行报警表明系统通信异常,返回步骤(2),具体包括:

6.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(5)中,提取有效数据,并清空队列,同时表明系统通信正常,返回步骤(1);若同时要求数据完整性,则只清除一个数据包长度的队列数据,返回步骤(2)继续解析并提取数据,具体包括:

...

【技术特征摘要】

1.一种基于队列的数据流有效数据包实时提取方法,其特征在于包括以下步骤:

2.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(1)中,周期性访问数据流源,一次性读取全部数据并依次存放到一个数据队列中,具体包括:

3.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(2)中,检查数据队列的长度,若大于等于一个数据包长度,执行步骤(3);若长度不够则返回步骤(1),具体包括:

4.权利要求1所述的一种基于队列的数据流有效数据包实时提取方法,其特征在于所述步骤(3)中,从队列头部开始搜索数据包头,丢弃无效字节直至...

【专利技术属性】
技术研发人员:李象府戢焕成张郡桐崔轶博张天宏黄向华
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1