一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种飞控系统的传输服务代码的自动生成方法和装置与流程

2023-02-04 11:51:14 来源:中国专利 TAG:


1.本发明属于软件工程化技术领域,具体涉及一种飞控系统的传输服务代码的自动生成方法和装置。


背景技术:

2.为了解决飞控电子系统的复杂性逐渐增高,系统重用性差、机载软件和硬件耦合性较高、系统升级扩展困难的问题,国际开放组织(the open group)于2014年发布了face(future airborne capability environment,未来机载能力环境)架构标准。face技术方法通过定义参考架构和采用设计原则来增强软件可移植性,来解决模块化、可移植性和互操作性方面的障碍。
3.基于face标准的飞控计算机系统的源代码开发已经是国内众多机构的研究项目。然而目前源代码开发工作多是手工编写代码,这其中涉及大量重复性工作,软件开发周期长,软件开发成本居高不下。目前很多国内外企业和研究机构都在专注于自动代码生成技术的有关研究以及相应的工具开发。
4.当前自动代码生成技术的方法主要有:基于模型的自动代码生成和基于模板的自动代码生成。两种技术在需要修改生成代码时,只需要修改模板和模型即可,都便于维护。但是,基于模板的自动代码生成技术缺少框架模型支撑、没有具体的业务逻辑实现,适用范围小。基于模型的自动代码生成技术在建模方面仍然比较困难、代码冗余比较多。两种方法均可直接在face标准的基础上实现自动代码生成,但其本身的缺点仍然会存在。
5.在传输服务(下文用ts代替)配置这一范畴的代码生成方法实现过程中,配置数据大多仍需要人工手动添加至代码框架中,这其中涉及大量重复性工作,软件开发周期长,软件开发成本居高不下。


技术实现要素:

