报文解析、组包方法和装置及报文处理系统与流程

文档序号:14864164发布日期:2018-07-04 09:55阅读:351来源:国知局
报文解析、组包方法和装置及报文处理系统与流程

本申请涉及通信技术领域,尤其涉及一种报文解析、组包方法和装置及报文处理系统。



背景技术:

设备间通过通信的方式传输带协议的报文数据时,每种协议报文数据带有相应的数据信息,如限速、轨道长度、列车位置、状态等。由于设备间通信连接关系复杂,设备通常需要支持大量的通信协议数据的解析和报文组包。

面对如此众多的报文类型,相关技术中是针对每一种报文类型,写一个相应的解析函数,对每一个报文进行解析,同时写一个报文组包函数,按照报文协议的格式,将数据组成报文。

相关技术针对每种报文类型需要有一个独立的解析函数和组包函数,编码工作量大。当新增一种协议类型时,需要编写相应的解析函数和组包函数,新编写的函数需要重新进行测试,新写代码比较容易产生软件的缺陷。



技术实现要素:

本申请旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本申请的一个目的在于提出一种报文解析方法,该方法可以减少编码难度、易于维护和测试,以及保证双向转换的配置接口统一。

本申请的另一个目的在于提出一种报文组包方法。

本申请的另一个目的在于提出一种报文解析装置。

本申请的另一个目的在于提出一种报文组包装置。

本申请的另一个目的在于提出一种报文处理系统。

为达到上述目的,本申请第一方面实施例提出的报文解析方法,包括:接收报文;获取与所述报文对应的解析参数,所述解析参数包括数据配置表,其中,所述数据配置表与对所述报文进行组包时采用的数据配置表相同;根据所述解析参数解析所述报文。

本申请第一方面实施例提出的报文解析方法,依据数据配置表进行报文解析,且报文解析时采用与报文组包时相同的数据配置表,则不需要对应每种协议类型分别编写解析函数和组包函数,因此可以减少编码工作量,以及依据数据配置表进行解析,可以不需要对具体解析过程进行了解,只需要熟悉协议,可以降低编码难度;由于解析和组包采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

为达到上述目的,本申请第二方面实施例提出的报文组包方法,包括:获取组包参数,所述组包参数包括数据配置表,其中,所述数据配置表与对报文进行解析时采用的数据配置表相同;根据所述组包参数,组包得到报文。

本申请第二方面实施例提出的报文组包方法,依据数据配置表进行报文组包,且报文组包时采用与报文解析时相同的数据配置表,则不需要对应每种协议类型分别编写组包函数和解析函数,因此可以减少编码工作量,以及依据数据配置表进行组包,可以不需要对具体组包过程进行了解,只需要熟悉协议,可以降低编码难度;由于组包和解析采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

为达到上述目的,本申请第三方面实施例提出的报文解析装置,包括:接收模块,用于接收报文;获取模块,用于获取与所述报文对应的解析参数,所述解析参数包括数据配置表,其中,所述数据配置表与对所述报文进行组包时采用的数据配置表相同;解析模块,用于根据所述解析参数解析所述报文。

本申请第三方面实施例提出的报文解析装置,依据数据配置表进行报文解析,且报文解析时采用与报文组包时相同的数据配置表,则不需要对应每种协议类型分别编写解析函数和组包函数,因此可以减少编码工作量,以及依据数据配置表进行解析,可以不需要对具体解析过程进行了解,只需要熟悉协议,可以降低编码难度;由于解析和组包采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

为达到上述目的,本申请第四方面实施例提出的报文组包装置,包括:获取模块,用于获取组包参数,所述组包参数包括数据配置表,其中,所述数据配置表与对报文进行解析时采用的数据配置表相同;组包模块,用于根据所述组包参数,组包得到报文。

本申请第四方面实施例提出的报文组包装置,依据数据配置表进行报文组包,且报文组包时采用与报文解析时相同的数据配置表,则不需要对应每种协议类型分别编写组包函数和解析函数,因此可以减少编码工作量,以及依据数据配置表进行组包,可以不需要对具体组包过程进行了解,只需要熟悉协议,可以降低编码难度;由于组包和解析采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

