一种通信协议编码方法及系统技术方案

技术编号:37382604 阅读:7 留言:0更新日期:2023-04-27 07:23
本发明专利技术提供了一种通信协议编码方法及系统,根据协议ID获取协议指令的通用描述文件对应的协议项定义;初始化报文存储的字节数组变量;获取要编码对象实例、协议数据项集合和报文,执行协议块编码;遍历协议数据项,对每一个协议数据项,判断是否是字节项、重复项、子协议项和加密项,进行对应的编码处理;将编码后的字节数组插入报文中;计算并填充协议数据区长度到报文中;计算校验函数,将结果值填充到报文中,形成最终的报文数据。实现根据通信协议通用描述配置文件进行通用编码,实现基于原始数据或对象实例生成协议报文。数据或对象实例生成协议报文。数据或对象实例生成协议报文。

【技术实现步骤摘要】
一种通信协议编码方法及系统


[0001]本专利技术属于编码
,具体涉及一种通信协议编码方法及系统。

技术介绍

[0002]本部分的陈述仅仅是提供了与本专利技术相关的
技术介绍
信息,不必然构成在先技术。
[0003]在物联网和互联网通信中,设备通信中大量使用了通信协议,有标准协议和私有协议,尤其是没有相关标准的情况下,各设备厂家大量使用了企业内部指定的私有协议。无论是标准协议还是私有协议,针对运行在这些设备上的协议编码都需要大量的开发维护工作。
[0004]通信协议编码方法通常采用“硬编码”方式编写代码方式实现。针对每一种通信协议,都需要专门开发一套代码对通信协议数据进行编码,代码编写工作量大、花费时间长;由于缺陷修复或需求变化,即便协议帧结构一样,但是协议指令报文包含数据不一样,也要重复编写代码进行编码,导致代码冗余,维护困难,代码很难复用。
[0005]虽然存在部分协议编码提出了一些方法,但这些方法对于私有协议中常见的TLV(或TTLV)编码协议都不支持或支持不够简单友好,编码中对于多字节数值类型字段使用的大端序或小端序的灵活配置都缺少支持,编码中对协议描述方面考虑不够全面,无法满足通用性;一般协议解析解码仅适用于固定长度报文或变长协议的部分情况,不具有扩展性,即当出现已有代码不能解析或不能编码的协议时候,只能在现有代码上进行特殊定制修改,修改后就不能用于其他通信协议,不可复用。

技术实现思路

