一种基于组合模式的ICD头文件生成方法技术

技术编号:38843042 阅读:15 留言:0更新日期:2023-09-17 09:55
本发明专利技术属于计算机软件领域,具体涉及一种基于组合模式的ICD头文件生成方法,包括以下步骤:步骤1:导出ICD文件;步骤2:初始化根节点对象rootComppsite;步骤3:解析数据块,完成所有数据块遍历;步骤4:ICD头文件代码生成,本发明专利技术针对ICD从数据库信息转换为C代码头文件的过程,提出了一种基于组合模式的ICD头文件生成方法,利用该方法体现“部分-整体”的层次结构,使得代码生成过程中对单个对象和组合对象的使用具有一致性,能够满足不同数据总线的适配需求,代码生成过程中调用逻辑和接口高度统一,生成工具的代码具备较好的可维护性,相比人工编码极大地提高了工作效率,并保证代码质量。量。量。

【技术实现步骤摘要】
一种基于组合模式的ICD头文件生成方法


[0001]本专利技术属于计算机软件领域,具体涉及一种基于组合模式的ICD头文件生成方法。

技术介绍

[0002]接口控制文档(ICD,Interface Control Document)是航电系统设计的顶层文件,定义了直升机机载设备各分系统之间的电子电气接口、消息通信协议。直升机航电系统ICD由总体设计单位在系统的详细设计过程中编制,作为航电软件详细设计、代码编写、实验室联试、集成测试等研发工作的重要依据,贯穿于航电软件研发过程中。总体设计单位将ICD分发给子系统设计单位时,一般采用从数据库导出文本文件或者XML文件的方式。
[0003]软件开发人员依据上述的文本文件或者XML文件生成C语言头文件,不同开发人员定义的头文件格式不一,采用手写代码编程存在开发繁琐、工作量大、重复性工作
[0004]较多、效率低、出错率高等问题。国内外开展了相关技术的研究,希望可以通过工具的使用,解决以上问题。
[0005]专利申请号201120330280.4“接口控制文件解析处理器”提供了一种接口控制文件解析处理器产品,将数据解析处理流程拆分为多个规则并存储至规则库中,在需要使用时,可根据需要直接选择相应的规则构造数据解析处理流程,解决了代码定义过程复杂度高的问题,不需要生成头文件也可实现数据的解析。
[0006]专利申请号201611113773.6“基于XML的ASTERIX报文解析代码生成方法”公开了一种报文解析代码生成方法,根据ICD提取出所需信息,将信息按照特定的格式组织,并保存至XML中,将XML配置文件中所保存的数据信息转换成Asterix类对象存放在计算机内存中,完成Asterix下所有的DataItem结构体的生成,根据所有生成的结构体名生成结构体,从而得到代码文件。
[0007]头文件是软件程序的组成文件之一,数据接口是软件头文件的重要组成,需要按照程序编码要求编写,软件头文件的数据接口必须按照接口控制文件的要求组织定义。直升机机载子系统总线类型繁多,涉及ARINC 429、ARINC 664、RS422、GJB 289A、FC

AE等多种数据总线,需要设计一种通用的代码转换方法,保证在各型号项目之间的通用性。
[0008]目前公开报道的文献中对于针对如何根据ICD解析数据的方法较多,这些方法直接利用ICD定义信息,完成ICD的序列化和反序列化,不需要生成头文件。但是在实际的机载代码开发过程中,代码开发人员需要按照系统设计开展机载子系统相关逻辑的实现,头文件中的结构体定义了子系统之间数据交互的变量,代码开发人员需要在开发过程中使用这些变量,因此,研究如何将数据库中的ICD定义信息转换为头文件对于提高代码的开发效率具有重大意义。
[0009]传统方法依据ICD生成头文件,需要遍历ICD文件元素,按照ICD定义逐步得到结构体及其对应数据项的方法,面向ARINC 429、ARINC 664、RS422、GJB 289A、FC

AE等多种数据总线的应用场景,不同总线的ICD定义数据元素差异较大,需要对已有代码进行大量修改进行适配,灵活性较差。

技术实现思路

[0010]本专利技术的目的:针对以上问题,本专利技术提出了一种基于组合模式的ICD头文件生成方法,对ICD定义中的元素进行了抽象和提炼,采用面向对象编程技术中的组合(Composite)设计模式,将对象组合成树形结构以表示“部分