本申请实施例还提出了一种报文处理系统,包括:如本申请第四方面实施例任一项所示的报文组包装置;以及,如本申请第三方面实施例任一项所示的报文解析装置。

本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1是本申请一个实施例提出的报文解析方法的流程示意图;

图2是本申请实施例中依据解析参数进行报文解析的方法流程示意图;

图3是本申请一个实施例提出的报文组包方法的流程示意图;

图4是本申请实施例中依据组包参数进行报文组包的方法流程示意图;

图5是本申请一个实施例提出的报文解析装置的结构示意图;

图6是本申请一个实施例提出的报文组包装置的结构示意图;

图7是本申请一个实施例提出的报文处理系统的结构示意图。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的模块或具有相同或类似功能的模块。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。相反,本申请的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。

图1是本申请一个实施例提出的报文解析方法的流程示意图。

如图1所示,本实施例的方法包括:

s11:接收报文。

s12:获取与所述报文对应的解析参数,所述解析参数包括数据配置表,其中,所述数据配置表与对所述报文进行组包时采用的数据配置表相同。

例如,报文中包含协议号,预先配置协议号与解析参数之间的对应关系,因此,在接收到报文后,可以从报文中读取协议号,再根据预先配置的协议号与解析参数之间的对应关系,可以获取到解析参数。

s13:根据所述解析参数解析所述报文。

上述的解析参数还可以包括:报文数据起始地址和数据结构体存储起始地址。上述的两个地址以及数据配置表均可以是预先配置的,因此根据协议号以及预先配置的对应关系,可以获取到上述两个地址以及数据配置表。假设报文数据起始地址用addr_data表示,数据结构体存储起始地址用addr_struct表示,数据配置表用tbl_protocol表示。

数据配置表中包括至少一个数据项,每个数据项为一个变量的配置参数,每个变量的配置参数例如包括:宽度(width)、字节序(msb或lsb)、偏移地址(offset)和数据类型(dtype)。

每种协议对应一种数据配置表。假设一种数据协议格式如表1所示。

表1

每种协议中包括变量可以通过数据结构体定义,假设定义的数据结构体如下:

如上所示,数据结构体中包括每个变量的数据类型,如uint8_t或uint16_t,以及每个变量的名称,如type、length等。

假设定义uint8_t的类型编码为1,定义uint16_t的类型编码为2,以及定义名称为“速度”的变量的字节序为msb,其余为lsb,则相应的数据配置表如下:

{

//宽度,字节序,偏移地址,数据类型

{8,msb,0,1},//第一个变量的配置参数

{8,msb,1,1},//第二个变量的配置参数

{16,lsb,2,2},//第三个变量的配置参数

{3,msb,4,1},//第四个变量的配置参数

{5,msb,5,1},//第五个变量的配置参数

}

其中,数据配置表中包括相应协议的报文中包含的每个变量的配置参数,每个变量的配置参数包括:宽度、字节序、偏移地址和数据类型。

在获取到解析参数后,可以依据解析参数进行报文解析。

如图2所示,依据解析参数进行报文解析的流程可以包括:

s21:获取解析参数,解析参数包括:报文数据起始地址(addr_data),数据结构体存储起始地址(addr_struct)和数据配置表(tbl_protocol)。

s22:初始化,具体包括:对解析地址进行初始化、对当前变量的序号进行初始化,以及,获取数据配置表中包括的变量总数。

其中,解析地址用cur表示,初始化时,设置cur=0。

当前变量用i表示,初始化时,设置i=0。

数据配置表中包括的变量总数用n表示。

s23:判断i是否小于n,若是,执行s24及其后续步骤,否则执行s28。

s24:从数据配置表中获取当前变量的配置参数,所述配置参数包括:宽度(width)、字节序(msb或lsb)、偏移地址(offset)和数据类型(dtype)。

其中,msb是指大端序,即低地址存放数据的高字节,lsb是指小端序,即低地址存放数据的低字节。

s25:确定解析地址,并根据所述报文数据起始地址和所述解析地址确定源地址,并从源地址按照所述宽度读取数据。