[0006]本专利技术为了解决上述问题,提出了一种通信协议编码方法及系统,实现根据通信协议通用描述配置文件进行通用编码,实现基于原始数据或对象实例生成协议报文。
[0007]根据一些实施例,本专利技术采用如下技术方案:
[0008]一种通信协议编码方法,包括以下步骤:
[0009]根据协议ID获取协议指令的通用描述文件对应的协议项定义;
[0010]初始化报文存储的字节数组变量;
[0011]获取要编码对象实例、协议数据项集合和报文,执行协议块编码;
[0012]遍历协议数据项,对每一个协议数据项,判断是否是字节项、重复项、子协议项和加密项,进行对应的编码处理;
[0013]将编码后的字节数组插入报文中;
[0014]计算并填充协议数据区长度到报文中;
[0015]计算校验函数,将结果值填充到报文中,形成最终的报文数据。
[0016]作为可选择的实施方式,要编码对象实例可替换为json对象或json字符串。
[0017]作为可选择的实施方式,如果协议数据项是不包含比特项的字节项,则按字节项
定义中读取字节,按照定义的数值类型进行转换结果,获得对应的字节数组;如果定义的是多字节的数值型并且字节序是小端序,则对字节进行倒序处理;
[0018]如果字节项包含比特项,先编码比特项,按照比特项定义,获取运算后的数值,转换为字节数组,再按照不包含比特项的字节项定义,进行字节项编码处理即可获得转换结果。
[0019]作为可选择的实施方式,如果协议数据项是重复项数据,且是TLV类重复项,根据定义读取Tag并获得属性对象中的Tag的值Value,然后调用字节项编码获得Value的字节数组,即可得Value的字节长度Length,得到Tag、Length、Value的编码结果。
[0020]作为可选择的实施方式,如果协议数据项是重复项数据,且非TLV类重复项,根据其协议定义数据项集合和值,调用协议块编码,得到编码后字节数组。
[0021]作为可选择的实施方式,如果是子协议项数据,根据定义获取子协议描述文件对应的协议ID,加载子协议的协议项集合,然后对其进行协议块编码。
[0022]作为可选择的实施方式,如果是加密项,根据加密数据项内部的协议数据项集合调用协议块编码,获得报文原始数组,按照加密函数进行运算,获得加密后的报文数组。
[0023]作为可选择的实施方式,如果协议数据项目内部有还有嵌套的协议数据项,按照从上层到下层的顺序递归调用协议块编码方法实现编码。
[0024]作为可选择的实施方式,协议编码过程中如果有valueExp表达式、自定义编码方法或自定义加密方法,优先使用自定义方法或对表达式进行运算,否则使用协议内部常规的编码方法或内置的加密方法进行编码加密。
[0025]一种通信协议编码系统,包括:
[0026]文件读取模块,根据协议ID读取协议指令的通用描述文件,对文件格式和元素进行验证,验证通过后解析文件中对应的协议项定义元素;
[0027]元素转换模块,将文件读取模块获得的协议定义项元素转换为面向对象语言中的类对象实例,并获得协议数据项集合定义;
[0028]协议编码模块,被配置为获取要编码对象实例或json对象或json字符串、协议数据项集合,遍历协议数据项,对每一个协议数据项,判断是否是字节项、重复项、子协议项和加密项,将要编码对象进行对应的编码处理,执行协议编码,计算报文长度和校验数值,并填充到报文,得到最终的通信报文数据。
[0029]与现有技术相比,本专利技术的有益效果为:
[0030]本专利技术提供了基于通信协议通用描述方法的协议编码方法,可以实现通信协议的大多数情况下通用、动态编码,满足了通用性,又具有扩展性。协议编码方法实现了绝大多数通信解码需求的覆盖,无需再次编码即可实现新协议的动态编码,即便出现了极为少见的特殊定制协议,也可以通过编写继承了基类的自定义类实现自定义编码、生成校验数、加密等,所以具有扩展性。因此方法通过通用性、扩展性实现了协议的快速编码,具有更高的开发效率,降低了开发成本。
[0031]为使本专利技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
[0032]构成本专利技术的一部分的说明书附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。
[0033]图1是通信协议通用描述构成;
[0034]图2是协议编码流程图;
[0035]图3a、3b是编码示例。
具体实施方式
[0036]下面结合附图与实施例对本专利技术作进一步说明。
[0037]应该指出,以下详细说明都是例示性的,旨在对本专利技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本专利技术所属
的普通技术人员通常理解的相同含义。
[0038]需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本专利技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0039]如图1所示,一套通信协议可以由多条指令组成。同一套协议使用相同或类似的协议帧结构,不同的协议指令的数据部分结构不同;通本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种通信协议编码方法,其特征是,包括以下步骤:根据协议ID获取协议指令的通用描述文件对应的协议项定义;初始化报文存储的字节数组变量;获取要编码对象实例、协议数据项集合和报文,执行协议块编码;遍历协议数据项,对每一个协议数据项,判断是否是字节项、重复项、子协议项和加密项,进行对应的编码处理;将编码后的字节数组插入报文中;计算并填充协议数据区长度到报文中;计算校验函数,将结果值填充到报文中,形成最终的报文数据。2.如权利要求1所述的一种通信协议编码方法,其特征是,要编码对象实例可替换为json对象或json字符串。3.如权利要求1所述的一种通信协议编码方法,其特征是,如果协议数据项是不包含比特项的字节项,则按字节项定义中读取字节,按照定义的数值类型进行转换结果,获得对应的字节数组;如果定义的是多字节的数值型并且字节序是小端序,则对字节进行倒序处理;如果字节项包含比特项,先编码比特项,按照比特项定义,获取运算后的数值,转换为字节数组,再按照不包含比特项的字节项定义,进行字节项编码处理即可获得转换结果。4.如权利要求1所述的一种通信协议编码方法,其特征是,如果协议数据项是重复项数据,且是TLV类重复项,根据定义读取Tag并获得属性对象中的Tag的值Value,然后调用字节项编码获得Value的字节数组,即可得Value的字节长度Length,得到Tag、Length、Value的编码结果。5.如权利要求1所述的一种通信协议编码方法,其特征是,如果协议数据项是重复项数据,且非TLV类重复项,根据其协议定义数据项集合和值,...

【专利技术属性】
技术研发人员:张勇高扬于克磊毛新东郝敬全刘晓莉刘大扬马述杰
申请(专利权)人:山东泰华照明科技有限公司
类型:发明
国别省市:

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

1