CN109558117B - 面向航天应用的aadl模型求精及其支持的c代码自动生成方法 - Google Patents
面向航天应用的aadl模型求精及其支持的c代码自动生成方法 Download PDFInfo
- Publication number
- CN109558117B CN109558117B CN201811224473.4A CN201811224473A CN109558117B CN 109558117 B CN109558117 B CN 109558117B CN 201811224473 A CN201811224473 A CN 201811224473A CN 109558117 B CN109558117 B CN 109558117B
- Authority
- CN
- China
- Prior art keywords
- component
- property
- aadl
- model
- template
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 134
- 230000006870 function Effects 0.000 claims abstract description 70
- 238000006243 chemical reaction Methods 0.000 claims abstract description 66
- 238000013507 mapping Methods 0.000 claims abstract description 32
- 230000008569 process Effects 0.000 claims description 88
- 230000009466 transformation Effects 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 17
- 238000007670 refining Methods 0.000 claims description 9
- 230000001419 dependent effect Effects 0.000 claims description 8
- 238000010276 construction Methods 0.000 claims description 5
- UPPMZCXMQRVMME-UHFFFAOYSA-N valethamate Chemical compound CC[N+](C)(CC)CCOC(=O)C(C(C)CC)C1=CC=CC=C1 UPPMZCXMQRVMME-UHFFFAOYSA-N 0.000 claims description 3
- 230000006399 behavior Effects 0.000 description 18
- 238000011161 development Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000003542 behavioural effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000013210 evaluation model Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012367 process mapping Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 150000003839 salts Chemical class 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,通过对平台无关模型中的构件(系统/功能/进程/数据)进行求精,通过属性集模板限制的属性集元素描述生成可运行C代码所必要的功能与平台相关语义。进一步地,通过OSATE提供的AADL文件解析模块对文件保存的AADL文件解析并包装成类,并借助Xtend提供的模板功能表达AADL到C代码转换规则的映射,以此实现一个基于AADL开源工具环境OSATE的Eclipse平台插件。
Description
技术领域
本发明涉及基于AADL设计模型进行C代码的自动生成技术领域,具体涉及一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法。
背景技术
随着嵌入式软件在航空电子、汽车工业、通信、核工业等安全关键领域的广泛应用,这类嵌入式系统必须保证系统的可靠性、安全性等相关性质,这类系统被称为安全关键系统(Safety Critical System)。保障这类系统的安全性、可靠性已经成为当前软件工程研究领域一个非常重要的课题。
模型驱动工程可以用于有性能和可靠性需求的嵌入式系统的开发。模型驱动工程包括建模和模型转换,这个过程贯穿着系统的声明周期。但是到现在,很少有工作评估基于模型的性能评估早期集成,主要原因在于初始模型的语义过少,无法进行早期设计阶段分析。而且借助语义不完整的早期模型,也无法转换出功能保持需求语义的可运行代码。
已有的模型求精工具RAMSES几乎是为了使生成的代码和模型分析保持一致才去进行AADL模型到AADL精化模型的转换,而该转换是基于已有的模型到代码的规则反推出的模型转换。
发明内容
发明目的:为解决现有技术中存在的问题,本发明的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,通过AADL建模语言提供的额外自定义属性集功能,实现对模型的求精,缩减初步模型与可运行代码语义之间的差距,并基于精化的模型自动生成可运行C代码。
本发明提供了一种面向航天应用的AADL模型求精方法,定义不同的AADL模型求精规则,该模型求精规则采用AADL语言提供的扩展自定义语言方法得到属性集模板,通过定义一个以明确功能属性、非功能属性以及添加平台相关描述属性的属性集,将模型属性集模板保存在该属性集中;借助属性集的手动填写实现在需求建模中添加语义元素,对AADL模型中构件的特定平台相关语义进行求精工作。
在所述属性集中可定义新的属性、属性类型和属性常数,每个属性集均包括一个单独的名称空间,能够唯一被引用。
当由OSATE提供的默认属性、属性类型、属性常数的属性集,该属性集可省略属性集名称。
当一属性集参考另一个属性集中的内容,将该属性集作为可利用with说明访问的属性集来说明,在应用属性集进行求精工作时,用软件包头部的with说明属性集名称。
所述属性集模板的语法结构为:
其中:
<property set or package name>为当前属性集模版可能会应用到的其它属性集模板;
<property type declaration>为属性类型;
<property declaration>为属性定义;
<property constant declaration>为属性常数。
本发明还公开了一种面向航天应用的AADL模型自动生成C代码的方法,其特征在于:包括以下步骤:S1:定义不同的AADL模型求精规则,该模型求精规则采用AADL语言提供的扩展自定义语言方法得到属性集模板,通过定义一个以明确功能属性、非功能属性以及添加平台相关描述属性的属性集,将模型属性集模板保存在该属性集中;借助属性集的手动填写实现在需求建模中添加语义元素,对AADL模型中构件的特定平台相关语义进行求精工作,得到AADL平台相关模型;
S2:定义AADL平台相关模型到可运行C代码的转换映射规则,该转换映射规则实现闭包,同时借助Xtend提供的模板功能表达该转换映射规则;
S3:获得AADL平台相关模型后,借助OSATE平台对该模型的顶层系统进行实例化,得到代表该顶层系统的AAXL2文件,借助AAXL2文件和EMF代码解析得到SystemImpl对象,借助Xtend转换模板对该SystemImpl对象进行子系统遍历、进程遍历、其他构件遍历三个步骤,生成AADL平台相关模型的对应C代码工程。
在所述S1之前需借助EMF对AADL平台无关模型进行语义分析以及提取,将AADL平台无关模型转换为语义准确的Java类和允许查看和基于命令的模型编辑的适配器类。
所述S2中的转换映射规则包括系统转换模板、进程转换模板、线程转换模板、函数转换模板、行为附件转换模板、数据构件转换模板、特性转换模板以及属性转换模板;
其中,系统转换模板SystemTemplate.xtend,对应org.osate.aadl2 EMF中系统实例类位置,其具体包括:SystemSubcomponent系统构件接口、getSystemSubcomponentType()获取系统构件类型、setSystemSubcomponentType(SystemSubcomponentType)设置系统构件类型、SystemImplementation系统实例类、name对应AADL中系统名、eContainer拥有该构建的上层构建且最外层是package、Features该系统构件所属的系统类型的所有接口特性、Subcomponents该构件的所有子构件、Connections该系统构件配置的所有链接;
其中,进程转换模板ProcessTemplate.xtend,对应org.osate.aadl2 EMF中过程实例类位置,其具体包括:ProcessSubcomponent过程构件接口、getProcessSubcomponentType()获取过程子构件类型、ProcessImplementation过程实现构件、getOwnedDataSubcomponents获取过程构件拥有的数据子构件且在生成代码中对应着单独TASK的本地变量、getOwnedSubprogramSubcomponents获取过程构件的函数功能子构件且在生成代码中对应着一个可以随时被调用的函数、getOwnedThreadSubcomponents获取过程构件的线程子构件、getOwnedThreadGroupSubcomponents获取线程子构件组、getType获取类型;
其中,线程转换模板ThreadTemplate.xtend对应org.osate.aadl2 EMF中线程实例类位置,具体包括:ThreadSubcomponent线程构件接口、ThreadClassifier线程分类器、ThreadImplementation线程实现构件类、Name线程名、getOwnedDataSubcomponents获取数据子构件、getOwnedSubprogramSubcomponents获取函数功能子构件;
其中,函数转换模板SubprogramTemplate.xtend对应org.osate.aadl2 EMF中函数实例类位置,具体包括:CalledSubprogram被调用函数类、SubprogramImplementation函数实例类用于存储所有函数功能内容;
其中,行为附件转换模版BaAnnexTemplate.xtend,包括:DefaultAnnexSubclauseImpl默认附件子句实现、BehaviorAnnexImpl行为附件子句实现类、AnnexTemplate附件模板类、AnnexSwitch4head生成附件过程的头内容、AnnexSwitch将抽象附件转换为确定的附件、BaAnnexTemplate行为附件模板类;
其中,数据构件转换模板DataTemplate.xtend对应org.osate.aadl2 EMF中数据实例类位置,具体包括:DataSubcomponent数据子构件接口、GetDataSubcomponentType()获取数据子构件类型、DataClassifier数据构件分类器、DataImplementation数据子构件实现类;
其中,属性转换模板PropertyTemplate.xtend,包括:PropertyAssociation属性集对象、Property属性对象、ModalPropertyValue属性值对象、PropertyExpression属性表达式抽象对象且对属性值实际表达、NamedValueImpl普通值变量对象、StringLiteralImpl字符串变量对象、ListValueImpl数组变量对象、getInclude(PropertyAssociationproperty)根据属性对象获取需要包含的文件、parseListValue(ListValueImpl value)顺序批量处理数组变量对象、parseNamedValue(AbstractNamedValue value)单独处理属性值、getPName(EList<PropertyAssociation>properties)获取平台系统名字标识、getDelay(SubprogramImplementation subpro)针对VxWorks平台相关属性WdDelay做特定延迟处理、isCalledByWd(SubprogramImplementation subpro)针对VxWorks平台相关属性wdStart做解析、isVxWorks(ProcessImplementation process)针对VxWorks平台相关属性VxWorks做解析。
所述S1中AADL模型中的构件包括system构件、过程构件、函数构件、数据构件。
所述属性集中可描述生成可运行C代码所必要的功能与平台相关语义。
有益效果:本发明主要研究了从AADL模型到可执行C代码的生成规则、方法和工具,优点在于减少了由手动编程带来的错误,保证系统质量属性以及降低系统开发时间。目前基于AADL模型生成C代码的工具包括STOOD、Ocarina,但是这些已有的工具无法满足从VxWorks系统平台的平台相关AADL模型到使用VxWorks平台API的C代码的转换。进一步地丰富了AADL模型到可执行C代码转换的工具集。
附图说明
图1:本发明的模块化体系结构;
图2:Xtend描述转换规则;
图3:AADL模型精化和C代码生成整体过程示意图;
图4:工具设计Java包间结构关系图;
图5:生成C工程流程示意图。
具体实施方式
下面结合附图进一步阐述该发明方法。
本发明涉及到一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法及相应的工具实现,该工具是基于AADL开源工具环境OSATE使用Eclipse插件开发技术实现的,通过提供初步平台无关模型并引导用户根据模型求精规则进行模型求精,对实例化后的系统模型执行代码生成过程,后台将实现AADL平台相关模型PSM到可运行、平台相关C代码的自动转换。为了在模型求精过程中尽量满足工程师的习惯,手动添加的属性应尽可能精要,这种限制也一定程度上避免了引入过度复杂的求精过程而导致模型求精违背MDA的初衷,保障了模型驱动开发优点。
1)工具总体概述
该AADL模型求精及其支持的C代码自动生成工具,基于AADL扩展语言的能力实现模型求精,并基于EMF和Xtend技术实现AADL模型到C代码的转换。综上,该面向航天应用的AADL模型求精及其支持的C代码自动生成方法分为手动的模型求精和自动的代码生成两个步骤,详见图1。我们采用基于EMF的MDA模型解析技术设计由AADL模型到C代码的转换规则,转换映射规则部分元模型详见图2,并采用AADL提供的扩展自定义语言方法实现模型求精,属性集模板将由一个额外的属性集模板保存。整个工具的设计模块及Java包的结构与关系详见图3。
2)借助EMF实现AADL模型语义分析与提取
OSATE2是基于eclipse二次开发的,它在底层通过EMF对AADL模型进行语义分析以及提取。EMF是基于Eclipse的模型框架,它是在Eclipse上进行MDA模型驱动开发的重要技术支持。EMF项目是一个建模框架和代码生成工具,根据XMI(AADL模型代码可以使用XMI表达)中描述的模型规范,EMF可以提供运行时支持,将模型转换成高效的、语义准确的Java类以及一组允许查看和基于命令的模型编辑的适配器类。
工具类在org.osate.aadl2.util包中,包括并不局限于:Aadl2AdapterFactory适配器工厂类、Aadl2DerivedUnionAdapter联合适配器类、Aadl2InstanceUtil实例工具类、Aadl2ResourceFactoryImpl资源工厂类、Aadl2ResourceImpl资源类、Aadl2Switch转换类、Aadl2Util工具类。
模型基础组件接口在org.osate.aadl2包中,包括并不局限于:Classiffier分类器接口、Bus主线接口、BusAccess主线通道连接接口、CallContext调用上下文接口、Data数据组件接口、DataCliffier数据组件分类器接口、Device设备接口、Thread线程接口、System系统接口、Subprogram功能接口、Process过程接口、Property属性接口。
在OSATE的aadl2底层支持中,除了以上两个包,还提供了:org.osate.aadl2.impl模型基础组件实现类、org.osate.aadl2.instance模型实例接口、org.osate.aadl2.instance.impl模型实例类、org.osate.aadl2.instance.util模型实例操作工具、org.osate.aadl2.operations AADL组件间操作工具类、org.osate.aadl2.parsesupport编译支持类、org.osate.aadl2.properties属性类。
3)定义转换规则映射
建立数据构件转换模板,将初步AADL模型中的自定义数据构件转换为由C代码文件表达的数据构件:在建模阶段,数据构件通常用于描述存储在需求中用到的所有数据形式,包括系统中的全局变量等静态数据、系统内交互用到的动态数据、系统内数据存储单元的数据描述等。对单个数据的描述映射规则将会根据C代码的语法规则与风格对数据的名称、来源地、目的地、数据类型、描述进行合理的表达。定义名字转换模板:在数据构件所引用的领域词库中包括着用于描述在需求中用到的领域名词,包括系统/子系统/功能/子功能的名字、需求描述中模式的名字、整个系统中出现的硬件的名字等,相应的名字字符串处理模块将会进行从AADL风格命名到C代码风格命名的统一转换。
定义从AADL结构化模型到扁平化C代码的转换映射规则,映射规则实现闭包:
AADL平台无关模型尚且无法满足生成可运行C代码的条件,需要通过特定的模型精化过程添加平台相关语义、功能性语义、非功能性语义等等。进一步地,由AADL表达的模型结构是层次化地,为了基于精化的AADL平台相关模型生成可运行C代码,需要对模型进行扁平化处理。在AADL模型中,主要层次构成分为系统、进程、线程、子程序、BA行为附件、数据构件模块。AADL中构件的表达分为两个部分:类型和实现。一个构件拥有一个类型以及对应的0个、1个或多个实现。构件类型描述对外的功能接口,例如输入输出端口,在我们的工具中这些端口都将会映射为不同作用域下的变量。每个构件都或多或少的会被属于自己的构件特征、连接、流、构件属性、模式、扩展附件所描述。
现对AADL模型中的主要层次做进一步解释说明:
系统模型:系统通常代表软件、执行平台或系统组件的复合体。它能够代表软件硬件的组合,或者各种子系统或超系统的复合体。系统能够包括软件、之星平台和系统组件各式各样的组合,例如系统就可以只包括软件(只有进程构件、子程序构件等软件构建)。
进程模型:在运行时强迫执行的受保护的地址空间,该空间可以防止其他组件访问进程内部的任何部分,并防止进程内部的线程引起其他进程的损坏。一个完整的进程描述至少要包括一个明确说明的线程,通常情况下进程只代表这个受保护的地址空间,而不是最小执行单元。
线程模型:线程表示通过代码能够与其它线程并行执行的代码的执行路径。线程的代码在由包括该线程的进程定义的地址空间内执行。一个AADL线程可以通过操作操作系统线程实现,线程的执行过程在AADL模型中可以通过AADL行为附件描述。
子程序模型:代表着可顺序访问的、表示注入返回和访问方法类概念的可执行代码,在其属性集上确定功能名,输入数据/事件、输出数据/事件、功能描述、性能需求属性、接口需求及其它非功能属性描述。子程序的具体实现过程在AADL中通过行为附件描述。
数据构件:AADL模型所表达的系统转换而成的源代码和应用数据类型中将会使用的数据信息。
对应上述各阶段、各层次模型的映射模板都将通过Xtend文件描述,如下为映射示例:
系统映射规则:系统是一个综合体,它拥有过程组件、功能组件,也会具有属性、连接定义,每个系统映射规则就是按照合理的顺序将其它组件的信息传入它们对应的映射规则当中。其中过程组件拥有属于自己的文件夹、文件,函数功能组件拥有属于自己的文件,而其它组件或者定义的语义将会写入代表系统的文件夹中的系统头文件和函数文件中。
进程映射规则:AADL的进程组件语义几乎等同于操作系统资源的最少调度单位,正常情况下每个进程中都可以有多个线程,外部系统只关系进程,而不去管内部的线程。本工具面向的是应用于航天航空操作系统VxWorks,而该系统下,系统资源最小调用单元是一个TASK,最小执行单元也是TASK,因而我们将会根据系统属性做特定处理,一般情况下面向该系统平台的需求建模,AADL模型中每个进程下只有一个线程子构建。
功能映射规则:功能构件表达函数级别的语义,而AADL模型中表达过程语义的组件通常情况下为行为附件。其中主要应用于功能构件与线程构件中来表达函数功能过程。
属性映射规则:该规则完成模型求精添加语义的分析与转换,模型求精主要分为功能性求精、非功能性求精,因为是面向代码生成的求精,所以该工作主要针对功能性求精,当然非功能性求精也纳入了考虑范围。从面向构件的角度,模型求精主要面向几个构件,分别是系统构件、进程构件、数据构件、子程序构件。
链接处理与映射规则:AADL中的链接都是上层构件定义下一层构件的之间的连接关系,而从系统到进程再到线程到调用子函数,几乎每一层都有各自的头文件,所以AADL的链接都转换为当前层次构件的头文件内容,并在其对应函数文件中的初始化函数添加相应语句。
功能描述处理与映射规则:不管是线程组件中的过程还是函数功能组件中的函数,它们的语义都借助引用的AADL行为附件表示的状态机来表达。本工具将模拟行为附件状态机的动作,将其转换为语法合适、语义相近的C函数。
4)Xtend描述转换规则映射
转换规则主要分为九个部分:系统转换模板、进程转换模板、线程转换模板、函数转换模板、行为附件转换模板、数据构件转换模板、特性转换模板以及属性转换模板。
九个单独的转换规则模版又可以分为两类,组件生成模版以及元素模版,其中只有组件生成模版会主动生成对应文件,元素模版是对组件生成对应文件的补充。下面将会对九个模版中主要的几个模版进行说明:
其中,系统转换模版SystemTemplate.xtend,对应EMF中系统实例类(org.osate.aadl2),具体包括:SystemSubcomponent(系统构件接口)、getSystemSubcomponentType()获取系统构件类型、setSystemSubcomponentType(SystemSubcomponentType)设置系统构件类型,在本工具中并不会动态地改变模型,下面set~()方法将跳过、SystemImplementation(系统实例类)、name对应AADL中系统名、eContainer拥有该构建的上层构建且最外层是package、Features该系统构件所属的系统类型的所有接口特性、Subcomponents该构件的所有子构件、Connections该系统构件配置的所有链接。
其中,进程转换模版ProcessTemplate.xtend,对应EMF中过程实例类(org.osate.aadl2),具体包括:ProcessSubcomponent(过程构件接口)、getProcessSubcomponentType()获取过程子构件类型、ProcessImplementation(过程实现构件)、getOwnedDataSubcomponents获取过程构件拥有的数据子构件并在生成代码中对应着单独TASK的本地变量、getOwnedSubprogramSubcomponents获取过程构件的函数功能子构件且在生成代码中对应着一个可以随时被调用的函数、getOwnedThreadSubcomponents获取过程构件的线程子构件、getOwnedThreadGroupSubcomponents获取线程子构件组、getType获取类型。
其中,线程转换模版ThreadTemplate.xtend,对应EMF中线程实例类(org.osate.aadl2),具体包括:ThreadSubcomponent(线程构件接口)、ThreadClassifier(线程分类器)、ThreadImplementation(线程实现构件类)、Name线程名、getOwnedDataSubcomponents获取数据子构件、getOwnedSubprogramSubcomponents获取函数功能子构件。
其中,函数转换模版SubprogramTemplate.xtend,对应EMF中函数实例类(org.osate.aadl2),具体包括:CalledSubprogram被调用函数类是个抽象类、SubprogramImplementation函数实例类且用于存储所有函数功能内容。
其中,行为附件转换模版BaAnnexTemplate.xtend,具体包括:DefaultAnnexSubclauseImpl默认附件子句实现、BehaviorAnnexImpl行为附件子句实现类、AnnexTemplate附件模板类、AnnexSwitch4head生成附件过程的头内容、AnnexSwitch将抽象附件转换为确定的附件且本工具中只有具体处理行为附件、BaAnnexTemplate行为附件模板类。
其中,数据构件转换模板DataTemplate.xtend,对应EMF中函数实例类(org.osate.aadl2),具体包括:DataSubcomponent数据子构件接口、GetDataSubcomponentType()获取数据子构件类型、DataClassifier数据构件分类器、DataImplementation数据子构件实现类。
其中,特性转换模板FeatureTemplate.xtend属于元素模板,每个构件属于某个类型构件类型的实现之一,而每种构件类型都会具有一系列特性,是对外部可见的端口、特性。
其中,属性转换模板PropertyTemplate.xtend,不光处理参照AADL默认属性集添加的属性值,还会处理通过自定义属性集实现的模型求精后模型内添加的属性值。
AADL允许利用属性集引入附加的属性和属性类型。如果需要为AADL模型添加信息,并且尚未说明是当前预先说明的或用户定义的属性的话,通过引入附加属性集是有效的。从另外一个角度讲,就是为AADL引入了作为附件扩展的新的自语言,然后使用这种自语言去定义类似于分类符的集合的、可复用的符坚苦,并且通过附件分子句将自语言扩展与分类符联系起来。
属性转换模板PropertyTemplate.xtend,具体包括:PropertyAssociation属性集对象、Property属性对象、ModalPropertyValue属性值对象、PropertyExpression属性表达式抽象对象且对属性值实际表达、NamedValueImpl普通值变量对象、StringLiteralImpl字符串变量对象、ListValueImpl数组变量对象、getInclude(PropertyAssociationproperty)根据属性对象获取需要包含的文件、parseListValue(ListValueImpl value)顺序批量处理数组变量对象、parseNamedValue(AbstractNamedValue value)单独处理属性值、getPName(EList<PropertyAssociation>properties)获取平台系统名字标识、getDelay(SubprogramImplementation subpro)针对VxWorks平台相关属性WdDelay做特定延迟处理、isCalledByWd(SubprogramImplementation subpro)针对VxWorks平台相关属性wdStart做解析、isVxWorks(ProcessImplementation process)针对VxWorks平台相关属性VxWorks做解析。
5)借助AADL扩展语言描述模型求精规则
本发明的C代码自动生成方法需要面向航天应用的AADL模型求精的支持,这里求精通过AADL提供的扩展语言功能实现一个扩展的属性集。在属性集中可以定义新的属性、属性类型和属性常数。每个属性集均提供了一个单独的名称空间。属性集名称就是简单的标识符。利用上述的属性名称、属性类型名称或属性常数名称,就能够唯一地引用他们。必须包括属性集名称,即使在同一个属性集中已经说明了属性、属性类型或属性常数。可以省略OSATE提供的默认属性、属性类型、属性常数的属性集名称。
如果参考另外一个属性集中的内容,那就必须将它作为可利用with说明访问的属性集来说明。与之相似,如果属性定义引用了该软件包中的一个分类符,必须为with说明添加包名称。在应用属性集进行求精工作时,必须用软件包头部的with说明属性集名称。
基于AADL属性集的模型求精首先要有属性集模板。属性集模板可选的语法结构:
其中:
<property set or package name>为当前属性集模板可能会应用到的其它属性集模板
<property type declaration>属性类型
<property declaration>属性定义
<property constant declaration>属性常数
基于此属性集模板语法规则,设计并定义了一系列用以明确功能属性、非功能属性以及添加平台相关描述属性的面向航空航天模型求精属性集。
这个属性集是在文件nuaa_properties.aadl中单独定义的,在其他模型文件中使用只需要将该属性集模板文件添加入模型工程目录下,并在需要的文件头中声明withnuaa_properties.aadl即可。
该属性集的定义借助某个正规工程的需求与实例初步实现,自定义属性集中部分元素及其对应语义如下:
Condition:表示条件,转换的路径由当前满足的条件所决定,包括字符串case元素表示当前状态值,字符串val表示要求的值;
MethodCall:表示在某个执行过程中调用某个功能时额外添加的参数,包括字符串method表示额外调用的函数名,数组paras表示调用函数时传入的参数值;
VarAssign:表示在某个过程的初始化步骤中变量的初始化赋值,包括var表示变量名,val表示初始值;
RunValve:表示只有满足一组条件,某个过程才会执行,包括target表示该过程执行时的状态,数组conditions表示运行该过程需要满足的条件;
ResCheck:表示在执行一个功能行为后是否要进行检查操作,包括条件condition表示需要满足的条件,target检测的目标状态,数组g_value表示一组临时变量,call表示在检查中一组被调用的方法;
Operations:表示在某个状态下执行某个额外操作,包括目标target检测的目标状态,数组g_value表示一组临时变量,数组call表示在检查中一组被调用的方法;beforeProcess:表示在某个执行过程中的某个步骤之前额外执行某个操作,包括一个Operations数组,表示自定义的一组额外操作;
afterProcess:表示在某个执行过程中的某个步骤之后额外之行某个操作,包括一个Operations数组,表示自定义的一组额外操作;
platInfo:表示当前生成的代码要考虑某个平台相关的要素;
runvalve4BAaction:表执行某个步骤所要满足的条件;
sem4process:表示开始某个过程需要的信号量;
WdDelay:表示额外定义的延迟时间;
性能需求:性能需求主要分为时间性能和空间性能,可以用以来属性来表达:
时间性能:<TimeProperty>+<Num>+<Unit>,其中:
TimeProperty表示时间属性的对象,如周期、最坏执行时间等;
Num为具体数值;
Unit为时间单位;
时间属性主要描述为对功能构件的某一属性的数值描述,如某组件的周期为3ms,某组件的WCET为5ms等。
空间性能:<SpaceProperty>+<Num>+<Unit>,其中:
SpaceProperty表示空间属性的对象,如进程占用内存大小,存储器容量等;
Num为具体数值;
Unit为时间单位;
空间属性主要描述为对功能构件占用某些资源的数值描述,如某存储器的容量为2GB等。
其中,针对AADL中的各种模型构件,例如线程构件、进程构件、函数构件表达的含义,定义不同的模型求精规则,主要包括:
输入输出数据/事件:表示某个功能构件的输入输出端口,事件为某触发事件,如某标志位的置位事件,数据为具有某种数据结构的具体数据,如卫星控制中的喷气指令,事件/数据均为数据构件中定义的类型。
定义好面向航天航空属性集模板后,便可在构建好的AADL平台无关模型中添加无法在需求建模中添加的语义元素。面向属性集的代码生成的映射规则将会添加到PropertyTemplate.xtend中。在本工具中,主要处理AADL构件中的system构件、过程构件、函数构件、数据构件的特定平台相关的求精内容:
6)平台无关模型到平台相关可运行C代码的转换过程
平台无关模型到平台相关可运行C代码转换是基于模型求精和Xtend支持的模板方法实现的,平台无关模型到平台相关模型的转换将借助自定义属性集的手动填写实现,平台相关模型到可运行C代码转换借助基于Xtend开发的Eclipse插件实现,PIM到PSM的求精工作从模型的角度,分为平台相关模型求精、平台无关模型求精;从功能的角度,分为功能性求精、非功能性求精(面向代码生成的求精工作主要针对功能性求精,一些非功能性的求精工作可能交与代码生成工作完成);从面向构件的角度,分为行为系统求精、附件求精、线程求精、数据求精。
如图3所示,本代码生成工具的基础为OSATE插件工程,OSATE插件行为的类与配置文件位于cn.edu.nuaa.aadl2.generatorC.*和cn.edu.nuaa.aadl2.generatorC.actions.*位置处;在对aaxl2解析的过程中,借助OSATE自带的EMF框架生成的AADL解析工具包解析aaxl2文件并得到总系统的实例对象SytemImpletation,这些解析工具包位于org.osate.aadl2.*和org.osate.aadl2.impl.*位置处;代码生成流程的工作流控制类位于cn.edu.nuaa.aadl2.generatorC.workflow.*位置处;代码生成流程中调用的模板位于cn.edu.nuaa.aadl2.generatorC.template.*位置处,模板在生成代码过程中借助额外定义的工具类进行字符串处理和文字处理,这些工具类位于cn.edu.nuaa.aadl2.generatorC.utils.*位置处。
图5为生成C工程的流程示意图,在获得AADL平台相关模型后,借助OSATE平台对该模型的顶层系统进行实例化,得到代表该顶层系统的AAXL2文件,借助AAXL2文件和EMF代码解析得到SystemImpl对象。代码生成工具将借助Xtend转换模板通过对该SystemImpl对象进行子系统遍历、进程遍历、其他构件遍历三个步骤,生成AADL平台相关模型的对应C代码工程。
平台相关模型到可运行C代码转换是由cn.edu.nuaa.aadl2.generatorC.actions.GeneratorAction监听器方法实现转换的启动触发,进一步调用cn.edu.nuaa.aadl2.generatorC.actions.workflow.Generate的generate方法开始代码生成的主要流程,在流程中会迭代调用各个转换规则映射模板,如图4所示,SystemTemplate为系统转换规则映射模板,PreocessTemplate为进程转换规则映射模板,ThreadTemplate为线程转换规则映射模板,DataTemplate为数据转换规则映射模板,SubprogramTemplate为函数转换规则映射模板,PropertyTemplate为属性转换规则映射模板,ConnectionTemplate为连接转换规则映射模板;在模板被触发的过程中,可能会触发其他模板的生成行为,图4中为相互之间触发的关系。流程主要为四层:
第一层,从根据DataType.aadl中的数据构件构建一个C版本的数据构件,aadlboolean处理为c中的bool,aadlstring处理为char字符数组(长度255),aadlreal处理为float,aadlinteger处理为int类型。所有的data组件都会处理为对应的struct。
第二层,根据插件入口处传入的系统实例开始生成,如果不是系统实现的实例将会直接失败跳回。系统的构建模板是个闭包的模板,即系统下的子系统一样会处理到。每个系统都会生成其对应的文件夹,从属于该层的子构建对应的生成文件或文件夹将会放入该层的文件或文件夹。非子系统子构建将会进入下一层的代码生成过程,且只会生成文件而不再拥有其对应的文件夹。
第三层,在上层系统文件夹、系统头文件、系统初始化函数文件构建完成后,在第二层系统代码生成过程中如果遍历到非系统子构建,将会进入当前层次的构建。包括过程代码转换、线程过程转换、子函数代码转换、数据构件代码转换。
第四层,主要负责connection构件之间连接、Features特性、properties属性三个模型属性相关的内容生成。该层生成过程主要发生在每一层执行过程中遇到了connection、features、properties元素时。
生成文件的规则主要为:
规则1:每个系统都将拥有一个与其名称相同的文件夹,在文件夹中包括代表该系统的头文件以及函数文件。位于系统下的子系统的文件夹及其其它生成文件将会嵌套在上一层系统的文件夹中;
规则2:每个过程构建将会拥有一个与其名称相同的文件夹,和与其名称相同的头文件和函数文件,每个过程构建下面的线程子构件将会位于其文件夹中;
规则3:每个线程构建将会拥有一个与其名称相同的函数文件,并向其上层构件的头文件声明其函数文件中的函数。
规则4:每个函数构建将会拥有一个与其名称相同的函数文件,并向其上层构建的头文件中声明其函数文件中的函数。
Claims (8)
1.一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:包括以下步骤:
S1:定义不同的AADL模型求精规则,该模型求精规则包括平台无关和平台相关的求精内容,采用AADL语言提供的扩展自定义语言方法得到属性集模板,通过定义一个以明确功能属性、非功能属性以及添加平台相关描述属性的属性集,将模型属性集模板保存在该属性集中;借助属性集的手动填写实现在需求建模中添加语义元素,对AADL模型中构件的特定平台相关语义进行求精工作,得到AADL平台相关模型;
S2:定义AADL平台相关模型到可运行C代码的转换映射规则,该转换映射规则实现闭包,同时借助Xtend提供的模板功能表达该转换映射规则,将经过模型求精后的AADL平台相关模型与扁平化C代码结构进行对应;
S3:获得AADL平台相关模型后,借助OSATE平台对该模型的顶层系统进行实例化,得到代表该顶层系统的AAXL2文件,借助AAXL2文件和EMF代码解析得到SystemImpl对象,借助Xtend转换模板对该SystemImpl对象进行子系统遍历、进程遍历、其他构件遍历三个步骤,生成AADL平台相关模型的对应C代码工程;
所述S2中的转换映射规则包括系统转换模板、进程转换模板、线程转换模板、函数转换模板、行为附件转换模板、数据构件转换模板、特性转换模板以及属性转换模板;
其中,系统转换模板SystemTemplate.xtend,对应org.osate.aadl2 EMF中系统实例类位置,其具体包括:SystemSubcomponent 系统构件接口、getSystemSubcomponentType()获取系统构件类型、setSystemSubcomponentType(SystemSubcomponentType) 设置系统构件类型、SystemImplementation 系统实例类、name 对应AADL中系统名、eContainer 拥有该构建的上层构建且最外层是package、Features 该系统构件所属的系统类型的所有接口特性、Subcomponents 该构件的所有子构件、Connections 该系统构件配置的所有链接;
其中,进程转换模板ProcessTemplate.xtend,对应org.osate.aadl2 EMF中过程实例类位置,其具体包括:ProcessSubcomponent过程构件接口、getProcessSubcomponentType() 获取过程子构件类型、ProcessImplementation 过程实现构件、getOwnedDataSubcomponents 获取过程构件拥有的数据子构件且在生成代码中对应着单独TASK的本地变量、getOwnedSubprogramSubcomponents 获取过程构件的函数功能子构件且在生成代码中对应着一个可以随时被调用的函数、getOwnedThreadSubcomponents获取过程构件的线程子构件、getOwnedThreadGroupSubcomponents获取线程子构件组、getType获取类型;
其中,线程转换模板 ThreadTemplate.xtend对应org.osate.aadl2 EMF中线程实例类位置,具体包括:ThreadSubcomponent线程构件接口、ThreadClassifier 线程分类器、ThreadImplementation线程实现构件类、Name线程名、getOwnedDataSubcomponents 获取数据子构件、getOwnedSubprogramSubcomponents获取函数功能子构件;
其中,函数转换模板SubprogramTemplate.xtend对应org.osate.aadl2 EMF中函数实例类位置,具体包括:CalledSubprogram 被调用函数类、SubprogramImplementation 函数实例类用于存储所有函数功能内容;
其中,行为附件转换模版BaAnnexTemplate.xtend,包括:DefaultAnnexSubclauseImpl默认附件子句实现、BehaviorAnnexImpl 行为附件子句实现类、AnnexTemplate 附件模板类、AnnexSwitch4head 生成附件过程的头内容、AnnexSwitch 将抽象附件转换为确定的附件、BaAnnexTemplate 行为附件模板类;
其中,数据构件转换模板DataTemplate.xtend对应org.osate.aadl2 EMF中数据实例类位置,具体包括:DataSubcomponent 数据子构件接口、GetDataSubcomponentType() 获取数据子构件类型、DataClassifier 数据构件分类器、DataImplementation 数据子构件实现类;
其中,属性转换模板PropertyTemplate.xtend,包括:PropertyAssociation 属性集对象、Property 属性对象、ModalPropertyValue 属性值对象、PropertyExpression 属性表达式抽象对象且对属性值实际表达、NamedValueImpl 普通值变量对象、StringLiteralImpl字符串变量对象、ListValueImpl 数组变量对象、getInclude(PropertyAssociation property) 根据属性对象获取需要包含的文件、parseListValue(ListValueImpl value) 顺序批量处理数组变量对象、parseNamedValue(AbstractNamedValue value)单独处理属性值、getPName(EList<PropertyAssociation>properties)获取平台系统名字标识、getDelay(SubprogramImplementation subpro) 针对VxWorks平台相关属性WdDelay做特定延迟处理、isCalledByWd(SubprogramImplementation subpro) 针对VxWorks平台相关属性wdStart做解析、isVxWorks(ProcessImplementation process) 针对VxWorks平台相关属性VxWorks做解析。
2.根据权利要求1所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:在所述S1之前需借助EMF对AADL平台无关模型进行语义分析以及提取,将AADL平台无关模型转换为语义准确的Java类和允许查看和基于命令的模型编辑的适配器类。
3.根据权利要求1所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:所述S1中AADL模型中的构件包括航天领域应用系统涉及的system构件、过程构件、函数构件、数据构件。
4.根据权利要求1所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:所述属性集中可描述生成可运行C代码所必要的功能与平台相关语义。
5.根据权利要求1所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:S1中,在所述属性集中可定义新的属性、属性类型和属性常数,每个属性集均包括一个单独的名称空间,能够唯一被引用。
6.根据权利要求1所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:S1中,当由OSATE提供的默认属性、属性类型、属性常数的属性集,该属性集可省略属性集名称。
7.根据权利要求5所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:当一属性集参考另一个属性集中的内容,将该属性集作为可利用with说明访问的属性集来说明,在应用属性集进行求精工作时,用软件包头部的with说明属性集名称。
8. 根据权利要求1所述的一种面向航天应用的AADL模型求精及其支持的C代码自动生成方法,其特征在于:所述属性集模板的语法结构为:
Property set <property set name> is
[with <property set or package name>]
<property type declaration>
<property declaration>
<property constant declaration>
End <property set name>;
其中:
<property set or package name> 为当前属性集模版可能会应用到的其它属性集模板;
<property type declaration> 为属性类型;
<property declaration> 为属性定义;
<property constant declaration> 为属性常数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811224473.4A CN109558117B (zh) | 2018-10-19 | 2018-10-19 | 面向航天应用的aadl模型求精及其支持的c代码自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811224473.4A CN109558117B (zh) | 2018-10-19 | 2018-10-19 | 面向航天应用的aadl模型求精及其支持的c代码自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109558117A CN109558117A (zh) | 2019-04-02 |
CN109558117B true CN109558117B (zh) | 2021-09-17 |
Family
ID=65865022
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811224473.4A Active CN109558117B (zh) | 2018-10-19 | 2018-10-19 | 面向航天应用的aadl模型求精及其支持的c代码自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109558117B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262794B (zh) * | 2019-06-03 | 2021-10-19 | 南京航空航天大学 | 一种基于规范与描述语言的aadl功能行为拓展方法及工具 |
CN110262374B (zh) * | 2019-06-18 | 2021-06-08 | 北京金自天正智能控制股份有限公司 | 一种轧钢过程控制系统的开发平台 |
CN112114801B (zh) * | 2020-09-02 | 2021-11-16 | 南京航空航天大学 | 一种面向ima的aadl多范式建模及自动生成c代码的方法 |
CN112463628B (zh) * | 2020-12-11 | 2022-03-29 | 北京航空航天大学 | 一种基于模型基框架的自主无人系统软件自适应演化方法 |
CN113626026B (zh) * | 2021-07-21 | 2024-06-28 | 北京理工大学 | 一种支持复杂模型结构转换的代码生成方法 |
CN116166412A (zh) * | 2021-11-25 | 2023-05-26 | 中兴通讯股份有限公司 | 系统资源分配代码的生成方法、装置、电子设备和介质 |
CN116048518B (zh) * | 2022-11-14 | 2023-12-01 | 南京航空航天大学 | 一种面向天脉操作系统的综合化航空电子系统安全代码自动生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140019943A1 (en) * | 2012-07-10 | 2014-01-16 | Honeywell International Inc. | Systems and methods for verifying expression folding |
CN104932905A (zh) * | 2015-07-14 | 2015-09-23 | 北京神舟航天软件技术有限公司 | 一种aadl到c语言的代码自动生成方法 |
-
2018
- 2018-10-19 CN CN201811224473.4A patent/CN109558117B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140019943A1 (en) * | 2012-07-10 | 2014-01-16 | Honeywell International Inc. | Systems and methods for verifying expression folding |
CN104932905A (zh) * | 2015-07-14 | 2015-09-23 | 北京神舟航天软件技术有限公司 | 一种aadl到c语言的代码自动生成方法 |
Non-Patent Citations (1)
Title |
---|
模型驱动的综合航电系统配置信息的分析与验证方法研究;袁翔;《中国优秀硕士学位论文全文数据库工程科技II辑》;20150115(第1期);第C031-115页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109558117A (zh) | 2019-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109558117B (zh) | 面向航天应用的aadl模型求精及其支持的c代码自动生成方法 | |
US8745584B2 (en) | Dependency injection by static code generation | |
US9311057B2 (en) | Action languages for unified modeling language model | |
Jézéquel et al. | Model driven language engineering with kermeta | |
US9952837B1 (en) | Reusable component in a modeling environment | |
CN110597498B (zh) | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 | |
CN108196827B (zh) | 非形式化需求规约模板到形式化设计模型的自动转换方法 | |
Gilles et al. | Expressing and enforcing user-defined constraints of AADL models | |
CN112114801B (zh) | 一种面向ima的aadl多范式建模及自动生成c代码的方法 | |
Passarini et al. | Cyber-physical systems design: transition from functional to architectural models | |
CN116048518B (zh) | 一种面向天脉操作系统的综合化航空电子系统安全代码自动生成方法 | |
Damiani et al. | A core calculus for dynamic delta-oriented programming | |
KR20090099977A (ko) | 예약된 컴포넌트 컨테이너 기반 소프트웨어 개발 방법 및장치 | |
CN113342399B (zh) | 应用项目的结构配置方法、装置及可读存储介质 | |
Schröpfer et al. | A Generic Projectional Editor for EMF Models. | |
Barroca et al. | Integrating a neutral action language in a devs modelling environment | |
Insaurralde et al. | System requirements in industrial automation | |
Hou et al. | Towards specifying constraints for object-oriented frameworks | |
Cavarra et al. | A framework to simulate UML models: moving from a semi-formal to a formal environment | |
Annighöfer et al. | Eclipse framework for an integrated ima tool chain | |
Oliveira et al. | A domain specific language for automotive systems integration | |
Zanon | The SimTG simulation modeling framework a domain specific language for space simulation | |
Paige et al. | Model management in the wild | |
Jörges et al. | Building code generators with Genesys: a tutorial introduction | |
O’Mullane et al. | Java coding standard and guidelines for dpac |
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 |