6.本发明提供了一种飞控系统的传输服务代码的自动生成方法和装置,降低电传飞行控制系统软件的研发成本。
7.本发明一方面提供一种飞控系统的传输服务代码的自动生成方法,所述方法包括以下步骤:
8.步骤一、接收用户输入的飞控系统中使用的至少一个传输服务和传输服务的属性,传输服务属性包括:传输接口、传输机制与传输元素;
9.步骤二、对于每一个传输服务,根据各传输服务的传输接口,从预设xsd文件中选择所述传输接口对应的待选complextype节点,作为待选集合;所述预设xsd文件中包含至少一个待选complextype节点,一个待选complextype节点对应一种传输接口,每个待选complextype节点包括多个simpletype子节点,simpletype子节点为传输接口所适配的传输机制与传输元素规则;传输元素规则包括:传输元素的枚举类型和/或文本类型;
10.步骤三、对于每一个传输服务,接收用户在待选集合中选择的新的传输服务,将各
新的传输服务作为xml文件中的xsdnode节点生成xml文件;
11.步骤四、根据xml文件中的各节点信息,构造xpath路径表达式,根据xpath路径表达式使用dom4j方法完成xml文件解析,得到解析文件;
12.步骤五、将解析文件中的各传输服务中属性转化为预设数据类型,得到模板元素;
13.步骤六、将模板元素赋值到预设传输服务的代码模板中;
14.其中,预设传输服务的代码模板是使用stringtemplate模板引擎生成的。
15.可选的,所述将解析文件中的各传输服务中属性转化为预设数据类型,包括:
16.从解析文件中筛选具有不同属性的传输服务节点,将各具有不同属性的传输服务节点中属性转化为预设数据类型。
17.可选的,传输服务包括:传输实现服务和预设版本的传输接口服务;所述预设版本的传输接口服务为用户输入的传输服务的传输接口对应的传输接口服务;
18.预设传输服务的代码模板是在stringtemplate模板中针对所述传输实现服务和预设版本的传输接口服务进行编辑,形成得到的通用代码模板。
19.可选的,所述方法还包括:
20.对于任一传输服务,在预设xsd文件中不存在所述任一传输服务的传输接口对应的待选complextype节点时;
21.在预设xsd文件中,创建所述任一传输服务的传输接口对应的待选complextype节点;
22.为所述待选complextype节点添加simpletype子节点。
23.可选的,所述对于每一个传输服务,根据各传输服务的传输接口,从预设xsd文件中选择所述传输接口对应的待选complextype节点,作为待选集合之后,所述方法还包括:
24.根据待选集合,生成可视化界面;
25.对应的,接收用户在待选集合中选择的新的传输服务,包括:
26.接收用户通过可视化界面在待选集合中选择的新的传输服务属性。
27.本发明另一方面提供一种飞控系统的传输服务代码的自动生成装置,包括:
28.接收模块,用于接收用户输入的飞控系统中使用的至少一个传输服务和传输服务的属性,传输服务属性包括:传输接口、传输机制与传输元素;
29.选择模块,用于对于每一个传输服务,根据各传输服务的传输接口,从预设xsd文件中选择所述传输接口对应的待选complextype节点,作为待选集合;所述预设xsd文件中包含至少一个待选complextype节点,一个待选complextype节点对应一种传输接口,每个待选complextype节点包括多个simpletype子节点,simpletype子节点为传输接口所适配的传输机制与传输元素规则;传输元素规则包括:传输元素的枚举类型和/或文本类型;
30.生成模块,用于对于每一个传输服务,接收用户在待选集合中选择的新的传输服务,将各新的传输服务作为xml文件中的xsdnode节点生成xml文件;
31.解析模块,用于根据xml文件中的各节点信息,构造xpath路径表达式,根据xpath路径表达式使用dom4j方法完成xml文件解析,得到解析文件;
32.转化模块,用于将解析文件中的各传输服务中属性转化为预设数据类型,得到模板元素;
33.赋值模块,用于将模板元素赋值到预设传输服务的代码模板中;
definition,xsd),然后通过解析xsd文件可视化每一种ts服务机制所需的配置参数,进而完成ts配置文件的自动生成;接着采用stringtemplate模板引擎,设计传输机制的代码模板;对生成的配置文件解析,根据解析结果选择读取相应的stringtemplate模板;对模板实例化,实现代码的自动生成。
49.下面以采用java语言为例,对本发明提供的飞控系统传输服务代码的自动生成方法进行解释说明,图1是本发明提供的飞控系统的传输服务代码的自动生成方法的实施流程图,如图1所述,其具体的步骤如下:
50.步骤一:根据万维网联盟w3c的推荐标准并基于飞控嵌入式开放体系架构,设计存储ts配置xml文件需遵守的xsd文件。
51.首先定义第一层的complextype节点(也称为顶层节点),并给name属性赋值,该节点是在外层的复杂类型节点;其子节点为6个element元素,分别表示6种ts服务,各个element元素的name属性值为传输服务机制名,例如name="tcpsocket"表示该服务机制为tcpsocket,type属性将引用其他complextype的名称,例如"xs:tcpsocket_type",表示引用的复杂节点名称为tcpsocket_type;
52.其次定义第二层complextype节点(也称为待选节点),此类节点被第一层type属性引用的,所以会产生6个被引用的complextype节点,与第一层的六个传输机制的type属性一一对应。每一个被引用的complextype节点的子节点是其对应的ts服务中的配置项,例如tcpscoket有21项配置项,那么在tcpsocket对应的complextype下就定义11个element元素,各个element元素的name属性值取配置项名称,例如name="connectionname"表示连接名称属性。type属性代表该配置项的数据类型,若为string,int,double等常见数据类型,直接定义即可例如type="string",若元素的内容需定义为几个可选值,就要使用枚举约束,同样采用type引用节点的方式,例如type="xs:connectiontype_type",使结构更加清晰;
53.最后,定义有枚举约束的simpletype节点,其子节点为对应的枚举项,且每一个被引用节点的名称与第二层引用此节点的配置项元素的type属性值一一对应,否则无法引用。例如《simpletype name="connectiontype_type"》表示该枚举属性名称为连接类型,在第二层complextype节点中引用时的对应type属性也应为connectiontype_type。
54.步骤二:解析ts配置xsd文件,获取所需的配置参数信息,完成后续总线抽象准备。声明静态变量类和节点对象类,完成解析方法类。具体的解析过程如下:
55.(1)通过saxreader读取xsd数据,并返回document格式的对象;
56.(2)得到document对象后,使用getrootelement()方法获取根元素,返回也是一个element对象;
57.(3)根据节点信息构造xpath路径表达式。xpath表达式指向满足条件的节点或节点集,例如某个ts服务所引用的complextype节点的xpath路径表达式为"//" complextype "[@name=\"" configuration_type "\"]";
[0058]
(4)根据构造好的xpath路径表达式使用dom4j方法获取节点或节点集,如果xpath路径指向一个节点,则使用函数“selectsinglenode”获取节点;如果xpath路径指向节点集,则使用函数“selectnodes”获取节点集;例如list《node》elementnodes=firstcomplextypeelements.selectnodes(basepath "//element");表示获取第一层complextype节点
下的所有element元素,结果存储在list中。
[0059]
(5)获取节点后,通过attributevalue("name")获取节点属性name的值,通过attributevalue("type")获取节点属性type的值,通过attributevalue("value")获取节点属性value的值,将获取的信息封装到节点对象中。
[0060]
(6)根据(5)中获取的type属性值,获取第二层complextype节点。path路径为"//" complextype "[@name=\"" type "\"]";其中type为(5)中获取的type值。接着通过dom4j方法获取第二层complex节点的属性节点集,例如list《node》elementnodes=firstcomplextypeelements.selectnodes(basepath "//
[0061]
element");表示获取第二层complex节点下的所有element元素,结果存储在list中。
[0062]
(7)获取到节点后,通过attributevalue("name")获取节点属性name的值,通过attributevalue("type")获取节点属性type的值,通过attributevalue("value")获取节点属性value的值,将获取的信息封装到节点对象中。
[0063]
(8)根据(7)中获取的type属性值,获取第三层simpletype节点。path路径为"//" complextype "[@name=\"" type "\"]",接着获取simpletype节点下的枚举类型值,如list《node》elementnodes=firstcomplextypeelements.selectnodes(basepath "//enumeration")。
[0064]
(9)通过attributevalue("value")获取枚举类型属性的值。
[0065]
4)根据构造好的xpath路径表达式使用dom4j方法获取节点或节点集,如果xpath路径指向一个节点,则使用函数“selectsinglenode”获取节点;如果xpath路径指向节点集,则使用函数“selectnodes”获取节点集;
[0066]
获取节点后,通过attributevalue("name")获取节点属性name的值,通过attributevalue("type")获取节点属性type的值,通过attributevalue("value")获取节点属性value的值,将获取的信息封装到节点对象中。
[0067]
步骤三:可视化配置参数:每一个ts服务有着其包含的ts属性,所以每一个ts服务有着不同的配置参数,根据步骤二的解析结果,为每一个ts服务提供一个操作界面,其中对于枚举型配置项显示于所述操作界面中,供使用者选择。根据前面步骤知,传入不同的参数便可解析到相应的节点信息。因此,只需要提供一个公用的操作界面,通过不同的输入参数,界面所显示的配置项也不同。具体实现过程如下:
[0068]
1)调用xsd解析方法并传入参数tstype,即获取该ts服务中的所有配置项节点对象集合;
[0069]
2)通过传入的tstype,通过解析xsd找到其下的属性。遍历集合中的节点对象,通过getname()方法拿到配置项名称并依次作为界面标签名称,通过gettype()方法拿到配置项的数据类型;
[0070]
3)判断属性配置项的数据类型,若某配置项type为自定义类型,调用xsd解析方法并传入参数type,即获取该配置项可选择的值;
[0071]
4)配置项类型是引用simpletype类型的,就新建combo下拉框,并将在simpletype下获取的枚举值加入到下拉框选项中,其他如int,string,double等常见的数据类型则新建text文本框。
[0072]
在配置参数可视化界面后,开始对枚举类型和文本类型的属性的输入进行限制,确保输入属性信息为合理内容。具体实现过程如下:
[0073]
(1)添加文本输入监听事件addmodifylistener,接着用gettext()判断枚举类型属性的输入是否为空,如果为空,用updatestatus()方法更新提示信息,同时使用getbutton(ok).setenabled(false)方法将“确定键”置灰。
[0074]
(2)对文本类型属性输入进行限制,首先和枚举类型同样进行判空处理。接着用equals()方法对文本属性进行分别处理,不同的属性需要不同的限制。接着用gettext()方法获取属性的输入信息,进行限制判断,若不符合输入限制则将“确定键”置灰。例如integer.valueof(text.gettext())》65536表示文本属性的值大于65536。
[0075]
至此,ts六种传输机制均可以将所属的配置项显示在操作界面中,供用户自行配置。
[0076]
步骤四:生成ts配置文件:对ts服务中的参数配置完成后,最终生成一个保存ts配置数据的xml文件。在配置参数可视化界面中填写符合限制的配置项后,保存后生成ts配置文件,该ts文件保存着各个ts服务的配置数据。具体实现过程如下:
[0077]
在配置参数可视化界面中填写符合限制的配置项后,保存后生成ts配置文件,该ts文件保存着各个ts服务的配置数据。具体实现过程如下:
[0078]
1)为每一个ts服务的配置数据在配置文件中添加一个原子元素atom,通过addattribute()方法为每一个原子元素添加属性id和kind;属性id值由uuid(universally unique identifier)生成,使得每一个原子元素可唯一标识,用ts服务名称为属性kind赋值;
[0079]
2)通过addelement("attribute")方法为原子元素添加子元素attribute,每一个子元素代表ts服务的一个配置项;通过addattribute()方法为每一个配置项元素添加属性kind,用配置项名称为属性kind赋值。例如put("kind",xsdnode.getname());
[0080]
3)通过addelement("value")方法为每一个attribute元素添加子元素value,每一个元素value存放其配置项的枚举类型的数据;
[0081]
4)通过获取操作界面使用者的配置数据,通过settext()方法,为ts配置文件中每一配置项value元素设置内容。
[0082]
以上步骤便可完成各个ts服务的配置项的配置结果完整的保存在ts配置文件。
[0083]
步骤五:打开步骤而配置过参数的操作界面时,将生成的配置文件中的配置数据显示于操作界面中,对需要变动的数据进行操作,再次进行保存时便可完成该ts配置文件的更新操作,完成ts配置文件的更新。当某些ts服务的配置参数需要更改时,不用手动更改ts配置文件,只需要在ts服务参数配置的可视化操作界面中修改数据并保存即可。具体实现过程如下:
[0084]
1)再次打开配置过参数的ts服务操作界面时,通过id查找ts配置文件中所对应的的原子元素;
[0085]
2)获取各个配置项的配置数据,查找配置项的名称与ts配置文件中的属性kind值一致的attribute元素;通过settext()方法将再次配置的参数数据对attribute元素下的value元素的内容一一更新。
[0086]
步骤六:使用stringtemplate模板引擎完成ts服务接口代结构的模板设计。下面
详细说明ts服务接口代码模板的每一部分的具体设计方案:
[0087]
1)ts_adapter代码模板。该模板组主要用于ts服务管理接口的声明部分的自动生成,首先定义命名空间face,其次在face命名空间中定义ts命名空间。ts命名空间中主要包含初始化函数;创建连接函数;发送消息函数;接收消息函数;根据连接id可以声明销毁连接函数。
[0088]
2)mtf_ts代码模板。该模板组主要用于上一个模板函数的具体实现。首先定义命名空间mtf,其次在mtf命名空间中定义ts命名空间。该模板包含tcpsocket、udpsocket、sharedmemory、messagequeue、queuingport和samplingport传输服务的代码模板。不同的传输方式根据自己对应的属性配置来进行填充模板,最终完成对1)中所有声明函数的实现。
[0089]
步骤七:根据步骤四生成的xml文件获取各个ts服务的参数配置数据,完成ts配置文件解析。本次开发使用java语言。在java语言中,相比于其他解析xml文件的方法,dom4j是一个便捷、灵活的开放源代码的库,具有性能突出、功能强大和使用方便的特点。故在解析xml文件时选用dom4j技术。dom4j通过xml文件树结构进行解析xml文件,因此本文选择在获取节点路径信息的时候使用xpath语言,xpath语言使程序结构变得更加简洁。具体的解析xml文件的过程如下:
[0090]
1)选择并读取为各个ts服务xml文件,获取document对象;例如:document cop=new saxreader().read(new file("templates/cop_gncv5.xml")),表示读取templates文件夹下的xml文件。
[0091]
2)根据节点信息构造xpath路径表达式。xpath表达式指向满足条件的节点或节点集,例如xpath路径表达式为"//atom[@kind='tcpsocket']",表示获取xml文件中所有tcpsocket的路径。
[0092]
3)根据构造好的xpath路径表达式使用dom4j方法获取节点或节点集,如果xpath路径指向一个节点,则使用函数“selectsinglenode”获取节点;如果xpath路径指向节点集,则使用函数“selectnodes”获取节点集。例如selectnodes(xpath_tcpsocketprocess)表示获取tcpsocket的所有属性节点集。
[0093]
4)循环遍历属性节点集,用elementtext获取根节点下的文本属性值,用attributevalue获取叶节点所配置的属性值,并将获取的信息存储在相应的数据结构中。
[0094]
步骤八:根据节点信息选择读取相应stringtemplate模板,对于每一个模板元素,为其对应的ts服务模板文件的属性进行赋值,使模板实例化。利用步骤六设计好的stringtemplate代码模板,按照步骤七生成ts服务接口代码。具体过程如下:
[0095]
1)读取face_ts的stringtemplate模板文件,传入各个传输机制代码所需参数,可生成管理接口的代码;
[0096]
2)读取mtf_ts的stringtemplate模板文件,获取tsgroup对象;
[0097]
根据步骤七解析出来的数据结果匹配到模板文件中的对应部分,例如tcpsocket服务元素选择tcp模板部分,获取其对应的对象;
[0098]
3)再根据解析到的ts服务中的配置参数,对所选择的模板中的属性进行赋值;例如tcpsocket服务包括源地址、最大字节数等属性信息,给模板赋值后,生成传输服务代码块;
[0099]
4)最后将赋完值的ts对象转化为字符串,方便输出和存储到指定路径。
[0100]
至此,实现了用户只需要在可视化界面输入符合要求的参数值,就可以完成传输服务配置和代码的自动生成。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献