整体”的层次结构,使得代码生成过程中对单个对象和组合对象的使用具有一致性。ICD结构体一般包含块(Block),信号(Signal)和字段(Field),通过该方法能够忽略组合对象(如Block、Signal)和单个对象(如Field)的不同,开发代码生成工具的过程中可以统一地使用组合结构中的所有对象,生成所需要的头文件代码。
[0011]本专利技术的技术方案:
[0012]一种基于组合模式的ICD头文件生成方法,包括以下步骤:
[0013]步骤1:导出ICD文件;
[0014]步骤2:初始化根节点对象rootComppsite;
[0015]步骤3:解析数据块,完成所有数据块遍历;
[0016]步骤4:ICD头文件代码生成。
[0017]进一步,步骤1具体是采用XML文件的导出方式从ICD数据库中导出ICD定义文件,即XML文件。
[0018]进一步,步骤2具体是:读取XML文件,利用XML根节点初始化IcdComposite对象rootComposite,IcdComposite类定义了一个列表child,用于保存XML文件解析出的IcdComponent对象;后续解析出的其他数据块作为叶子节点添加到rootComposite对象的child列表中。
[0019]进一步,步骤3中,ICD字段Field被视作为单个对象,数据块Block和信号Signal被视作为单个对象的组合,字段Field作为数据块Block和信号Signal的叶子节点;
[0020]根据组合设计模式的方法,将ICD字段Field、数据块Block和信号Signal进行抽象,设计IcdComponent作为基类,在其基础上派生IcdComposite类和IcdField类,IcdComposite包含若干个IcdComponent对象,因此,IcdComponent既可以表示容器:数据块和信号,又可以表示字段。
[0021]进一步,ICD字段使用IcdField类表示,数据块和信号分别用IcdBlock类和IcdSignal类。IcdField、IcdBlock和IcdSignal的基类都是IcdComponent类,其中IcdBlock类和IcdSignal类派生自IcdComposite类,而IcdComposite的派生自IcdComponent类。
[0022]进一步,IcdComponent定义的方法包括Decode函数和ToString函数,Decode函数的功能是解析Xml文件,ToString函数用于将解析的属性信息转换为字符串类型,输出到代码头文件中,采用面向对象编程的多态方法,相同基类初始化为不同的派生对象,实现编程接口的统一。
[0023]进一步,步骤3包括以下步骤:
[0024]步骤3.1遍历XML文件中的所有blocks子节点,对数据块进行解析;
[0025]步骤3.2遍历数据块中所有子元素;
[0026]步骤3.3如果当前遍历到子元素为singnals节点时,则继续遍历该singnals节点的所有子元素,对该singnals节点进行解析,遍历所述singnals节点的所有fields节点,对该fields节点进行解析,将解析信息添加到当前singnals节点child列表中;判断singnals
节点的所有fields节点是否完成遍历,如果是,添加当前singnals节点信息到数据块的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于组合模式的ICD头文件生成方法,其特征在于,包括以下步骤:步骤1:导出ICD文件;步骤2:初始化根节点对象rootComppsite;步骤3:解析数据块,完成所有数据块遍历;步骤4:ICD头文件代码生成。2.根据权利要求1所述的一种基于组合模式的ICD头文件生成方法,其特征在于,步骤1具体是采用XML文件的导出方式从ICD数据库中导出ICD定义文件,即XML文件。3.根据权利要求2所述的一种基于组合模式的ICD头文件生成方法,其特征在于,步骤2具体是:读取XML文件,利用XML根节点初始化IcdComposite对象rootComposite,IcdComposite类定义了一个列表child,用于保存XML文件解析出的IcdComponent对象;后续解析出的其他数据块作为叶子节点添加到rootComposite对象的child列表中。4.根据权利要求3所述的一种基于组合模式的ICD头文件生成方法,其特征在于,步骤3中,ICD字段Field被视作为单个对象,数据块Block和信号Signal被视作为单个对象的组合,字段Field作为数据块Block和信号Signal的叶子节点;根据组合设计模式的方法,将ICD字段Field、数据块Block和信号Signal进行抽象,设计IcdComponent作为基类,在其基础上派生IcdComposite类和IcdField类,IcdComposite包含若干个IcdComponent对象,因此,IcdComponent既可以表示容器:数据块和信号,又可以表示字段。5.根据权利要求4所述的一种基于组合模式的ICD头文件生成方法,其特征在于,ICD字段使用IcdField类表示,数据块和信号分别用IcdBlock类和IcdSignal类。IcdField、IcdBlock和IcdSignal的基类都是IcdComponent类,其中IcdBlock类和IcdSignal类派生自IcdComposite类,而IcdComposite的派生自IcdComponent类。6.根据权利要求4所述的一种基于组合模式的ICD头文件生成方法,其特征在于,IcdComponent定义的方法包括Decode函数和ToString函数,Decode函数的功能是解析Xml文件,ToString函数用于将解析的属性信息转换为字符串类型,输出到代码头文件中,采用面向对象编程的多态方法,相同基类初始化为不同的派生对象,实现编程接口的统一。7.根据权利要求4所述的一种基于组合模式的ICD头文件生成方法,其特征在于,步骤3包括以下步骤:步骤3.1遍历XML文件中的所有blocks子节点,对数据块进行解析;步骤3.2遍历数据块中所有子元素;步骤3.3如果当前遍历...

【专利技术属性】
技术研发人员:程新满葛晨洪斌魏石峰仇翔东
申请(专利权)人:中国直升机设计研究所
类型:发明
国别省市:

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

1