CN106598581B - 基于xml的asterix报文解析代码生成方法 - Google Patents

基于xml的asterix报文解析代码生成方法 Download PDF

Info

Publication number
CN106598581B
CN106598581B CN201611113773.6A CN201611113773A CN106598581B CN 106598581 B CN106598581 B CN 106598581B CN 201611113773 A CN201611113773 A CN 201611113773A CN 106598581 B CN106598581 B CN 106598581B
Authority
CN
China
Prior art keywords
type
generating
dataitem
asterix
data item
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201611113773.6A
Other languages
English (en)
Other versions
CN106598581A (zh
Inventor
伍振华
闻军涛
江才纯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu nengtong Technology Co.,Ltd.
Original Assignee
CHENGDU LANGTOP TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CHENGDU LANGTOP TECHNOLOGY Co Ltd filed Critical CHENGDU LANGTOP TECHNOLOGY Co Ltd
Priority to CN201611113773.6A priority Critical patent/CN106598581B/zh
Publication of CN106598581A publication Critical patent/CN106598581A/zh
Application granted granted Critical
Publication of CN106598581B publication Critical patent/CN106598581B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了基于XML的ASTERIX报文解析代码生成方法,其特征在于,包括以下四个步骤:步骤一:根据ICD配置通信协议各种参数并保存为XML文件;步骤二:读取步骤一中所得XML配置文件并解析生成计算机程序识别的内存对象;步骤三:根据步骤二中所得内存对象生成对应的数据结构体文件;步骤四:根据步骤二中所得内存对象生成对应的解析代码文件;本发明适用于不同协议类型和协议版本,便于修改,使用XML配置文件生成可运行的报文解析程序,使用者只需按照ICD编写配置文件,通过本发明生成ASTERIX报文解析代码。该方案大大的提高了原有工作效率,该方案将该解析部分模块化,符合现代对问题处理方式的模块化趋势。

Description

基于XML的ASTERIX报文解析代码生成方法
技术领域
本发明涉及雷达数据解析,尤其涉及欧洲标准的航管雷达数据交换报文解析方法,具体的说是基于XML的ASTERIX报文解析代码生成方法。
背景技术
ASTERIX为通用结构化雷达数据交换,是欧洲航管组织为了使不同厂商提供的雷达监视设备或空管自动化系统之间进行数据交互而提出的标准化数据传输规范。随着越来越多的厂商提供对ASTERIX格式接口支持,它也逐渐成为雷达数据交换格式的国际标准。
ASTERIX标准化数据传输规范,包含了多种类型数据协议(如cat21、cat048等),同时随着需求的不断变化,每种类型协议又分为多个协议版本(如cat21包含0.26、0.25等多个协议版本)。传统模式下,在使用ASTERIX协议进行雷达数据交换或增加通信协议时,通信双方都需要为所使用的协议类型和版本进行相应的解析代码编写,包含了对不同协议类型和版本的程序设计,以及对各种不同类型数据项的逻辑处理编写;当修改协议类型或数据版本时,需要对原有的解析程序重新进行设计,同时ASTERIX随着发展,所携带的信息越来越多,所需解析的数据越来越大。而在处理不同类型协议的和版本的报文时,所编写的代码又有许多相似之处。导致在使用手工完成代码过程中存在开发繁琐、工作量大、重复性工作较多等问题。
发明内容
本发明的目的在于提供基于XML的ASTERIX报文解析代码生成方法,用于解决背景技术中所描述的现有技术的问题和缺陷。本发明实现将使用XML进行配置的协议类型版本直接生成该报文解析代码,当出现增加协议类型、修改协议类型或版本时,无需手动编写程序,直接使用相应XML配置文件生成即可,方便、快捷、准确。
本发明通过下述技术方案实现:
一种基于XML的ASTERIX报文解析代码生成方法,其特征在于,包括以下四个步骤:
步骤一:根据ICD配置通信协议各种参数并保存为XML文件;
步骤二:读取步骤一中所得XML配置文件并解析生成计算机程序识别的内存对象;
步骤三:根据步骤二中所得内存对象生成对应的数据结构体文件;
步骤四:根据步骤二中所得内存对象生成对应的解析代码文件,同时,将解析代码文件对应存放至步骤三中所述的数据结构体文件中,最后生成一个有序调用其他解析函数的主函数,以供外部程序通过主函数调用对应的报文解析代码文件。
优选地,所述步骤一具体为:根据ASTERIX为每一个类型协议和版本提供的ICD提取出所需信息,这些信息包含:协议名称、协议版本、协议类型、数据项等,其中数据项信息包含数据项类型(数据项长度固定、数据项长度可变、重复型数据项、混合型数据项四种类型)、数据项初始长度、数据项ID、数据项序号(FRN)以及数据项下所包含的所有字段等,其中字段信息又包含了字段所处字节组、字段id、起始比特位、终止比特位、字段数据类型(包含int、uint、ascii、targetident、hex)等;提取出这些信息时,将信息按照特定的格式组织,并保存至XML中。值得说明的是,所述特定的格式组织是指:按照不同协议项目信息、数据类型以及数据字段等不同信息按照保存XML文件需要的常规手段进行保存即可。
值得说明的是,若在进行上述步骤之前已经存在了该类型和版本协议的配置文件,则该步骤一可以省略。
进一步地,所述步骤二读取XML配置文件,通过对XML的解析,将XML配置文件中所保存的数据信息转换成类型为Asterix类对象存放在计算机内存中。其中DataItem对应数据项,SubItem对应DataItem子数据项,Field对应具体字段即具体数据值。在该类图中可以看到,DataItem、SubItem、Field对象都包含了id属性,该属性用于对象的唯一标识,id不能够重复,同时id规范应符合编程语言对变量的要求。其中Asterix包含一个或多个DataItem,DataItem中包含一个或多个Field或包含多个SubItem,SubItem中包含一个或多个Field。
更进一步地,所述步骤三中结构体文件生成过程具体如下:
3.1循环取出Asterix对象中的DataItem。Asterix对象中包含多个DataItem对象,每个对象都应生成相应的结构体,该步骤使用循环方式取出Asterix对象中的DataItem;
3.2生成以DataItem的id为结构体名称的结构体。该步骤生成结构体的声明,此时该结构体中还未包含任何成员变量;
3.3判断DataItem类型是否为混合型。DataItem为混合类型时,该类型下只包含了多个SubItem,其他类型包含多个Field,所以此处应对DataItem的类型进行判断处理;
3.4循环取出DataItem中的Field。当DataItem类型不为混合类型时,该DataItem包含了多个Field,每个Field对应了具体的数据。使用循环方式取出Field;
3.5根据Field的id和类型生成对应结构体的成员变量。该步骤生成该Field所在的DataItem生成的结构体的成员变量,成员变量的生成规则如上所述。当DataItem下所有的Field都生成了结构体的成员变量时,此时就完成了该DataItem向结构体的转化,继续下一个DataItem;
3.6循环取出DataItem对象中的SubItem。当DataItem类型为混合类型时,该DataItem包含了多个SubItem,每个SubItem都应生成相应的结构体,该步骤使用循环方式取出DataItem对象中的SubItem;
3.7生成以SubItem的id为结构体名称的结构体,并将该结构体生成DataItem结构体的成员变量;
3.8循环取出SubItem的Field。该步骤与第3.4步类似,使用循环方式取出Field;
3.9根据Field的id和类型生成对应结构体的成员变量。该步骤与第3.5步类似;
3.10生成主结构体。经过以上步骤完成了Asterix下所有的DataItem结构体的生成,现在根据所有生成的结构体名生成结构体。按上文提供的规则生成。
3.11输出至结构体文件。
优选地,所述步骤四具体包括以下步骤:
4.1循环取出Asterix对象中的DataItem。该步骤使用循环方式取出Asterix中的DataItem;
4.2根据DataItem对象的id生成解析函数。生成一个用于解析该DataItem对象的函数定义;
4.3判断DataItem类型。对取出的DataItem类型进行判断,根据相应的类型为函数生成用于解析此数据项的函数体;
4.4生成针对固定长度型解析函数体。该类型特征在于,数据项所占字节长度固定,如果报文中包含该数据项,则该数据项下所有的Field均含值。循环取出该类型下的Field,而每一个Field对应与此时函数参数中retData结构体中的一个成员变量,根据Field提供的信息为对应的成员变量生成一段求值并赋给该成员变量的代码,直至循环结束,最后生成返回DataItem所占字节长度的代码,因为DataItem数据项长度固定,则返回值即为此长度值;
4.5生成针对可变长度型解析函数体。该类型特征在于,数据项所占字节长度不固定,根据报文中数据而决定,每个字节最后一个比特位标识后一个字节是否还属于该数据项,为1属于,0结束。根据这一特征,首先生成求数据项长度的代码,求数据项长度代码说明:使用循环由小到大取出字节,使用&运算符,将字节和0x01做与运算,结果为1则数据项长度加一,否则结束循环,这样就得到了该数据项所占字节总长度。接下来循环取出该类型下的Field,而每一个Field对应与此时函数参数中retData结构体中的一个成员变量,根据Field提供的信息为对应的成员变量生成一段求值并赋给该成员变量的代码,因为数据项所占长度是可变的,所有在该数据项下不是所有的Field都有值,所以在这段代码前应加上准入条件代码,只有当求出的数据项总长度大于当前Field所处字节组时,才执行成员变量赋值求值代码。最后生成返回DataItem所占字节长度的代码,返回值应为求出的数据总长度;
4.6生成针对重复型解析函数体。该类型特征在于,数据项所占字节长度由一个字节数据重复标识跟着至少一组表示数据的字节组成(以下称为字节组),由数据重复标识决定数据的字节具体有多少组,每一组数据长度由数据项初始长度决定。根据这一特征,首先生成获取重复次数的代码,重复次数由表示数据项的原始数据第一个字节决定,取出第一个字节得到重复次数。接下来生成解析每个Field的代码,如参考上文成员变量的生成规则,此时每个Field生成的成员变量类型为数组,循环取出该类型下的Field,根据Field提供的信息为对应的成员变量生成一段求值并添加至成员变量数组中的代码,直至循环结束,最后生成返回DataItem所占字节长度的代码,则返回值应为字节组长度乘以数据重复标识加1;
4.7循环取出DataItem对象中的SubItem。该步骤使用循环方式取出DataItem对象中的SubItem;
4.8根据SubItem对象的id生成解析函数。生成一个用于解析该SubItem对象的函数定义;
4.9判断SubItem类型。对取出的SubItem类型进行判断,根据相应的类型为函数生成解析此子数据项的函数体;
4.10生成针对固定长度型解析函数体。与步骤4.4处理方式一致;
4.11生成针对可变长度型解析函数体。与步骤4.5处理方式一致;
4.12生成针对重复型解析函数体。与步骤4.6处理方式一致;
4.13生成针对混合类型解析函数体。当DataItem对象类型为混合型时,该类型特征在于,数据项所占长度由数据项标识字节和数据项下的SubItem长度决定,每一个SubItem包含一个FRN,由FRN决定SubItem排列的先后顺序;数据项标识字节为可变数据,每个字节最后一位标识后一个字节是否还为数据项标识字节,1为继续,0为结束,数据项标识每个字节每一位标识SubItem在报文中是否被包含,如数据项标识为0x9DB0,则使用二进制表示如下:
Figure BDA0001172261420000061
按照这样的方式FRN与原始数据二进制进行对照,就能判断报文中是否包含某FRN的SubItem。根据以上的特征,首先生成求数据项标识的字节长度代码,数据项标识字节长度的获取算法与步骤4.5求数据项长度一致;通过之前的步骤已经生成了解析每一个SubItem的函数,接下来生成依FRN顺序,结合SubItem的FRN与数据项标识进行判断数据SubItem是否包含,调用SubItem对应的解析函数代码。最后生成返回数据项长度的代码,返回值应为每个包含的SubItem的长度之和加上数据项标识的字节长度。
4.14生成对外调用的解析函数。通过以上步骤生成了对每个DataItem的解析函数,但这些解析函数都是针对具体的DataItem进行解析,无法解析整个报文,本步骤生成一个对外提供解析报文的函数代码。首先生成一个函数定义,以前文提供的主函数定义参考为例,对如何生成函数体内容进行说明;接下来生成主函数的解析函数体代码,该步骤与步骤4.13类似,每一条ASTERIX报文包含了一个字节的协议类型、两个数据长度、数据项标识字节和数据域,数据项标识与步骤4.13提到的数据项标识含义和表示方式一致,生成求数据项标识字节长度代码,每个DataItem也包含一个FRN,与步骤4.13类似,生成根据FRN由小到大顺序,结合DataItem的FRN与数据项标识进行判断报文中是否包含DataItem数据,调用DataItem对应的解析函数代码;
4.15输出至报文解析代码文件。
本发明与现有技术相比,具有以下优点及有益效果:
(1)本发明通过将使用XML进行配置的协议类型版本直接生成该报文解析代码,当出现增加协议类型、修改协议类型或版本时,无需手动编写程序,直接使用相应XML配置文件生成;解决了现有的手动输入,编写程序的繁琐过程,避免了编写过程中人为出错的问题,使得报文解析代码生成过程更加方便、快捷、准确。
(2)本发明适用于不同协议类型和协议版本,便于修改,使用XML配置文件生成可运行的报文解析程序,使用者只需按照ICD编写配置文件,通过本发明生成ASTERIX报文解析代码。该方案大大的提高了原有工作效率,该方案将该解析部分模块化,符合现代对问题处理方式的模块化趋势。
附图说明
图1为基于XML生成ASTERIX报文解析程序方法流程图;
图2为Asterix(协议信息模型)、DataItem(数据项模型)、SubItem(子数据项模型)、Field(字段模型)类之间关系图;
图3为结构体文件生成流程图;
图4为解析代码文件生成流程图;
具体实施方式
下面结合本发明的优选实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例1:
结合附图1-4所示,基于XML的ASTERIX报文解析代码生成方法,其特征在于,包括以下四个步骤:
步骤一:根据ICD配置通信协议各种参数并保存为XML文件;
步骤二:读取步骤一中所得XML配置文件并解析生成计算机程序识别的内存对象;
步骤三:根据步骤二中所得内存对象生成对应的数据结构体文件;
步骤四:根据步骤二中所得内存对象生成对应的解析代码文件,同时,将解析代码文件对应存放至步骤三中所述的数据结构体文件中,最后生成一个有序调用其他解析函数的主函数,以供外部程序通过主函数调用对应的报文解析代码文件。
上述步骤一根据ASTERIX为每一个类型协议和版本提供的ICD提取出所需信息,这些信息包含:协议名称、协议版本、协议类型、数据项等,其中数据项信息包含数据项类型(数据项长度固定、数据项长度可变、重复型数据项、混合型数据项四种类型)、数据项初始长度、数据项ID、数据项序号(FRN)以及数据项下所包含的所有字段等,其中字段信息又包含了字段所处字节组、字段id、起始比特位、终止比特位、字段数据类型(包含int、uint、ascii、targetident、hex)等。
提取出这些信息时,将信息按照特定的格式组织,并保存至XML中。使用XML格式的ICD描述文件示例参考格式如下:
Figure BDA0001172261420000081
Figure BDA0001172261420000091
该步骤非必须,如果已经存在了该类型和版本协议的配置文件,则该步骤可以省略。
上述步骤二读取XML配置文件,通过对XML的解析,将XML配置文件中所保存的数据信息转换成类型为Asterix类对象存放在计算机内存中。关于Asterix相关类图参见图2,其中DataItem对应数据项,SubItem对应DataItem子数据项,Field对应具体字段即具体数据值。在该类图中可以看到,DataItem、SubItem、Field对象都包含了id属性,该属性用于对象的唯一标识,id不能够重复,同时id规范应符合编程语言对变量的要求。其中Asterix包含一个或多个DataItem,DataItem中包含一个或多个Field或包含多个SubItem,SubItem中包含一个或多个Field。
上述步骤三使用Asterix对象生成用于数据解析之后存储数据的结构体。由步骤二得到了Asterix对象,将Asterix对象生成结构体规则:
将DataItem、SubItem对象生成以对象id属性值为类型名的结构体或类,将Field对象生成为所属DataItem或SubItem生成的结构体或简单类以id为变量名称的变量,类型为字段数据类型转换成的所使用的编程语言数据类型,以QT(C++编程库)为例转换关系参考如下表:
Figure BDA0001172261420000092
Figure BDA0001172261420000101
当DataItem类型为混合型时,此时需将该数据项下所有的SubItem生成的结构体或类添加为该数据项下的成员变量,变量类型为SubItem生成的结构体名称,变量名称为“_结构体名称”。如id为I021_110的混合型DataItem,该DataItem下包含id为TrajectoryIntentStatus和TrajectoryIntentData的SubItem,此时生成的结构体格式为:
Figure BDA0001172261420000102
将Asterix下所有的DataItem生成完成结构体之后,生成主结构体或主类,主结构体或主类用于生成的解析函数返回的解析结果。主结构体或主类的类型名为“Cat协议类型_版本号整数部分_版本号小数部分_data”。如协议类型为21,版本号为0.26,该类型下包含id为I021_010、I021_030、I021_110的DataItem,此时生成的结构体格式为:
Figure BDA0001172261420000103
以上介绍了结构体的生成规则,下面结合图3对结构体的生成过程进行说明:
3.1循环取出Asterix对象中的DataItem。Asterix对象中包含多个DataItem对象,每个对象都应生成相应的结构体,该步骤使用循环方式取出Asterix对象中的DataItem;
3.2生成以DataItem的id为结构体名称的结构体。该步骤生成结构体的声明,此时该结构体中还未包含任何成员变量;
3.3判断DataItem类型是否为混合型。DataItem为混合类型时,该类型下只包含了多个SubItem,其他类型包含多个Field,所以此处应对DataItem的类型进行判断处理;
3.4循环取出DataItem中的Field。当DataItem类型不为混合类型时,该DataItem包含了多个Field,每个Field对应了具体的数据。使用循环方式取出Field;
3.5根据Field的id和类型生成对应结构体的成员变量。该步骤生成该Field所在的DataItem生成的结构体的成员变量,成员变量的生成规则如上所述。当DataItem下所有的Field都生成了结构体的成员变量时,此时就完成了该DataItem向结构体的转化,继续下一个DataItem;
3.6循环取出DataItem对象中的SubItem。当DataItem类型为混合类型时,该DataItem包含了多个SubItem,每个SubItem都应生成相应的结构体,该步骤使用循环方式取出DataItem对象中的SubItem;
3.7生成以SubItem的id为结构体名称的结构体,并将该结构体生成DataItem结构体的成员变量;
3.8循环取出SubItem的Field。该步骤与第3.4步类似,使用循环方式取出Field;
3.9根据Field的id和类型生成对应结构体的成员变量。该步骤与第3.5步类似;
3.10生成主结构体。经过以上步骤完成了Asterix下所有的DataItem结构体的生成,现在根据所有生成的结构体名生成结构体。按上文提供的规则生成。
3.11输出至结构体文件。由以上步骤生成了具有一定规则的字符串,该步骤使用编程语言提供的文本操作将字符串输出至文件中,文件名称可以以主结构体名称的小写字符串+文件类型后缀,生成的文件内容应参考相应编程语言要求。如主结构体名称为Cat21_0_26_data生成C头文件,则文件名称为cat21_0_26_data.h,文件内容以QT为例,参考格式如下:
Figure BDA0001172261420000121
Figure BDA0001172261420000131
综上,该步骤完成了从内存对象向数据结构体文件的转换与输出。
上述步骤四使用Asterix对象生成用于解析指定协议类型和版本的报文解析代码。由步骤三得到了每个DataItem或SubItem生成对应的结构体,该步骤将为根据每个DataItem或SubItem生成解析函数,并将解析后的数据存放至对应的结构体中,生成一个有序调用其他解析函数的主函数,供外部程序调用。根据Asterix各类协议相关规则,这里提供一种解析函数定义格式供参考,以id为I021_010的DataItem,以QT为例进行说明,生成的解析函数定义如下:
Figure BDA0001172261420000132
返回值:以int类型为返回值,返回该数据项在报文中所占的实际字节长度;
函数名称:以parse+DataItem的id为函数名称;
函数参数:生成的函数包含了两个参数,data为解析的原始数据,retData为解析后的数据所存放的结构体,该结构体应与步骤三DataItem或SubItem所生成的结构体一致。
主函数定义格式参考,以协议类型为21,版本为0.26,以QT为例进行说明,生成的主函数定义参考如下:
Figure BDA0001172261420000141
返回值:空;
函数名称:以parse为函数名称;
函数参数:主解析函数包含两个参数,data为所需解析报文原始数据,retData为解析后数据所存放的主结构体,该结构体应与步骤三所生成的主结构体一致。
以上对所需生成的函数定义进行了说明,同时对个函数定义格式提供了相应参考。下面结合图4对报文解析代码生成过程进行说明:
4.1循环取出Asterix对象中的DataItem。该步骤使用循环方式取出Asterix中的DataItem;
4.2根据DataItem对象的id生成解析函数。生成一个用于解析该DataItem对象的函数定义;
4.3判断DataItem类型。对取出的DataItem类型进行判断,根据相应的类型为函数生成用于解析此数据项的函数体;
4.4生成针对固定长度型解析函数体。该类型特征在于,数据项所占字节长度固定,如果报文中包含该数据项,则该数据项下所有的Field均含值。循环取出该类型下的Field,而每一个Field对应与此时函数参数中retData结构体中的一个成员变量,根据Field提供的信息为对应的成员变量生成一段求值并赋给该成员变量的代码,直至循环结束,最后生成返回DataItem所占字节长度的代码,因为DataItem数据项长度固定,则返回值即为此长度值;
4.5生成针对可变长度型解析函数体。该类型特征在于,数据项所占字节长度不固定,根据报文中数据而决定,每个字节最后一个比特位标识后一个字节是否还属于该数据项,为1属于,0结束。根据这一特征,首先生成求数据项长度的代码,求数据项长度代码说明:使用循环由小到大取出字节,使用&运算符,将字节和0x01做与运算,结果为1则数据项长度加一,否则结束循环,这样就得到了该数据项所占字节总长度。接下来循环取出该类型下的Field,而每一个Field对应与此时函数参数中retData结构体中的一个成员变量,根据Field提供的信息为对应的成员变量生成一段求值并赋给该成员变量的代码,因为数据项所占长度是可变的,所有在该数据项下不是所有的Field都有值,所以在这段代码前应加上准入条件代码,只有当求出的数据项总长度大于当前Field所处字节组时,才执行成员变量赋值求值代码。最后生成返回DataItem所占字节长度的代码,返回值应为求出的数据总长度;
4.6生成针对重复型解析函数体。该类型特征在于,数据项所占字节长度由一个字节数据重复标识跟着至少一组表示数据的字节组成(以下称为字节组),由数据重复标识决定数据的字节具体有多少组,每一组数据长度由数据项初始长度决定。根据这一特征,首先生成获取重复次数的代码,重复次数由表示数据项的原始数据第一个字节决定,取出第一个字节得到重复次数。接下来生成解析每个Field的代码,如参考上文成员变量的生成规则,此时每个Field生成的成员变量类型为数组,循环取出该类型下的Field,根据Field提供的信息为对应的成员变量生成一段求值并添加至成员变量数组中的代码,直至循环结束,最后生成返回DataItem所占字节长度的代码,则返回值应为字节组长度乘以数据重复标识加1;
4.7循环取出DataItem对象中的SubItem。该步骤使用循环方式取出DataItem对象中的SubItem;
4.8根据SubItem对象的id生成解析函数。生成一个用于解析该SubItem对象的函数定义;
4.9判断SubItem类型。对取出的SubItem类型进行判断,根据相应的类型为函数生成解析此子数据项的函数体;
4.10生成针对固定长度型解析函数体。与步骤4.4处理方式一致;
4.11生成针对可变长度型解析函数体。与步骤4.5处理方式一致;
4.12生成针对重复型解析函数体。与步骤4.6处理方式一致;
4.13生成针对混合类型解析函数体。当DataItem对象类型为混合型时,该类型特征在于,数据项所占长度由数据项标识字节和数据项下的SubItem长度决定,每一个SubItem包含一个FRN,由FRN决定SubItem排列的先后顺序;数据项标识字节为可变数据,每个字节最后一位标识后一个字节是否还为数据项标识字节,1为继续,0为结束,数据项标识每个字节每一位标识SubItem在报文中是否被包含,如数据项标识为0x9DB0,则使用二进制表示如下:
按照这样的方式FRN与原始数据二进制进行对照,就能判断报文中是否包含某FRN的SubItem。根据以上的特征,首先生成求数据项标识的字节长度代码,数据项标识字节长度的获取算法与步骤4.5求数据项长度一致;通过之前的步骤已经生成了解析每一个SubItem的函数,接下来生成依FRN顺序,结合SubItem的FRN与数据项标识进行判断数据SubItem是否包含,调用SubItem对应的解析函数代码。最后生成返回数据项长度的代码,返回值应为每个包含的SubItem的长度之和加上数据项标识的字节长度。
4.14生成对外调用的解析函数。通过以上步骤生成了对每个DataItem的解析函数,但这些解析函数都是针对具体的DataItem进行解析,无法解析整个报文,本步骤生成一个对外提供解析报文的函数代码。首先生成一个函数定义,以前文提供的主函数定义参考为例,对如何生成函数体内容进行说明;接下来生成主函数的解析函数体代码,该步骤与步骤4.13类似,每一条ASTERIX报文包含了一个字节的协议类型、两个数据长度、数据项标识字节和数据域,数据项标识与步骤4.13提到的数据项标识含义和表示方式一致,生成求数据项标识字节长度代码,每个DataItem也包含一个FRN,与步骤4.13类似,生成根据FRN由小到大顺序,结合DataItem的FRN与数据项标识进行判断报文中是否包含DataItem数据,调用DataItem对应的解析函数代码;
4.15输出至报文解析代码文件。由以上步骤生成了具有一定规则的字符串,该步骤使用编程语言提供的文本操作将字符串输出至文件中,生成的文件内容应参考相应编程语言要求。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。

Claims (4)

1.基于XML的ASTERIX报文解析代码生成方法,其特征在于,包括以下四个步骤:
步骤一:根据ICD配置通信协议各种参数并保存为XML文件;
步骤二:读取步骤一中所得XML配置文件并解析生成计算机程序识别的内存对象;步骤三:根据步骤二中所得内存对象生成对应的数据结构体文件;
步骤四:根据步骤二中所得内存对象生成对应的解析代码文件,同时,将解析代码文件对应存放至步骤三中所述的数据结构体文件中,最后生成一个有序调用其他解析函数的主函数,以供外部程序通过主函数调用对应的报文解析代码文件;
所述步骤二具体为:读取XML配置文件,通过对XML的解析,将XML配置文件中所保存的数据信息转换成类型为Asterix类对象存放在计算机内存中;
所述步骤三具体还包括以下步骤:
3.1循环取出Asterix对象中的DataItem,Asterix对象中包含多个DataItem对象,每个对象都应生成相应的结构体,该步骤使用循环方式取出Asterix对象中的DataItem;
3.2生成以DataItem的id为结构体名称的结构体;该步骤生成结构体的声明,此时该结构体中还未包含任何成员变量;
3.3判断DataItem类型是否为混合型,DataItem类型是混合型则执行步骤3.6,DataItem类型不是混合型则执行步骤3.4,DataItem为混合类型时,该类型下只包含了多个SubItem,其他类型包含多个Field;
3.4循环取出步骤3.3所述DataItem中的Field;
3.5根据Field的id和类型生成对应结构体的成员变量;之后跳转至步骤3.10;
3.6循环取出DataItem对象中的SubItem;
3.7生成以SubItem的id为结构体名称的结构体,并将该结构体生成DataItem结构体的成员变量;
3.8循环取出SubItem的Field;
3.9根据Field的id和类型生成对应结构体的成员变量;
3.10生成主结构体并输出至结构体文件;
所述步骤四具体还包括以下步骤:
4.1循环取出Asterix对象中的DataItem;
4.2根据DataItem对象的id生成解析函数;
4.3对步骤4.2中取出的DataItem类型进行判断,根据相应的类型为函数生成用于解析此数据项的函数体;DataItem类型为固定长度型则执行步骤4.4,DataItem类型为可变长度型则执行步骤4.5,DataItem类型为重复型则执行步骤4.6,DataItem类型为混合型则执行步骤4.7;
4.4生成针对步骤4.3中固定长度型解析函数体;之后跳转至步骤4.14;
4.5生成针对步骤4.3中可变长度型解析函数体;之后跳转至步骤4.14;
4.6生成针对步骤4.3中重复型解析函数体;之后跳转至步骤4.14;
4.7循环取出DataItem对象中的SubItem;
4.8根据SubItem对象的id生成解析函数;
4.9对步骤4.8中取出的SubItem类型进行判断,根据相应的类型为函数生成解析此子数据项的函数体;SubItem类型为固定长度型则执行步骤4.10,SubItem类型为可变长度型则执行步骤4.11,SubItem类型为重复型则执行步骤4.12;
4.10生成针对步骤4.9中固定长度型解析函数体;
4.11生成针对步骤4.9中可变长度型解析函数体;
4.12生成针对步骤4.9中重复型解析函数体;
4.13由步骤4.10、步骤4.11、步骤4.12生成针对步骤4.9中混合类型解析函数体;
4.14生成对外调用的解析函数;
4.15输出至报文解析代码。
2.根据权利要求1所述的基于XML的ASTERIX报文解析代码生成方法,其特征在于,所述步骤一具体为:根据ASTERIX为每一个类型协议和版本提供的ICD提取出所需定义信息,并将定义信息按照特定格式进行组织,并保存至XML文件中。
3.根据权利要求2所述的基于XML的ASTERIX报文解析代码生成方法,其特征在于,所述定义信息包括这些信息包含:协议名称、协议版本、协议类型、数据项信息。
4.根据权利要求3所述的基于XML的ASTERIX报文解析代码生成方法,其特征在于,所述数据项信息包含数据项类型、数据项初始长度、数据项ID、数据项序号以及数据项下所包含的所有字段信息,所述字段信息又包含了字段所处字节组、字段id、起始比特位、终止比特位、字段数据类型。
CN201611113773.6A 2016-12-06 2016-12-06 基于xml的asterix报文解析代码生成方法 Active CN106598581B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611113773.6A CN106598581B (zh) 2016-12-06 2016-12-06 基于xml的asterix报文解析代码生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611113773.6A CN106598581B (zh) 2016-12-06 2016-12-06 基于xml的asterix报文解析代码生成方法

Publications (2)

Publication Number Publication Date
CN106598581A CN106598581A (zh) 2017-04-26
CN106598581B true CN106598581B (zh) 2020-01-03

Family

ID=58596702

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611113773.6A Active CN106598581B (zh) 2016-12-06 2016-12-06 基于xml的asterix报文解析代码生成方法

Country Status (1)

Country Link
CN (1) CN106598581B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108494752B (zh) * 2018-03-09 2021-03-16 万帮星星充电科技有限公司 一种协议的解析方法和装置
CN109460220B (zh) * 2018-10-19 2022-04-12 泰康保险集团股份有限公司 报文预定义代码生成方法、装置、电子设备和存储介质
CN109451045A (zh) * 2018-12-12 2019-03-08 成都九洲电子信息系统股份有限公司 一种可配置自定义以太头的高速报文采集网卡控制方法
CN109981599B (zh) * 2019-03-06 2022-01-18 南京理工大学 一种通讯数据流的通用数据解析平台及方法
CN110324325A (zh) * 2019-06-19 2019-10-11 中国科学院西安光学精密机械研究所 一种基于配置文件的卫星地面系统通信协议实现方法
CN111221532A (zh) * 2019-12-23 2020-06-02 北京轩宇信息技术有限公司 一种动态链接库的生成方法及装置
CN111464565B (zh) * 2020-05-13 2021-09-28 中国科学院自动化研究所 遵循通用信息交换协议规范的智能解码方法及解码器
CN112988158A (zh) * 2021-02-03 2021-06-18 天翼物联科技有限公司 自动生成代码的服务工程构建方法、系统、装置及介质
CN113778449B (zh) * 2021-08-31 2023-12-19 西南电子技术研究所(中国电子科技集团公司第十研究所) 航空电子接口数据适配转换系统
CN114048352B (zh) * 2021-10-30 2024-04-19 西南电子技术研究所(中国电子科技集团公司第十研究所) Xml文件转换不定长结构体的方法
CN114900570B (zh) * 2022-07-13 2022-10-18 江西联创精密机电有限公司 一种标准化数据采集传输方法及系统
CN115242896B (zh) * 2022-07-29 2023-06-27 宁波三星医疗电气股份有限公司 动态报文解析方法、装置、电子设备及计算机可读存储介质
CN115514829A (zh) * 2022-08-26 2022-12-23 中国船舶重工集团公司第七0七研究所 一种基于xml的udp数据报文自动转换方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101184057A (zh) * 2007-10-24 2008-05-21 中兴通讯股份有限公司 在ims系统中传递事件信息的系统及方法
CN102055770A (zh) * 2011-01-17 2011-05-11 西安电子科技大学 一种基于xml描述的安全协议代码自动实现系统
CN104407971A (zh) * 2014-11-18 2015-03-11 中国电子科技集团公司第十研究所 自动化测试嵌入式软件的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101184057A (zh) * 2007-10-24 2008-05-21 中兴通讯股份有限公司 在ims系统中传递事件信息的系统及方法
CN102055770A (zh) * 2011-01-17 2011-05-11 西安电子科技大学 一种基于xml描述的安全协议代码自动实现系统
CN104407971A (zh) * 2014-11-18 2015-03-11 中国电子科技集团公司第十研究所 自动化测试嵌入式软件的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"基于XML的EtherCAT工业以太网协议解析技术";刘喆 等;《北京航空航天大学学报》;20110930;第37卷(第9期);第1086-1090页 *

Also Published As

Publication number Publication date
CN106598581A (zh) 2017-04-26

Similar Documents

Publication Publication Date Title
CN106598581B (zh) 基于xml的asterix报文解析代码生成方法
CN106598574B (zh) 页面渲染的方法和装置
CN106919509B (zh) 一种客户端生成方法、装置及电子设备
US6859810B2 (en) Declarative specification and engine for non-isomorphic data mapping
US20040054692A1 (en) Method for compressing/decompressing a structured document
CN106648662B (zh) 基于工程造价计算描述语言bcl的报表生成装置及生成方法
US20050283758A1 (en) Bi-directional programming system/method for program development
CN110673854A (zh) Sas语言编译方法、装置、设备及可读存储介质
KR20160031519A (ko) 파서 생성
CN109614329B (zh) 一种基于接口控制文件的软件测试用例辅助设计方法
CN113742298B (zh) 一种机载二进制文件通用并行的解析方法、装置及电子设备
CN112346730B (zh) 一种中间表示的生成方法、计算机设备及存储介质
CN108664546B (zh) Xml数据结构转换方法和装置
CN111814449B (zh) 表单解析方法、装置、设备及存储介质
CN111026670B (zh) 测试用例的生成方法、测试用例的生成装置及存储介质
CN111381828A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN115576603B (zh) 一种获取代码片段中的变量值的方法及装置
CN110188432B (zh) 系统架构的验证方法、电子设备及计算机可读存储介质
CN108509187B (zh) 一种自动生成软件平台mib功能代码的方法及系统
CN115080011B (zh) 基于抽象语法树的代码生成方法及系统
CN116185391A (zh) 应用程序编程接口生成方法、装置、设备及存储介质
CN111381826A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN111831288B (zh) 一种自动生成Thrift IDL数据结构及自动转换函数的方法及系统
CN113885880A (zh) 一种多规则匹配方法、装置及设备
CN110796265A (zh) 决策树模型的交互式操作方法、装置、终端设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Generation method of Asterix message parsing code based on XML

Effective date of registration: 20200901

Granted publication date: 20200103

Pledgee: China Minsheng Banking Corp Chengdu branch

Pledgor: CHENGDU LAND TOP TECHNOLOGY Co.,Ltd.

Registration number: Y2020980005590

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 610000 No.6, Wuke East 3rd road, Wuhou e-commerce industry functional zone management committee, Wuhou District, Chengdu City, Sichuan Province

Patentee after: Chengdu nengtong Technology Co.,Ltd.

Address before: 610000 402, building 13, No.17, Wuxing 2nd Road, Wuhou District, Chengdu, Sichuan Province

Patentee before: CHENGDU LAND TOP TECHNOLOGY CO.,LTD.

PC01 Cancellation of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20211222

Granted publication date: 20200103

Pledgee: China Minsheng Banking Corp Chengdu branch

Pledgor: CHENGDU LAND TOP TECHNOLOGY CO.,LTD.

Registration number: Y2020980005590

PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Generation method of Asterix message parsing code based on XML

Effective date of registration: 20220106

Granted publication date: 20200103

Pledgee: China Minsheng Banking Corp Chengdu branch

Pledgor: Chengdu nengtong Technology Co.,Ltd.

Registration number: Y2022980000087

PC01 Cancellation of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Granted publication date: 20200103

Pledgee: China Minsheng Banking Corp Chengdu branch

Pledgor: Chengdu nengtong Technology Co.,Ltd.

Registration number: Y2022980000087