一种二进制报文的声明式报文解码方法技术

技术编号:36949911 阅读:61 留言:0更新日期:2023-03-22 19:10
本发明专利技术公开了一种二进制报文的声明式报文解码方法,通过报文编码协议定义解析规则,然后调用解码方法即可完成对二进制报文的解析,且解析结果采用结构化方式保存,有利于解码数据的使用。解码规则描述数据结构让使用者声明式定义解码规则,当报文协议发生变化时,只需更改解码规则描述内容即可,使程序易于维护;不同协议报文可复用同一套解码方法库,使用者不必编写报文解析代码,可极大提高实现效率;与此同时,由于使用者不必编写报文解析代码,就不会产生因报文解析导致的BUG。就不会产生因报文解析导致的BUG。就不会产生因报文解析导致的BUG。

【技术实现步骤摘要】
一种二进制报文的声明式报文解码方法


[0001]本专利技术涉及通讯
,尤其涉及一种二进制报文的声明式报文解码方法。

技术介绍

[0002]在嵌入式应用领域,嵌入式产品内部各模块、模组间因协同任务需要而进行通讯的情况是非常普遍的,嵌入式产品内部模组间通讯会采用诸如:UART、I2C、SPI等通讯技术,这些通讯技术普遍存在通讯效率较低的问题,因此,在通讯时一般会尽量收缩通讯载荷。基于此,嵌入式软件在处理通讯逻辑时,一般都会将载荷要传递的信息项以按位、有序、LSB(或FSB)的模式编码成二进制报文后进行传输,且在部分信息项值较大或较小时(超过可用数位可表示范围)的情况下,需在编码前对数值进行简单的加、减、剩、除运算,将数值调整到数位可表范围内再编码成二进制数。当对端接模块收到二进制报文后,通常采用的方法为使用编程语言参照报文协议文档逐项获取二进制数位值,然后使用位移、四则运算等方式完成载荷数据的解析。
[0003]上述处理方式和流程可以很好完成协议解析任务,但缺点在于针对每一个协议都需要使用编程语言按协议规定以硬编码的方式来解码,有多少个协议就要硬编码多少次,协议有所变动时需要定位并修改源代码才能匹配上协议,而实现解码功能的编程过程中进行大量、重复的位操作和四则运算都容易使程序产生BUG。总而方之,传统的解码方法和过程效率不高,且极易产生BUG,其主要原因在于没有抽象出一种可以描述数据项解码规则的数据结构,并利用这样的数据结构去复用位运算和四则运算等动作。

技术实现思路

[0004]本专利技术提供一种二进制报文的声明式报文解码方法,针对传统二进制报文解析方法因没有抽象和定义报文解码规则进行自动解码,导致报文解码实现效率不高、易产生BUG、不易维护等问题,定义了一种描述二进制报文解码描述方法,并以该方法为基础,利用动态编程语言可动态定义类成员变量的语言特性,实现了一个自动解码的算法库,以彻底解决二进制报文解码实现效率不高、易产生BUG、不易维护等问题。本专利技术仅需根据报文编码协议定义解析规则,然后调用解码方法即可完成对二进制报文的解析,且解析结果采用结构化方式保存,有利于解码数据的使用。
[0005]本专利技术通过以下技术方案来实现上述目的:
[0006]一种二进制报文的声明式报文解码方法,包括以下步骤:
[0007]步骤1,定义解码规则,解码规则包括如下元素:
[0008]元素一:报文信息项占用的最大索引值,整数类型,名为:maxDataIndex;
[0009]元素二:解码规则集,字典类型,key为信息项名称,值为该信息项的“信息项解码规则”,该元素命名为:rule;
[0010]步骤2,合并和分类所有解码规则;
[0011]步骤3,接收报文数据;
[0012]步骤4,根据报文头选择对应的解码规则;
[0013]根据报文编码规则,从报文数据中取出当前报文的“指令类型”信息,然后从步骤2所产生的规则集中选择出当前报文“指令类型”对应的解码规则;
[0014]步骤5,执行解码过程。
[0015]进一步方案为,所述步骤1中,信息项解码规则包含如下元素:
[0016]若信息项数据类型为字符串,则包括:“起始字节索引值”和“所占字节数”两个元素;
[0017]若信息项数据类型为数值,则至少包括:“起始字节索引值”、“起始位索引值”和“所占比特位数”三个元素;
[0018]若信息项数据类型为数值,还可包含运算规则,运算规则包含一系列的操作符代号和对应的操作值。
[0019]进一步方案为,所述步骤2中,将所有协议组合在一个数据结构之中,并建立协议的索引规则,以便于在接收到通讯报文时可以选择到适合报文解析规则。
[0020]进一步方案为,所述步骤5中,具体步骤如下:
[0021]解码步骤1:验证报文长度是否满足要求;
[0022]解码步骤2:可选地,对报文内容进行CRC验证;
[0023]解码步骤3:判断信息项数据类型;
[0024]解码步骤3