例如,将addr_data+cur的值作为源地址,之后从addr_data+cur的位置开始读取width长度的数据,假设读取的数据用value表示。

s26:根据所述数据结构体存储起始地址和所述偏移地址确定目标地址,并将所述数据按照所述字节序和所述数据类型,存储到所述目标地址。

例如,将addr_struct+offset的值作为目标地址,之后在addr_struct+offset的位置存储value,在存储过程中,按照当前变量所对应的字节序和数据类型进行存储,比如从数据配置表中获取的字节序是msb,数据类型是1,由于msb指示大端序,1指示uint8_t,则将数据存储为8位整型,且低地址存放数据高字节。

s27:将解析地址增加所述宽度的值,以及,将当前变量的序号增加1。

即执行:cur+width,以及i++操作。

之后可以重复执行s23及其后续步骤。

s28:结束。

本实施例中,依据数据配置表进行报文解析,且报文解析时采用与报文组包时相同的数据配置表,则不需要对应每种协议类型分别编写解析函数和组包函数,因此可以减少编码工作量,以及依据数据配置表进行解析,可以不需要对具体解析过程进行了解,只需要熟悉协议,可以降低编码难度;由于解析和组包采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

图3是本申请一个实施例提出的报文组包方法的流程示意图。

如图3所示,本实施例的方法包括:

s31:获取组包参数,所述组包参数包括数据配置表,其中,所述数据配置表与对报文进行解析时采用的数据配置表相同。

例如,预先配置协议号与组包参数之间的对应关系,由于当前要组包的报文的协议是已知的,因此根据该已知的协议和上述的对应关系可以获取到相应的组包参数。

s32:根据所述组包参数,组包得到报文。

上述的组包参数还可以包括:报文数据起始地址和数据结构体存储起始地址。上述的两个地址以及数据配置表均可以是预先配置的,因此根据协议号以及预先配置的对应关系,可以获取到上述两个地址以及数据配置表。假设报文数据起始地址用addr_data表示,数据结构体存储起始地址用addr_struct表示,数据配置表用tbl_protocol表示。

数据配置表中包括至少一个数据项,每个数据项为一个变量的配置参数,每个变量的配置参数例如包括:宽度(width)、字节序(msb或lsb)、偏移地址(offset)和数据类型(dtype)。

具体的数据配置表的说明可以参见上述实施例,在此不再详述。

在获取到组包参数后,可以依据组包参数进行报文组包。

如图4所示,依据组包参数进行报文组包的流程可以包括:

s41:获取组包参数,组包参数包括:报文数据起始地址(addr_data),数据结构体存储起始地址(addr_struct)和数据配置表(tbl_protocol)。

s42:初始化,具体包括:对组包地址进行初始化、对当前变量的序号进行初始化,以及,获取数据配置表中包括的变量总数。

其中,组包地址用cur表示,初始化时,设置cur=0。

当前变量用i表示,初始化时,设置i=0。

数据配置表中包括的变量总数用n表示。

s43:判断i是否小于n,若是,执行s44及其后续步骤,否则执行s48。

s44:从数据配置表中获取当前变量的配置参数,所述配置参数包括:宽度(width)、字节序(msb或lsb)、偏移地址(offset)和数据类型(dtype)。

其中,msb是指大端序,即低地址存放数据的高字节,lsb是指小端序,即低地址存放数据的低字节。

s45:根据所述数据结构体存储起始地址和所述偏移地址确定源地址,并从源地址按照所述字节序和所述数据类型,读取数据。

例如,将addr_struct+offset的值作为源地址,之后从addr_struct+offset的位置按照字节序msb或lsb和数据类型dtype读取数据,假设读取的数据用value表示。

s46:确定解析地址,并根据所述报文数据起始地址和所述解析地址确定目标地址,并按照所述宽度将所述数据赋值到所述目标地址。

例如,将addr_data+cur的值作为目标地址,之后从addr_data+cur的位置开始选取长度为width的区域,并将该区域赋值为value。

s47:将解析地址增加所述宽度的值,以及,将当前变量的序号增加1。

即执行:cur+width,以及i++操作。

之后可以重复执行s43及其后续步骤。

s48:结束。

本实施例中,依据数据配置表进行报文组包,且报文组包时采用与报文解析时相同的数据配置表,则不需要对应每种协议类型分别编写组包函数和解析函数,因此可以减少编码工作量,以及依据数据配置表进行组包,可以不需要对具体组包过程进行了解,只需要熟悉协议,可以降低编码难度;由于组包和解析采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

图5是本申请一个实施例提出的报文解析装置的结构示意图。

如图5所示,本实施例的装置50包括:接收模块51、获取模块52和解析模块53。

接收模块51,用于接收报文;

获取模块52,用于获取与所述报文对应的解析参数,所述解析参数包括数据配置表,其中,所述数据配置表与对所述报文进行组包时采用的数据配置表相同;

解析模块53,用于根据所述解析参数解析所述报文。

一些实施例中,所述解析参数还包括:报文数据起始地址和数据结构体存储起始地址;

所述数据配置表中包括所述报文中包含的变量的配置参数。

一些实施例中,所述解析模块53具体用于:

将所述数据配置表中包括的每个变量分别作为当前变量,对应当前变量执行如下流程:

从所述数据配置表中获取当前变量的配置参数,所述配置参数包括:宽度、偏移地址、字节序和数据类型;

确定解析地址,根据所述报文数据起始地址和所述解析地址确定源地址,并从源地址按照所述宽度读取数据;

根据所述数据结构体存储起始地址和所述偏移地址确定目标地址,并将所述数据按照所述字节序和所述数据类型,存储到所述目标地址;

将解析地址增加所述宽度的值。

可以理解的是,本实施例的装置与上述方法实施例对应,具体内容可以参见方法实施例的相关描述,在此不再详细说明。

本实施例中,依据数据配置表进行报文解析,且报文解析时采用与报文组包时相同的数据配置表,则不需要对应每种协议类型分别编写解析函数和组包函数,因此可以减少编码工作量,以及依据数据配置表进行解析,可以不需要对具体解析过程进行了解,只需要熟悉协议,可以降低编码难度;由于解析和组包采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

图6是本申请一个实施例提出的报文组包装置的结构示意图。

如图6所示,本实施例的装置60包括:获取模块61和组包模块62。

获取模块61,用于获取组包参数,所述组包参数包括数据配置表,其中,所述数据配置表与对报文进行解析时采用的数据配置表相同;

组包模块62,用于根据所述组包参数,组包得到报文。

一些实施例中,所述解析参数还包括:报文数据起始地址和数据结构体存储起始地址;

所述数据配置表中包括所述报文中包含的变量的配置参数。

一些实施例中,所述组包模块62具体用于:

将所述数据配置表中包括的每个变量分别作为当前变量,对应当前变量执行如下流程:

从所述数据配置表中获取当前变量的配置参数,所述配置参数包括:宽度、偏移地址、字节序和数据类型;

根据所述数据结构体存储起始地址和所述偏移地址确定源地址,并从源地址按照所述字节序和所述数据类型,读取数据;

确定解析地址,并根据所述报文数据起始地址和所述解析地址确定目标地址,并按照所述宽度将所述数据赋值到所述目标地址;

将解析地址增加所述宽度的值。

可以理解的是,本实施例的装置与上述方法实施例对应,具体内容可以参见方法实施例的相关描述,在此不再详细说明。

本实施例中,依据数据配置表进行报文组包,且报文组包时采用与报文解析时相同的数据配置表,则不需要对应每种协议类型分别编写组包函数和解析函数,因此可以减少编码工作量,以及依据数据配置表进行组包,可以不需要对具体组包过程进行了解,只需要熟悉协议,可以降低编码难度;由于组包和解析采用了相同的数据配置表,可以对应每种协议仅需要维护和测试一组编码,易于维护和测试,并且可以保证报文和数据结构体之间双向转换的配置接口统一。

图7是本申请一个实施例提出的报文处理系统的结构示意图。

如图7所示,本实施例的系统70包括:报文组包装置71和报文解析装置72。

其中,报文组包装置71可以如图6所示,报文解析装置可以如图5所示,在此不再详述。

可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。

需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是指至少两个。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1