1:字符串型信息项解码方法;
[0025]解码步骤3

1.1:获取当前信息项解码规则;
[0026]解码步骤3

1.2:按规则读取和保存报文数据为字符串;
[0027]解码步骤3

2:数值型信息项解码方法;
[0028]解码步骤3

2.1:获取当前信息项解码规则;
[0029]解码步骤3

2.2:判断信息项是否跨字节;
[0030]解码步骤3

2.2.1:不跨字节解码方法;
[0031]解码步骤3

2.2.1.1:按规则读取报文比特位并暂存;
[0032]解码步骤3

2.2.2:跨字节解码方法;
[0033]解码步骤3

2.2.2.1:读取首部比特位并暂存;
[0034]解码步骤3

2.2.2.2:可选地,读取中部比特位并暂存;
[0035]解码步骤3

2.2.2.3:可选地,读取尾部比特位并暂存;
[0036]解码步骤3

2.3:将比特位转换成数值Data;
[0037]解码步骤3

2.4:可选地,按运算规则调整数值Data;
[0038]解码步骤3

2.5:保存结果;
[0039]解码步骤4:判断是否所有信息项已全部解析完毕。
[0040]进一步方案为,所述步骤5中,验证报文长度是否满足要求;
[0041]为确保解码流程的正常执行,需事先验证待处理报文的长度是否满足要求,若不满足要求,则直接退出解码过程;
[0042]判断待处理报文的长度是否满足要求的方法为:待处理报文的长度>=报文信息项占用的最大索引值(即:maxDataIndex)。
[0043]进一步方案为,所述步骤5中,对报文内容进行CRC验证;
[0044]若通讯双方要求进行CRC验证,则在解码方法流程中加入CRC验证处理过程,若CRC验证失败,则退出解码过程。
[0045]进一步方案为,所述步骤5中,判断信息项数据类型;
[0046]根据解码字符串和解码数值的处理方法,对这两种不同类型的信息项采用不同的解码方法,在执行具体解码逻辑前,先判断当前要解码的信息项的数据类型。
[0047]进一步方案为,所述步骤5中,判断是否所有信息项已全部解析完毕;
[0048]当遍历完“解码规则集”中所有的“信息项解码规则”,则解析完毕,否则返回“解码步骤三:判断信息项数据类型”步骤继续执行剩余信息项的解码。
[0049]本专利技术的有益效果在于:
[0050]解码规则描述数据结构让使用者声明式定义本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种二进制报文的声明式报文解码方法,其特征在于,包括以下步骤:步骤1,定义解码规则,解码规则包括如下元素:元素一:报文信息项占用的最大索引值,整数类型;元素二:解码规则集,字典类型,key为信息项名称,值为该信息项的“信息项解码规则”,该元素命名为:rule;步骤2,合并和分类所有解码规则;步骤3,接收报文数据;步骤4,根据报文头选择对应的解码规则;根据报文编码规则,从报文数据中取出当前报文的“指令类型”信息,然后从步骤2所产生的规则集中选择出当前报文“指令类型”对应的解码规则;步骤5,执行解码过程。2.如权利要求1所述的一种二进制报文的声明式报文解码方法,其特征在于,所述步骤1中,信息项解码规则包含如下元素:若信息项数据类型为字符串,则包括:“起始字节索引值”和“所占字节数”两个元素;若信息项数据类型为数值,则至少包括:“起始字节索引值”、“起始位索引值”和“所占比特位数”三个元素;若信息项数据类型为数值,还可包含运算规则,运算规则包含一系列的操作符代号和对应的操作值。3.如权利要求1所述的一种二进制报文的声明式报文解码方法,其特征在于,所述步骤2中,将所有协议组合在一个数据结构之中,并建立协议的索引规则,以便于在接收到通讯报文时可以选择到适合报文解析规则。4.如权利要求1所述的一种二进制报文的声明式报文解码方法,其特征在于,所述步骤5中,具体步骤如下:解码步骤1:验证报文长度是否满足要求;解码步骤2:对报文内容进行CRC验证;解码步骤3:判断信息项数据类型;解码步骤3

1:字符串型信息项解码方法;解码步骤3

1.1:获取当前信息项解码规则;解码步骤3

1.2:按规则读取和保存报文数据为字符串;解码步骤3

2:数值型信息项解码方法;解码步骤3

2.1:获取当前信息项解码规则;解码步骤3

2.2:判断信息项是否跨字节;解码步骤3
...

【专利技术属性】
技术研发人员:李书红
申请(专利权)人:四川启睿克科技有限公司
类型:发明
国别省市:

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

1