CN110597498A - AADL模型精化方法及其支持的Ada可执行代码自动生成方法 - Google Patents
AADL模型精化方法及其支持的Ada可执行代码自动生成方法 Download PDFInfo
- Publication number
- CN110597498A CN110597498A CN201910158762.7A CN201910158762A CN110597498A CN 110597498 A CN110597498 A CN 110597498A CN 201910158762 A CN201910158762 A CN 201910158762A CN 110597498 A CN110597498 A CN 110597498A
- Authority
- CN
- China
- Prior art keywords
- thread
- template
- aadl
- model
- deal
- 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.)
- Granted
Links
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
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种AADL模型精化方法及其支持的Ada可执行代码自动生成方法,本发明使用基于OSATE提供的AADL文件解析能力来对已有的AADL模型进行解析,并且通过模型精化的方法来对AADL模型进行功能行为简化以及其执行平台的相关信息补充,使其足够完备,同时借助Xtext技术提供的自动生成代码的能力,以及Xtend技术提供的模板规则映射功能来实现AADL的系统构件、进程和线程构件、行为附件和模式等模型到Ada代码的转换,使其代码能够在特定的平台上运行,以此来完成基于AADL开源工具环境OSATE的Eclipse平台插件。
Description
技术领域
本发明涉及基于AADL功能需求模型进行Ada可执行代码的自动生成技术领域,具体涉及一种面向航天控制系统的AADL模型精化及其支持的Ada可执行代码的自动生成方法。
背景技术
安全关键实时系统广泛应用于航空电子、航天器、武器装备、核能、汽车控制等关键信息领域。安全关键实时系统是应用软件、实时操作系统或实时中间件以及硬件平台深度融合的复杂系统,其系统行为不仅依赖于软、硬件体系结构,还受到运行时环境(即实时操作系统或实时中间件)的影响。安全关键软件是安全关键实时系统中的重要组成部分,安全关键软件的质量直接影响到安全关键实时系统的质量。本质上,安全关键软件的设计与开发过程和其它软件系统基本一致,都包括需求分析、设计、实现等几个典型阶段。
模型驱动工程可以用于有性能和可靠性需求的嵌入式系统的开发。模型驱动工程包括建模和模型转换,这个过程贯穿着系统的声明周期。但是到现在,很少有工作评估基于模型的性能评估早期集成,主要原因在于初始模型的语义过少,无法进行早期设计阶段分析。而且借助语义不完整的早期模型,也无法转换出功能保持需求语义的可运行代码。
CPS是一个在环境感应的基础上,深度融合了计算,通信和控制能力的可控可信可扩展的网络化物理设备系统。他通过计算进程和物理进程相互影响的反馈循环实现深度融合和实时交互来增加或扩展新的功能,以安全,可靠,高效和实时的方式检测或者控制一个物理实体,CPS的目标是实现信息世界和物理世界的完全融合。构建一个可控可信可扩展的并且安全的CPS网络。CPS的特点有紧密融合,资源受限,网络复杂,认知困难,时空约束,不确定性,安全可靠性。正因为CPS是异构平台的,所以求精是为了支持选择不同的平台和分析方法,并生成不同平台的可执行的代码。
复杂嵌入式实时系统的体系结构设计与分析语言标准——AADL(ArchitectureAnalysis and Design Language,AADL)是由美国汽车工程师协会SAE在MetaH、UML、HOOD的基础上,于2004年提出的一种嵌入式系统体系结构分析与设计语言,并发布为SAE AS5506标准。目的是提供一种标准而又足够精确的方式,设计与分析嵌入式系统的软、硬件体系结构及功能与非功能性质,采用单一模型支持多种分析的方式,将系统设计、分析、验证、自动代码生成等关键环节融合于统一框架之下。AADL具有语法简单、功能强大、可扩展的优点,具有广阔的应用前景,得到了欧美工业界,特别是航空航天领域的支持。
已有的模型求精工具RAMSES几乎是为了使生成的代码和模型分析保持一致才去进行AADL模型到AADL精化模型的转换,而该转换是基于已有的模型到代码的规则反推出的模型转换。
发明内容
发明目的:为解决模型驱动工程现有技术中存在的生成的并不是平台可执行代码,本发明的一种面向航天控制系统的AADL模型精化及其支持的Ada代码自动生成方法,通过对AADL功能模型的状态简化,然后使用AADL自身提供的自定义属性集的功能扩展模型的平台相关信息,以缩小模型和平台执行模型的语义差距,提高验证的有效度,并自动生成可执行的Ada代码。
本发明公开了一种面向航天控制系统的AADL模型精化方法,包括以下步骤:
步骤1:建立面向特定平台的属性集模板,通过基于AADL模型中的自定义属性集对属性集模板进行扩展;
步骤2:添加面向特定平台的语义到属性集,得到已添加的特定平台语义的属性集;
步骤3:建立属性集存储库,存储已添加的特定平台语义的属性集,所述属性集存储库以属性集的名称作为唯一标识进行检索;
步骤4:根据特定平台信息,检索存储库,匹配得到对应的属性集,若不存在匹配的属性集则自定义添加,得到精化后AADL平台特定模型。
进一步的,所述属性集包括属性类型、属性常量和独立的命名空间。
进一步的,使用AADL提供的with说明访问方法来完成所述属性集与属性集之间的属性继承或部分与。
进一步的,使用AADL提供的with方法来说明属性集的名称以达到属性集的扩充。
进一步的,所述属性集模板的结构如下:
Property set<property set name>is
[with<property set name or package name(s)>]
Periodic_value:enumeration(periodic,aperiodic);
Communication_mechanism:aadlstring;
Communication_Type:enumeration(Thread-Thread,Thread-Device,Thread-Process,Process-Thread,Device-Thread);
Input:list of aadlstring;
Output:list of aadlstring;
Delay:aadlreal;
Called_By:list of aadlstring;
End<property set name>;
其中:
<property set name>为当前属性集模板的名字;
<property set name or package name(s)>为当前属性集可能参照的别的属性集模板;
Periodic_value描述当前的周期性质;
Communication_mechanism用于描述通信机制;
Communication_Type用于描述连接之间的类型;
Input和Output描述了当前调用所需要的输入变量和输出变量;
Delay描述了当前运行的延时时间;
Called_By用于描述当前平台所需要的调用的平台函数名称。
本发明还公开了一种AADL模型自动生成Ada代码的方法,包括以下步骤:
S1:添加不同特定平台的平台信息至属性集,完成对AADL模型的精化,得到AADL平台特定模型;
S2:借助OSATE对AADL平台特定模型进行实例化,得到代表该顶层系统的AAXL2文件,借助AAXL2文件得到SystemImpl对象;
S3:借助EMF对AAXL2文件和SystemImpl对象分析,将其转化为语义准确的Java中间模型和允许查看和基于命令的模型编辑的适配器的中间模型;
S4:定义S3中的中间模型到可执行Ada代码的转换映射规则,借助Xtend提供的模板功能表达所述转换映射规则得到Xtend转换模板,该转换映射规则实现闭包,该转换映射规则包括功能映射规则和平台特性映射规则;
S5:借助S4中的Xtend转换模板对S3中的中间模型进行子系统遍历、进程遍历、行为附件和其他构件遍历;
S6:生成AADL平台相关模型的对应Ada代码。
进一步的,所述S2中的转换映射规则包括系统转换模板、进程转换模板、线程转换模板、函数转换模板、行为附件转换模板、数据构件转换模板、特性转换模板、属性转换模板、模式模板和连接模板;
系统转换模板GenerateAda.xtend
EMF中系统实例类org.osate.aadl2
SystemSubcomponent线程构件接口
SystemClassifier线程分类器
SystemImplementation线程实现构件类
SystemName线程名
generateSystem处理系统实现组件
genSystemProcedure生成系统主过程
dealSystemMode根据系统所处的不同模式调用该模式下的进程子组件
dealProcedureCall当系统没有模式变换时调用进程子组件
genSystemFeature处理系统类型声明中的功能特性
genSystemProcedure生成系统主过程
getsProcesscomponent获过程构件
genSystemDataSubcomponent处理系统实现下的数据子组件
genSystemProcessSubcomponent处理系统实现下的进程子组件
genSystemSubprogramSubcomponent处理系统下的子进程的子组件
过程转换模板ProcessTemplateAda.xtend
EMF中系统实例类org.osate.aadl2
ProcessSubcomponent线程构件接口
ProcessClassifier线程分类器
ProcessImplementation线程实现构件类
ProcessName线程名
genSystemProcessSubcomponent处理系统实现下的进程子组件
getProcessSubcomponent获取进程子组件
getSystemName获取系统名称
getProcessSubcomponent获取进程子构件
generateProcess生成进程的过程
dealProcessMode根据进程所处的不同模式调用该模式下的子组件
dealTaskCall当进程没有模式变换时调用进程下的子组件
线程转换模板ThreadTemplateAda.xtend
EMF中线程实例类org.osate.aadl2
ThreadSubcomponent线程构件接口
ThreadClassifier线程分类器
ThreadImplementation线程实现构件类
ThreadName线程名
genProcessThreadSubcomponent处理进程实现下的线程子组件
head处理线程中的头文件
template处理线程的具体实现
genThreadPortVar将线程类型声明中的out和in out端口生成为进程中的变量
genThreadAccessVar生成线程类型的访问类型的变量
getPeriod得到周期性线程的周期
dealPrppertyExpression处理属性表达式
函数转换模板SubprogramTemplateAda.xtend
EMF中函数实例类org.osate.aadl2
GenSystemSubprogramSubcomponent生成函数构件
template4Adb为函数构件生成adb文件
template4Ads为函数构件生成ads文件
函数类型转换模板SubprogramTypeTemplateAda.xtend
Create生成函数类型文件
templateAds为函数文件写入基本的Ada代码框架
函数实现的模板SubprogramImplementationTemplateAda.xtend
templateAds实现函数的Ada代码。
genBehaviorAnnexVarible生成函数中的行为附件所使用的变量声明
genBehaviorAnnexState生成函数中的行为附件状态
genBehaviorAnnexTransition生成函数中的行为附件的转换
行为附件转换模板AnnexSubclauseTemplateAda.xtend
genBehaviorAnnexVarible生成行为附件所用到的变量声明
genBehaviorAnnexState生成行为附件的状态
genBehaviorAnnexTransition生成行为附件的一些转换
initBehaviorAnnexState初始化行为附件的状态
dealInitState处理整型的状态的改变
dealBehaviorAnnexVariable处理行为附件的变量改变
dealBehaviorAnnexState处理行为附加的状态改变
dealBehaviorAnnexTransition处理行为附件的一些转换的变化
dealBehaviorAnnexTransitionAction处理行为附件的转换的动作
dealActionTimeOut处理动作的延时
dealActionElement处理动作的元素
initBehaviorAnnexTransitionConditon初始化行为附件的转换情况
dealDispatchCondition处理调度的情况
dealValueExpression处理值得表达式
数据构件转换模板DataTemplateAda.xtend
EMF中函数实例类org.osate.aadl2
genSystemDataSubcomponent处理系统实现下的数据子组件
genProcessDataSubcomponent处理进程实现下的数据子组件
genDataType处理publicSection中的所有数据实现类型
dealDataComponent处理data implementation对象
getAllDataImplementation获得publicSection下的所有Data Implementation对象
特性转换模板FeatureTemplateAda.xtend
genProcessFeature处理进程类型声明中的features
getConnection得到和子线程对应端口连接的连接对象
genThreadFeatureVarInProc将线程的out和in out端口生成为进程中的变量
genThreadInPortVar处理线程类型声明中的输入输出端口,生成线程内的局部变量
initThreadInPortVar在线程的entry函数中初始化输入端口生成的局部变量
组件之间的链接模板ConnectionTemplateAda.xtend
genConnectionVar当连接是组件内的两个子组件之间的连接时生成连接变量
genProtectType当连接是进程内的两个线程之间的端口或者是进程和线程之间的端口交互时生成保护类型
dealPortConType处理进程中的端口连接,生成对应的保护类型
genProtectObject当连接是进程内的两个线程之间的端口或者是进程和线程之间的端口交互时生成保护类型对象
genConParam根据组件之间的连接关系生成过程调用时的实参和形参的传递关系
dealConParamOneContext处理当前组件端口和子组件端口之间的连接对应的参数传递关系
dealConParamTwoContext处理两个子组件之间的连接对应的参数传递关系
dealPortConVar处理端口连接生成变量
dealAccessConVar处理访问连接生成变量
dealDataAccessVar处理数据访问连接生成变量
dealConnectionEndType处理连接中端口或者数据访问的类型
genThreadConParam根据进程中的连接关系生成线程端口和保护对象的传递关系
属性转换模板PropertyAdaTemplate.xtend
PropertySets属性集对象
Property属性对象
ModalPropertyValue属性值对象
PropertyExpression属性表达式抽象对象,对属性值实际表达
NamedValueImpl普通值变量对象
StringLiteralImpl字符串变量对象
ListValueImpl数组变量对象
getInclude(PropertyAssociation property)根据属性对象获取需要包含的文件
getPeriodic(StringLiteralImpl value)获取周期性质。
get Communication_mechanism(StringLiteralImpl value)获取通信机制名称。
get Communication_Type(StringLiteralImpl value)获取通信的类型。
get Input(ListValueImpl value)获取调用所需要的输入变量
getOutput(ListValueImpl value)获取调用所需要的输出变量
getCalled_By(StringLiteralImpl value)获取需要调用的函数
parseCalled_By(ListValueImpl value)处理当前需要调用的函数
parseListValue(ListValueImpl value)顺序批量处理数组变量对象
parseNamedValue(AbstractNamedValue value)单独处理属性值
parseDelay(SubprogramImplementation subpro)做延迟处理。
进一步的,所述S3中,在对行为附件进行遍历时,对进行语义分析与提取后的AADL平台特定模型中的行为附件的状态进行简化转换,具体为:将每个行为附件的状态封装成黑盒模式,给其一个入口和一个出口,黑盒内部为行为附件转换模板,进行转换时,从入口进入,通过转换得到新的行为附件的状态作为输出。
进一步的,所述属性集中描述有生成可执行Ada代码所必要的特定平台相关信息及其描述语义。
本发明的一种面向航天控制系统的AADL模型精化方法,定义了一套模型精化规则,该精化规则通过对AADL建模语言建立的功能模型先对状态进行简化,然后通过AADL自身提供的扩展自定义属性集的功能来增加模型对执行平台的相关属性的描述信息,通过定义一个以明确功能属性、非功能属性以及添加平台相关描述属性的属性集,并通过手工添加相应的平台信息,并将它存入存储库中,以便于自动精化,通过这种方式将模型尽可能的趋近与平台执行模型,能有效提高验证的有效性,然后用该模型自动生成代码。所描述的属性集是可以定义新的属性以及属性的类型和属性的常量,每一个属性集都会有一个独立的命名空间,它是唯一的。如果当前的属性集是继承或部分与另外一个属性集的属性时,可以在当前属性集中使用with的说明访问的方法来说明,在属性集建立的工作时,用软件头文件的with说明属性集的名称。
有益效果:本发明主要研究了从AADL功能模型到可执行Ada代码的生成规则、方法和工具,优点在于使建立的模型更加接近于平台执行模型,提高了模型验证的有效性,并且提供了模型到代码的自动转换工具,减少了人工带来的错误,大大降低了开发时间,有效的提高了工程的开发效率。目前主要基于AADL模型生成代码的工具包括Ocarina,STOOD等工具,STOOD主要是针对功能型代码,生成的代码并不能直接用在执行平台上,而Ocariana具有单一性,它正对ARINC653操作系统生成代码,不具有可扩展性,这些代码都无法满足VxWorks系统平台和无操作系统的平台代码生成,进一步的丰富了AADL模型到可执行Ada代码的转换工具。
附图说明
图1:本发明的模块化体系结构;
图2:Xtend描述转换规则;
图3:AADL模型的精化和Ada代码生成整体过程示意图;
图4:工具设计Java包间结构关系图;
图5:行为附件功能图
图6:精化后的行为附件图
图7:生成Ada工程流程示意图。
具体实施方式
下面结合附图进一步阐述该发明方法。
本发明涉及到一种面向航天控制系统的AADL模型精化方法及其支持的可执行Ada代码自动生成方法及相应的工具实现,该工具是基于AADL开源工具环境OSATE使用Eclipse插件开发技术实现的,通过用户提供初步功能模型并通过引导用户对平台相关的信息添加或选择进行精化,然后再对平台特定模型进行实例化再将实例化模型生成代码,后台将实现AADL功能模型PSM到可执行、平台特定Ada代码的自动生成。为了满足模型是在之星平台上是可运行的,添加的特定平台的精化应该尽可能的精要。
1)工具总体概述
该AADL模型精化及其支持可运行的Ada代码自动生成工具,基于AADL扩展语言的能力实现模型精化,并基于EMF和Xtend技术实现AADL模型到Ada代码的转换。综上,该面向航天控制系统的AADL模型精化及其支持的可运行Ada代码自动生成方法分为半自动模型精化和自动的代码生成两个步骤,详见图1。我们采用基于EMF的MDA模型解析技术设计由AADL模型到Ada代码的转换规则,转换映射规则部分元模型详见图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模型中的自定义数据构件转换为由Ada代码文件表达的数据构件:在建模阶段,数据构件通常用于描述存储在需求中用到的所有数据形式,包括系统中的全局变量等静态数据、系统内交互用到的动态数据、系统内数据存储单元的数据描述等。对单个数据的描述映射规则将会根据Ada代码的语法规则与风格对数据的名称、来源地、目的地、数据类型、描述进行合理的表达。定义名字转换模板:在数据构件所引用的领域词库中包括着用于描述在需求中用到的领域名词,包括系统/子系统/功能/子功能的名字、需求描述中模式的名字、整个系统中出现的硬件的名字等,相应的名字字符串处理模块将会进行从AADL风格命名到Ada代码风格命名的统一转换。
定义从AADL结构化模型到扁平化Ada代码的转换映射规则,映射规则实现闭包:
AADL功能模型尚且无法满足生成可执行的Ada代码的条件,需要通过特定的模型精化过程添加特定平台信息以及相关的语义等等。进一步地,由AADL表达的模型结构是层次化地,为了使精化后的AADL平台特定模型生成可执行的Ada代码,需要对模型进行扁平化处理。在AADL模型中,主要层次构成分为系统、进程、线程、子程序、BA行为附件、数据构件模块。AADL中构件的表达分为两个部分:类型和实现。一个构件拥有一个类型以及对应的0个、1个或多个实现。构件类型描述对外的功能接口,例如输入输出端口,在我们的工具中这些端口都将会映射为不同作用域下的变量。每个构件都或多或少的会被属于自己的构件特征、连接、流、构件属性、模式、扩展附件所描述。
现对AADL模型中的主要层次做进一步解释说明:
系统构件:系统构件是一个实际系统的抽象模拟,它有着清晰的层次结构来反映实际系统的层次结构。系统能够包括软件、执行平台和系统构件的各式各样的组合。
线程构件:线程构件表示进程中的一个线程,一个进程中可以有多个线程,这些线程并发执行,线程通过端口来和其他组件之间进行交互;
进程构件:进程构件表示系统中的一个进程,进程有独立的地址空间,进程之间通过端口来进行交互;
子程序构件:子程序构件表示顺序执行代码的可调度单元,子程序可以被线程或者子程序调用;
数据构件:AADL模型所表达的系统转换而成的源代码和应用数据类型中将会使用的数据信息。
对应上述各阶段、各层次模型的映射模板都将通过Xtend文件描述,如下为映射示例:
系统构件的转换规则:AADL语言的系统构件的声明包含类型声明和实现声明,系统构件中可以包含进程构件和数据构件等软件构件以及处理器、存储器等硬件构件,我们只考虑软件构件到Ada代码的转换。
系统构件的特征:描述了一个系统的接口,系统特征主要在系统类型声明中声明,主要包括输入输出端口,所有的特征对应为全局变量,特征全局变量定义在程序包中。
进程子构件:描述了系统下的一个进程,一个系统可以有多个进程子构件,每个进程子构件都是已经声明的进程实现类型的一个实例,子构件的声明主要在系统实现声明中。
数据子构件:描述了系统下的全局数据。
进程构件:进程构件的声明包括类型声明和实现声明,进程构件中可以包含线程构件和数据构件。
进程构件的特征:描述了进程的接口,特征声明主要在类型声明中,每个特征可以是数据访问或者端口,端口分为事件、数据或者事件数据端口[24],端口模式分为in、out或者in out模式。
进程构件的线程子构件:一个进程下可以有多个线程,多个线程之间并发执行;每个线程子构件都是一个已经声明的线程实现的实例。
进程构件的数据子构件:进程中的数据子构件描述了进程过程下的局部变量。
进程构件的连接:进程中的连接描述了进程中两个线程之间的交互、线程和进程端口之间的交互以及线程和进程中数据对象之间的交互;连接包括数据访问连接和端口连接,这里只对端口连接进行处理。进程构件的连接的描述如下(进程的端口p1(源端口)和线程的端口p1(目的端口)之间建立连接交互)。
线程构件:线程构件的声明包含类型声明和实现声明,线程构件的实现声明通常被实例化为进程中的线程子构件。
线程构件的特征:线程构件的特征可以是数据访问或者端口,端口分为事件、数据或者事件数据端口。
周期性线程:AADL中的线程构件通过在线程类型声明中的属性来指定线程的属性,包括周期性线程(periodic)、非周期性线(aperiodic)程和偶发线程(sporadic)等;周期性线程是按时间周期来触发的线程,每当时间到达下一个周期时就触发线程执行[25];偶发线程和非周期性线程只执行一次就结束。周期性线程的描述如下(period表示周期时间)。
数据构件:AADL的数据构件定义了数据类型,数据构件的声明包含类型声明和实现声明;数据构件中可以包括属性、子构件等,为了方便处理,需要对数据构件做一些限制,每个数据构件必须有一个实现声明,一个数据构件必须包含一个或者多个数据子构件,数据构件中不能包含子程序子构件。
行为附件的映射规则:AADL的行为附件主要通过状态转移的方式来表达系统中的行为,它将线程或者进程的动作描述为自动机的形式。状态转换系统的转换将行为指定为当前状态从源状态到目的状态的更改。条件决定了一个转换是否发生,当条件判定为真时动作才会发生。AADL行为附件的语法很庞大,本发明只研究了行为附件的一个子集,本文只考虑了行为附件中的variables、states和transitions三个部分。本发明也只对进程和线程中的行为附件做了转换;
模式的映射规则:AADL中的模式描述了系统的动态体系结构,模式可以被声明在系统构件、进程构件和线程构件中,一个构件中可以有多种模式,不同模式下构件的执行逻辑也不同,同一时刻只能有一种模式处于激活状态。构件的输入事件端口可以触发模式转换。本文只研究了系统和进程中的模式。
4)Xtend描述转换规则映射
转换规则主要分为个部分:系统转换模板、进程转换模板、线程转换模板、函数转换模板、行为附件转换模板、数据构件转换模板、特性转换模板以及属性转换模板。
八个单独的转换规则模版又可以分为两类,组件生成模版以及元素模版,其中只有组件生成模版会主动生成对应文件,元素模版是对组件生成对应文件的补充。下面将会对九个模版中主要的几个模版进行说明:
系统转换模版GenerateAda.xtend
EMF中系统实例类(org.osate.aadl2)
SystemSubcomponent(线程构件接口)
SystemClassifier(线程分类器)
SystemImplementation(线程实现构件类)
SystemName线程名
generateSystem处理系统实现组件
genSystemProcedure生成系统主过程
dealSystemMode根据系统所处的不同模式调用该模式下的进程子组件
dealProcedureCall当系统没有模式变换时调用进程子组件
genSystemFeature处理系统类型声明中的功能特性
genSystemProcedure生成系统主过程
getsProcesscomponent获过程构件
genSystemDataSubcomponent处理系统实现下的数据子组件
genSystemProcessSubcomponent处理系统实现下的进程子组件
genSystemSubprogramSubcomponent处理系统下的子进程的子组件
过程转换模板ProcessTemplateAda.xtend
EMF中系统实例类(org.osate.aadl2)
ProcessSubcomponent(线程构件接口)
ProcessClassifier(线程分类器)
ProcessImplementation(线程实现构件类)
ProcessName线程名
genSystemProcessSubcomponent处理系统实现下的进程子组件
getProcessSubcomponent获取进程子组件
getSystemName获取系统名称
getProcessSubcomponent获取进程子构件
generateProcess生成进程的过程
dealProcessMode根据进程所处的不同模式调用该模式下的子组件
dealTaskCall当进程没有模式变换时调用进程下的子组件
线程转换模版ThreadTemplateAda.xtend
EMF中线程实例类(org.osate.aadl2)
ThreadSubcomponent(线程构件接口)
ThreadClassifier(线程分类器)
ThreadImplementation(线程实现构件类)
ThreadName线程名
genProcessThreadSubcomponent处理进程实现下的线程子组件
head处理线程中的头文件
template处理线程的具体实现
genThreadPortVar将线程类型声明中的out和in out端口生成为进程中的变量
genThreadAccessVar生成线程类型的访问类型的变量(进程中的所有子线程的访问类型)
getPeriod得到周期性线程的周期
dealPrppertyExpression处理属性表达式
函数转换模版SubprogramTemplateAda.xtend
EMF中函数实例类(org.osate.aadl2)
GenSystemSubprogramSubcomponent生成函数构件
template4Adb为函数构件生成adb文件
template4Ads为函数构件生成ads文件
函数类型转换模板SubprogramTypeTemplateAda.xtend
Create生成函数类型文件
templateAds为函数文件写入基本的Ada代码框架
函数实现的模板SubprogramImplementationTemplateAda.xtend
templateAds实现函数的Ada代码。
genBehaviorAnnexVarible生成函数中的行为附件所使用的变量声明
genBehaviorAnnexState生成函数中的行为附件状态
genBehaviorAnnexTransition生成函数中的行为附件的转换
行为附件转换模版AnnexSubclauseTemplateAda.xtend
genBehaviorAnnexVarible生成行为附件所用到的变量声明
genBehaviorAnnexState生成行为附件的状态
genBehaviorAnnexTransition生成行为附件的一些转换
initBehaviorAnnexState初始化行为附件的状态
dealInitState处理整型的状态的改变
dealBehaviorAnnexVariable处理行为附件的变量改变
dealBehaviorAnnexState处理行为附加你的状态改变
dealBehaviorAnnexTransition处理行为附件的一些转换的变化
dealBehaviorAnnexTransitionAction处理行为附件的转换的动作
dealActionTimeOut处理动作的延时
dealActionElement处理动作的元素
initBehaviorAnnexTransitionConditon初始化行为附件的转换情况
dealDispatchCondition处理调度的情况
dealValueExpression处理值得表达式
数据构件转换模板DataTemplateAda.xtend
EMF中函数实例类(org.osate.aadl2)
genSystemDataSubcomponent处理系统实现下的数据子组件
genProcessDataSubcomponent处理进程实现下的数据子组件
genDataType处理publicSection中的所有数据实现类型
dealDataComponent处理data implementation对象
getAllDataImplementation获得publicSection下的所有Data Implementation对象
特性转换模板FeatureTemplateAda.xtend
genProcessFeature处理进程类型声明中的features
getConnection得到和子线程对应端口连接的连接对象
genThreadFeatureVarInProc将线程的out和in out端口生成为进程中的变量
genThreadInPortVar处理线程类型声明中的输入输出端口,生成线程内的局部变量
initThreadInPortVar在线程的entry函数中初始化输入端口生成的局部变量
组件之间的链接模板ConnectionTemplateAda.xtend
genConnectionVar生成连接变量(当连接是组件内的两个子组件之间的连接时)
genProtectType生成保护类型(当连接是进程内的两个线程之间的端口或者是进程和线程之间的端口交互时)
dealPortConType处理进程中的端口连接,生成对应的保护类型
genProtectObject生成保护类型对象(当连接是进程内的两个线程之间的端口或者是进程和线程之间的端口交互时)
genConParam根据组件之间的连接关系生成过程调用时的实参和形参的传递关系
dealConParamOneContext处理当前组件端口和子组件端口之间的连接对应的参数传递关系
dealConParamTwoContext处理两个子组件之间的连接对应的参数传递关系
dealPortConVar处理端口连接生成变量
dealAccessConVar处理访问连接生成变量
dealDataAccessVar处理数据访问连接生成变量
dealConnectionEndType处理连接中端口或者数据访问的类型(如果未指定变量类型,默认为Boolean)
genThreadConParam根据进程中的连接关系生成线程端口和保护对象的传递关系
属性转换模板PropertyAdaTemplate.xtend
通过自定义扩展AADL属性集模板,根据AADL构件的功能分类,定义特定平台所需要的相关信息属性。
AADL允许利用属性集引入附加的属性和属性类型。如果需要为AADL模型添加信息,并且尚未说明是当前预先说明的或用户定义的属性的话,通过引入附加属性集是有效的。从另外一个角度讲,就是为AADL引入了作为附件扩展的新的自语言,然后使用这种自语言去定义类似于分类符的集合的、可复用的符坚苦,并且通过附件分子句将自语言扩展与分类符联系起来。
PropertySets属性集对象
Property属性对象
ModalPropertyValue属性值对象
PropertyExpression属性表达式抽象对象,对属性值实际表达
NamedValueImpl普通值变量对象
StringLiteralImpl字符串变量对象
ListValueImpl数组变量对象
getInclude(PropertyAssociation property)根据属性对象获取需要包含的文件
getPeriodic(StringLiteralImpl value)获取周期性质。
get Communication_mechanism(StringLiteralImpl value)获取通信机制名称。
get Communication_Type(StringLiteralImpl value)获取通信的类型。
get Input(ListValueImpl value)获取调用所需要的输入变量
getOutput(ListValueImpl value)获取调用所需要的输出变量
getCalled_By(StringLiteralImpl value)获取需要调用的函数
parseCalled_By(ListValueImpl value)处理当前需要调用的函数
parseListValue(ListValueImpl value)顺序批量处理数组变量对象
parseNamedValue(AbstractNamedValue value)单独处理属性值
parseDelay(SubprogramImplementation subpro)做延迟处理
5)使用AADL扩展语言来描述模型的精化规则
本发明的面向航天应用Ada代码自动生成方法需要依据AADL模型精化的支持,这里的精化是指通过对AADL属性集扩展来实现平台相关信息的精化。在属性集中可以定义新的属性、属性类型和属性常数。每个属性集均提供了一个单独的名称空间。属性集名称就是简单的标识符。利用上述的属性名称、属性类型名称或属性常数名称,就能够唯一地引用他们。必须包括属性集名称,即使在同一个属性集中已经说明了属性、属性类型或属性常数。可以省略OSATE提供的默认属性、属性类型、属性常数的属性集名称。
其中如果参考另外一个属性集中的内容,那就必须将它作为可利用with说明访问的属性集来说明。与之相似,如果属性定义引用了该软件包中的一个分类符,必须为with说明添加包名称。在应用属性集进行求精工作时,必须用软件包头部的with说明属性集名称。
基于AADL属性集的模型求精首先要有属性集模板。属性集模板可选的语法结构:
Property set<property set name>is
[with<property set name>]
Periodic_value:enumeration(periodic,aperiodic);
Communication_mechanism:aadlstring;
Communication_Type:enumeration(Thread-Thread,Thread-Device,Thread-Process,Process-Thread,Device-Thread);
Input:list of aadlstring;
Output:list of aadlstring;
Delay:aadlreal;
Called_By:list of aadlstring;
End<property set name>;
其中:
<property set name>为当前属性集模版的名字;
<property set name or package name(s)>为当前属性集可能参照的别的属性集模板
Periodic_value描述了当前的周期性质。
Communication_mechanism用于描述通信机制。
Communication_Type用于描述连接之间的类型。(例如线程到设备,线程到线程)
Input和Output描述了当前调用所需要的输入变量和输出变量。
Delay描述了当前运行的延时时间。
Called_By用于描述当前平台所需要的调用的平台函数名称。
基于此属性集模板语法规则,设计并定义了一系列用以明确功能属性、非功能属性以及添加平台相关描述属性的面向航空航天模型求精属性集。
这个属性集是在文件nuaa_Ada_properties.aadl中单独定义的,在其他模型文件中使用只需要将该属性集模板文件添加入模型工程目录下,并在需要的文件头中声明withnuaa_Ada_properties.aadl即可。
该属性集的定义借助某个正规工程的需求与实例初步实现,自定义属性集中部分元素及其对应语义如下:
IsPeriodic:表示描述实现当先线程时是采用周期性质的,还是采用中断型的处理方式。
Communication_mechanism:表示当前所采用的通信机制,是管道通信(Pipeline),还是全局变量式的通信,或者队列通信。
Communication_Type:用于描述两个互相通信的构件的属性,是软件之间的通信或者软硬件的通信。
GetIntput:表示在找到需要调用的API之后,对该API封装后,获取其所需要的输入参数。
ParseInput:表示在GetInput之后,将获取的参数传入对应API中.
DealMethodCall:表示在确定平台以后,找到当前需要使用的平台的API,在接收到输入参数后,并调用该API,然后得到一个输出参数。
GetOutput:表示,在DealMethodCall之后得到了一个输出对象,并对其对象进行解析,得到所需要的数据。
ParseDelay:表示,在执行当前函数时,所需要延时等待的时间。
DoCondition:表示条件,转换的路径由当前满足的条件所决定,包括字符串case元素表示当前状态值,字符串val表示要求的值;
VarAss:表示在某个过程的初始化步骤中变量的初始化赋值,包括var表示变量名,val表示初始值;
ConditionsValve:表示只有满足一组条件,某个过程才会执行,包括target表示该过程执行时的状态,数组Conditions表示运行该过程需要满足的条件;
ResCheck:表示在执行一个功能行为后是否要进行检查操作,包括条件condition表示需要满足的条件,target检测的目标状态,数组g_value表示一组临时变量,call表示在检查中一组被调用的方法;
ParseFunctionState:表示对状态功能进行简化,将一个功能状态先进行封装,将其看做一个黑盒模式,然后给其一个开始状态,和一个结束状态。外界只需要传入一个开始状态,然后经过这个功能转变出一个结束状态。
DealTheConctDtT:表示处理设备到线程之间的通信,也就是线程获取设备信息,根据输入参数判定线程是否是周期性,如果不是周期性的,就可以采用全局变量的方式来传递变量,如果是周期性的,就需要使用队列通信来处理。
DealTheConctTtD:表示处理线程给设备发送指令,同样区分去周期性与中断式的。通过MethodCall来处理。
DealTheConctTtT:表示线程之间的通信。
BuildPiPeline:建立一个管道通信结构。
SendByPip:表示通过管道通信来发送信息指令。
GetBypip:通过管道通信来获指令信息。
OperationsOthers:表示在某个状态下执行某个额外操作,包括目标target检测的目标状态,数组g_value表示一组临时变量,数组call表示在检查中一组被调用的方法;
beforeProcess:表示在某个执行过程中的某个步骤之前额外执行某个操作,包括一个Operations数组,表示自定义的一组额外操作;
DoAfProcess:表示在某个执行过程中的某个步骤之后额外之行某个操作,包括一个Operations数组,表示自定义的一组额外操作;
GetPlatInfo:表示当前生成的代码要考虑某个平台相关的要素;
Run4Conditions:表执行某个步骤所要满足的条件;
Process4ST:表示开始某个过程需要的信号量;
性能需求:性能需求主要分为时间性能和空间性能,可以用以来属性来表达:
时间性能:<TimeProperty>+<Num>+<Unit>,其中:
TimePty表示时间属性的对象,如周期、最坏执行时间等;
其中,针对AADL中的各种模型构件,例如线程构件、进程构件、函数构件表达的含义,定义不同的模型求精规则,主要包括:
输入输出数据/事件:表示某个功能构件的输入输出端口,事件为某触发事件,如某标志位的置位事件,数据为具有某种数据结构的具体数据,如姿轨控中的指令,事件/数据均为数据构件中定义的类型。
实现根据特定平台的信息,添加好精化属性,完善平台特定信息后,并将信息加入到属性库中,以便之后使用,在本工具中,主要处理AADL构件中的system构件、过程构件、函数构件、数据构件、通信的特定平台相关的求精内容。
6)功能模型到平台特定可执行Ada代码的转换过程
功能模型到平台特定可执行Ada代码转换是基于模型的精化和Xtend支持的模板方法实现的,功能模型到平台特定模型的转换将借助自定义属性集的手动填写实现,功能模型到可执行Ada代码转换借助基于Xtend开发的Eclipse插件实现,精化工作从模型的角度,分为平台相关模型求精、平台特定模型求精;从功能的角度,分为功能性求精、非功能性求精(面向代码生成的求精工作主要针对功能性求精,平台的特性会影响代码的执行方式,如平台提供的API,以及平台的执行方式是否是周期性的。);从面向构件的角度,分为行为系统求精、附件求精、线程求精、数据求精。
如图3所示,本代码生成工具的基础为OSATE插件工程,OSATE插件行为的类与配置文件位于cn.edu.nuaa.aadl2.AdaGenerator.*和cn.edu.nuaa.aadl2.AdaGenerator.actions.*位置处;在对aaxl2解析的过程中,借助OSATE自带的EMF框架生成的AADL解析工具包解析aaxl2文件并得到总系统的实例对象SytemImpletation,这些解析工具包位于org.osate.aadl2.*和org.osate.aadl2.impl.*位置处;代码生成流程的工作流控制类位于cn.edu.nuaa.aadl2.AdaGenerator.workflow.*位置处;代码生成流程中调用的模板位于cn.edu.nuaa.aadl2.AdaGenerator.template.*位置处,模板在生成代码过程中借助额外定义的工具类进行字符串处理和文字处理,这些工具类位于cn.edu.nuaa.aadl2.AdaGenerator.utils.*位置处。
图5为功能模型行为附件的精化过程前,将行为附件的变态可以看做是一个状态机,然后对这些复杂的状态做出简化,图6是状态简化后的图,通过给每一个状态进行封装,以黑盒的思想给其添加一个入口状态,和出口状态,然后其对应的转化条件,便可以将所有状态都转化为相似的过程来描述,这样可以降低代码生成的复杂度,降低了多样性。
图7为生成Ada工程的流程示意图,在获得AADL平台特定模型后,借助OSATE平台对该模型的顶层系统进行实例化,得到代表该顶层系统的AAXL2文件,借助AAXL2文件和EMF代码解析得到SystemImpl对象。代码生成工具将借助Xtend转换模板通过对该SystemImpl对象进行子系统遍历、进程遍历、其他构件遍历三个步骤,生成AADL平台执行模型的对应Ada代码工程。
平台执行模型到可运行Ada代码转换是由cn.edu.nuaa.aadl2.AdaGenerator.actions.GeneratorAction监听器方法实现转换的启动触发,进一步调用cn.edu.nuaa.aadl2.AdaGenerator.actions.workflow.Generate的generate方法开始代码生成的主要流程,在流程中会迭代调用各个转换规则映射模板,如图4所示,SystemTemplateAda为系统转换规则映射模板,PreocessTemplateAda为进程转换规则映射模板,ThreadTemplateAda为线程转换规则映射模板,DataTemplateAda为数据转换规则映射模板,SubprogramTypeTemplateAda为函数类型转换规则映射模板,SubprogramTemplateAda为函数声明转换规则映射模板,SubprogramImplementationTemplateAda为函数实现转换规则映射模板,PropertyTemplateAda为属性转换规则映射模板,ConnectionTemplateAda为连接转换规则映射模板,ModeTemplateAda为模式转换映射规则模板,FeatureTemplateAda为功能特征转换映射规则模板,AnnexSubclauseTemplateAda为行为附件转换规则映射模板;在模板被触发的过程中,可能会触发其他模板的生成行为,图4中为相互之间触发的关系。流程主要为四层:
第一层,从根据DataType.aadl中的数据构件构建一个Ada版本的数据构件,aadlboolean处理为Ada中的boolean,aadlstring处理为character字符数组(长度255),aadlreal处理为real,aadlinteger处理为integer类型。
第二层,根据插件入口处传入的系统实例开始生成,如果不是系统实现的实例将会直接失败跳回。系统的构建模板是个闭包的模板,即系统下的子系统一样会处理到。每个系统都会生成其对应的文件夹,从属于该层的子构建对应的生成文件或文件夹将会放入该层的文件或文件夹。非子系统子构建将会进入下一层的代码生成过程,且只会生成文件而不再拥有其对应的文件夹。
第三层,在上层系统文件夹、系统头文件、系统初始化函数文件构建完成后,在第二层系统代码生成过程中如果遍历到非系统子构建,将会进入当前层次的构建。包括过程代码转换、线程过程转换、子函数代码转换、数据构件代码转换。
第四层,主要负责connection构件之间连接、Features特性、properties属性三个模型属性相关的内容生成。该层生成过程主要发生在每一层执行过程中遇到了connection、features、propertie元素时。
生成文件的规则主要为:
规则1:每个系统都将拥有一个与其名称相同的文件夹,在文件夹中包括代表该系统的头文件以及函数文件。位于系统下的子系统的文件夹及其其它生成文件将会嵌套在上一层系统的文件夹中;
规则2:每个过程构建将会拥有一个与其名称相同的文件夹,和与其名称相同的头文件和函数文件,每个过程构建下面的线程子构件构件将会位于其文件夹中;
规则3:每个线程构建将会拥有一个与其名称相同的函数文件,并向其上层构件的头文件声明其函数文件中的函数。
规则4:每个函数构建将会拥有一个与其名称相同的函数文件,并向其上层构建的头文件中声明其函数文件中的函数。
Claims (9)
1.一种面向航天控制系统的AADL模型精化方法,其特征在于:包括以下步骤:
步骤1:建立面向特定平台的属性集模板,通过基于AADL模型中的自定义属性集对属性集模板进行扩展;
步骤2:添加面向特定平台的语义到属性集,得到已添加的特定平台语义的属性集;
步骤3:建立属性集存储库,存储已添加的特定平台语义的属性集,所述属性集存储库以属性集的名称作为唯一标识进行检索;
步骤4:根据特定平台信息,检索存储库,匹配得到对应的属性集,若不存在匹配的属性集则自定义添加,得到精化后AADL平台特定模型。
2.根据权利要求1所述的一种面向航天控制系统的AADL模型精化方法,其特征在于:所述属性集包括属性类型、属性常量和独立的命名空间。
3.根据权利要求1所述的一种面向航天控制系统的AADL模型精化方法,其特征在于:使用AADL提供的with的说明访问方法来完成所述属性集与属性集之间的属性继承或部分与。
4.根据权利要求1所述的一种面向航天控制系统的AADL模型精化方法,其特征在于:使用AADL提供的with方法来说明属性集的名称进行属性集扩充。
5.根据权利要求1所述的一种面向航天控制系统的AADL模型精化方法,其特征在于:所述属性集模板的结构如下:
Property set<property set name>is
[with<property set name or package name(s)>]
Periodic_value:enumeration(periodic,aperiodic);
Communication_mechanism:aadlstring;
Communication_Type:enumeration(Thread-Thread,Thread-Device,Thread-Process,Process-Thread,Device-Thread);
Input:list of aadlstring;
Output:list of aadlstring;
Delay:aadlreal;
Called_By:list of aadlstring;
End<property set name>;
其中:
<property set name>为当前属性集模板的名字;
<property set name or package name(s)>为当前属性集可能参照的别的属性集模板;
Periodic_value描述当前的周期性质;
Communication_mechanism用于描述通信机制;
Communication_Type用于描述连接之间的类型;
Input和Output描述了当前调用所需要的输入变量和输出变量;
Delay描述了当前运行的延时时间;
Called_By用于描述当前平台所需要的调用的平台函数名称。
6.基于权利要求1至5任意一项所述的一种面向航天控制系统的AADL模型精化方法的AADL模型自动生成Ada代码的方法,其特征在于:包括以下步骤:
S1:添加不同特定平台的平台信息至属性集,完成对AADL模型的精化,得到AADL平台特定模型;
S2:借助OSATE对AADL平台特定模型进行实例化,得到代表该顶层系统的AAXL2文件,借助AAXL2文件得到SystemImpl对象;
S3:借助EMF对AAXL2文件和SystemImpl对象分析,将其转化为语义准确的Java中间模型和允许查看和基于命令的模型编辑的适配器的中间模型;
S4:定义S3中的中间模型到可执行Ada代码的转换映射规则,借助Xtend提供的模板功能表达所述转换映射规则得到Xtend转换模板,该转换映射规则实现闭包,该转换映射规则包括功能映射规则和平台特性映射规则;
S5:借助S4中的Xtend转换模板对S3中的中间模型进行子系统遍历、进程遍历、行为附件和其他构件遍历;
S6:生成AADL平台相关模型的对应Ada代码。
7.根据权利要求6所述的AADL模型自动生成Ada代码的方法,其特征在于:所述S2中的转换映射规则包括系统转换模板、进程转换模板、线程转换模板、函数转换模板、行为附件转换模板、数据构件转换模板、特性转换模板、属性转换模板、模式模板和连接模板;
系统转换模板GenerateAda.xtend
EMF中系统实例类org.osate.aadl2
SystemSubcomponent线程构件接口
SystemClassifier线程分类器
SystemImplementation线程实现构件类
SystemName线程名
generateSystem处理系统实现组件
genSystemProcedure生成系统主过程
dealSystemMode根据系统所处的不同模式调用该模式下的进程子组件
dealProcedureCall当系统没有模式变换时调用进程子组件
genSystemFeature处理系统类型声明中的功能特性
genSystemProcedure生成系统主过程
getsProcesscomponent获过程构件
genSystemDataSubcomponent处理系统实现下的数据子组件
genSystemProcessSubcomponent处理系统实现下的进程子组件
genSystemSubprogramSubcomponent处理系统下的子进程的子组件
过程转换模板ProcessTemplateAda.xtend
EMF中系统实例类org.osate.aadl2
ProcessSubcomponent线程构件接口
ProcessClassifier线程分类器
ProcessImplementation线程实现构件类
ProcessName线程名
genSystemProcessSubcomponent处理系统实现下的进程子组件
getProcessSubcomponent获取进程子组件
getSystemName获取系统名称
getProcessSubcomponent获取进程子构件
generateProcess生成进程的过程
dealProcessMode根据进程所处的不同模式调用该模式下的子组件
dealTaskCall当进程没有模式变换时调用进程下的子组件
线程转换模板ThreadTemplateAda.xtend
EMF中线程实例类org.osate.aadl2
ThreadSubcomponent线程构件接口
ThreadClassifier线程分类器
ThreadImplementation线程实现构件类
ThreadName线程名
genProcessThreadSubcomponent处理进程实现下的线程子组件
head处理线程中的头文件
template处理线程的具体实现
genThreadPortVar将线程类型声明中的out和in out端口生成为进程中的变量
genThreadAccessVar生成线程类型的访问类型的变量
getPeriod得到周期性线程的周期
dealPrppertyExpression处理属性表达式
函数转换模板SubprogramTemplateAda.xtend
EMF中函数实例类org.osate.aadl2
GenSystemSubprogramSubcomponent生成函数构件
template4Adb为函数构件生成adb文件
template4Ads为函数构件生成ads文件
函数类型转换模板SubprogramTypeTemplateAda.xtend
Create生成函数类型文件
templateAds为函数文件写入基本的Ada代码框架
函数实现的模板SubprogramImplementationTemplateAda.xtend
templateAds实现函数的Ada代码。
genBehaviorAnnexVarible生成函数中的行为附件所使用的变量声明
genBehaviorAnnexState生成函数中的行为附件状态
genBehaviorAnnexTransition生成函数中的行为附件的转换
行为附件转换模板AnnexSubclauseTemplateAda.xtend
genBehaviorAnnexVarible生成行为附件所用到的变量声明
genBehaviorAnnexState生成行为附件的状态
genBehaviorAnnexTransition生成行为附件的一些转换
initBehaviorAnnexState初始化行为附件的状态
dealInitState处理整型的状态的改变
dealBehaviorAnnexVariable处理行为附件的变量改变
dealBehaviorAnnexState处理行为附加的状态改变
dealBehaviorAnnexTransition处理行为附件的一些转换的变化
dealBehaviorAnnexTransitionAction处理行为附件的转换的动作
dealActionTimeOut处理动作的延时
dealActionElement处理动作的元素
initBehaviorAnnexTransitionConditon初始化行为附件的转换情况
dealDispatchCondition处理调度的情况
dealValueExpression处理值得表达式
数据构件转换模板DataTemplateAda.xtend
EMF中函数实例类org.osate.aadl2
genSystemDataSubcomponent处理系统实现下的数据子组件
genProcessDataSubcomponent处理进程实现下的数据子组件
genDataType处理publicSection中的所有数据实现类型
dealDataComponent处理data implementation对象
getAllDataImplementation获得publicSection下的所有Data Implementation对象
特性转换模板FeatureTemplateAda.xtend
genProcessFeature处理进程类型声明中的features
getConnection得到和子线程对应端口连接的连接对象
genThreadFeatureVarInProc将线程的out和in out端口生成为进程中的变量
genThreadInPortVar处理线程类型声明中的输入输出端口,生成线程内的局部变量
initThreadInPortVar在线程的entry函数中初始化输入端口生成的局部变量
组件之间的链接模板ConnectionTemplateAda.xtend
genConnectionVar当连接是组件内的两个子组件之间的连接时生成连接变量
genProtectType当连接是进程内的两个线程之间的端口或者是进程和线程之间的端口交互时生成保护类型
dealPortConType处理进程中的端口连接,生成对应的保护类型
genProtectObject当连接是进程内的两个线程之间的端口或者是进程和线程之间的端口交互时生成保护类型对象
genConParam根据组件之间的连接关系生成过程调用时的实参和形参的传递关系
dealConParamOneContext处理当前组件端口和子组件端口之间的连接对应的参数传递关系
dealConParamTwoContext处理两个子组件之间的连接对应的参数传递关系
dealPortConVar处理端口连接生成变量
dealAccessConVar处理访问连接生成变量
dealDataAccessVar处理数据访问连接生成变量
dealConnectionEndType处理连接中端口或者数据访问的类型
genThreadConParam根据进程中的连接关系生成线程端口和保护对象的传递关系
属性转换模板PropertyAdaTemplate.xtend
PropertySets属性集对象
Property属性对象
ModalPropertyValue属性值对象
PropertyExpression属性表达式抽象对象,对属性值实际表达
NamedValueImpl普通值变量对象
StringLiteralImpl字符串变量对象
ListValueImpl数组变量对象
getInclude(PropertyAssociation property)根据属性对象获取需要包含的文件
getPeriodic(StringLiteralImpl value)获取周期性质。
get Communication_mechanism(StringLiteralImpl value)获取通信机制名称。
get Communication_Type(StringLiteralImpl value)获取通信的类型。
get Input(ListValueImpl value)获取调用所需要的输入变量
getOutput(ListValueImpl value)获取调用所需要的输出变量
getCalled_By(StringLiteralImpl value)获取需要调用的函数
parseCalled_By(ListValueImpl value)处理当前需要调用的函数
parseListValue(ListValueImpl value)顺序批量处理数组变量对象
parseNamedValue(AbstractNamedValue value)单独处理属性值
parseDelay(SubprogramImplementation subpro)做延迟处理。
8.根据权利要求7所述的AADL模型自动生成Ada代码的方法,其特征在于:所述S3中,在对行为附件进行遍历时,对进行语义分析与提取后的AADL平台特定模型中的行为附件的状态进行简化转换,具体为:将每个行为附件的状态封装成黑盒模式,给其一个入口和一个出口,黑盒内部为行为附件转换模板,进行转换时,从入口进入,通过转换得到新的行为附件的状态作为输出。
9.根据权利要求6所述的AADL模型自动生成Ada代码的方法,其特征在于:所述属性集中描述有生成可执行Ada代码所必要的特定平台相关信息及其描述语义。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910158762.7A CN110597498B (zh) | 2019-03-04 | 2019-03-04 | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910158762.7A CN110597498B (zh) | 2019-03-04 | 2019-03-04 | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597498A true CN110597498A (zh) | 2019-12-20 |
CN110597498B CN110597498B (zh) | 2021-10-19 |
Family
ID=68852512
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910158762.7A Active CN110597498B (zh) | 2019-03-04 | 2019-03-04 | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597498B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111709138A (zh) * | 2020-06-16 | 2020-09-25 | 江苏师范大学 | 面向cps时空性质的混成aadl建模与模型转换方法 |
CN112463628A (zh) * | 2020-12-11 | 2021-03-09 | 北京航空航天大学 | 一种基于模型基框架的自主无人系统软件自适应演化方法 |
CN112527266A (zh) * | 2020-11-04 | 2021-03-19 | 南京航空航天大学 | 面向cps的aadl扩充建模语言及其转换为加权概率混成自动机的转换方法 |
CN114691129A (zh) * | 2020-12-31 | 2022-07-01 | 上海维略信息科技有限公司 | 一种基于设计模型面向低代码开发平台的自动化开发方法 |
CN114756213A (zh) * | 2022-06-14 | 2022-07-15 | 军事科学院系统工程研究院网络信息研究所 | 一种智能控制系统代码自动生成方法及装置 |
CN115438524A (zh) * | 2022-11-09 | 2022-12-06 | 北京蓝天航空科技股份有限公司 | 代码生成方法、装置、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090070558A1 (en) * | 2007-09-11 | 2009-03-12 | International Business Machines Corporation | Multiplexing per-probepoint instruction slots for out-of-line execution |
CN102073585A (zh) * | 2010-11-25 | 2011-05-25 | 西北工业大学 | 一种基于模型的嵌入式系统流延时属性测试方法 |
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语言的代码自动生成方法 |
CN106325855A (zh) * | 2016-08-11 | 2017-01-11 | 南京航空航天大学 | 基于Prolog的AADL行为模型时间一致性验证方法 |
CN108491196A (zh) * | 2018-02-07 | 2018-09-04 | 南京航空航天大学 | 一种aadl图形化功能行为建模方法 |
CN108563439A (zh) * | 2018-04-27 | 2018-09-21 | 南京航空航天大学 | 一种基于中间模型的aadl生成嵌入式系统代码方法 |
-
2019
- 2019-03-04 CN CN201910158762.7A patent/CN110597498B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090070558A1 (en) * | 2007-09-11 | 2009-03-12 | International Business Machines Corporation | Multiplexing per-probepoint instruction slots for out-of-line execution |
CN102073585A (zh) * | 2010-11-25 | 2011-05-25 | 西北工业大学 | 一种基于模型的嵌入式系统流延时属性测试方法 |
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语言的代码自动生成方法 |
CN106325855A (zh) * | 2016-08-11 | 2017-01-11 | 南京航空航天大学 | 基于Prolog的AADL行为模型时间一致性验证方法 |
CN108491196A (zh) * | 2018-02-07 | 2018-09-04 | 南京航空航天大学 | 一种aadl图形化功能行为建模方法 |
CN108563439A (zh) * | 2018-04-27 | 2018-09-21 | 南京航空航天大学 | 一种基于中间模型的aadl生成嵌入式系统代码方法 |
Non-Patent Citations (2)
Title |
---|
ZHIBIN YANG: ""Towards an AADL Functional Specification Extension"", 《2018 16TH ACM/IEEE INTERNATIONAL CONFERENCE ON FORMAL METHODS AND MODELS FOR SYSTEM DESIGN (MEMOCODE)》 * |
王飞等: ""基于限定自然语言需求模板的AADL模型生成方法"", 《软件学报》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111709138A (zh) * | 2020-06-16 | 2020-09-25 | 江苏师范大学 | 面向cps时空性质的混成aadl建模与模型转换方法 |
CN111709138B (zh) * | 2020-06-16 | 2024-01-05 | 江苏师范大学 | 面向cps时空性质的混成aadl建模与模型转换方法 |
CN112527266A (zh) * | 2020-11-04 | 2021-03-19 | 南京航空航天大学 | 面向cps的aadl扩充建模语言及其转换为加权概率混成自动机的转换方法 |
CN112463628A (zh) * | 2020-12-11 | 2021-03-09 | 北京航空航天大学 | 一种基于模型基框架的自主无人系统软件自适应演化方法 |
CN114691129A (zh) * | 2020-12-31 | 2022-07-01 | 上海维略信息科技有限公司 | 一种基于设计模型面向低代码开发平台的自动化开发方法 |
CN114756213A (zh) * | 2022-06-14 | 2022-07-15 | 军事科学院系统工程研究院网络信息研究所 | 一种智能控制系统代码自动生成方法及装置 |
CN114756213B (zh) * | 2022-06-14 | 2022-08-12 | 军事科学院系统工程研究院网络信息研究所 | 一种智能控制系统代码自动生成方法及装置 |
CN115438524A (zh) * | 2022-11-09 | 2022-12-06 | 北京蓝天航空科技股份有限公司 | 代码生成方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110597498B (zh) | 2021-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597498B (zh) | AADL模型精化方法及其支持的Ada可执行代码自动生成方法 | |
Berthomieu et al. | Formal verification of AADL specifications in the Topcased environment | |
Garavel et al. | SVL: a scripting language for compositional verification | |
CN109558117B (zh) | 面向航天应用的aadl模型求精及其支持的c代码自动生成方法 | |
US20080276231A1 (en) | Method and apparatus for dependency injection by static code generation | |
Zhao et al. | Pipa: a behavioral interface specification language for aspect | |
US20070083551A1 (en) | Extensible mechanism for object composition | |
Gilles et al. | Expressing and enforcing user-defined constraints of AADL models | |
Edwards et al. | A methodology and framework for creating domain-specific development infrastructures | |
Bordin et al. | Correctness by construction for high-integrity real-time systems: A metamodel-driven approach | |
Hansen et al. | HAZOP analysis of UML-based software architecture descriptions of safety-critical systems | |
Pohlmann et al. | Model-driven allocation engineering (T) | |
CN116048518B (zh) | 一种面向天脉操作系统的综合化航空电子系统安全代码自动生成方法 | |
Saleh et al. | A concurrency control mechanism for C++ objects | |
Kühlwein et al. | Firmware synthesis for ultra-thin iot devices based on model integration | |
Sreeram | Automated Generation and Integration of AUTOSAR ECU Configurations | |
Balasubramanian et al. | Rapid property specification and checking for model-based formalisms | |
Kamni et al. | A Reverse Design Framework for Modifiable-off-the-Shelf Embedded Systems: Application to Open-Source Autopilots | |
Bures et al. | Using DSL for automatic generation of software connectors | |
WO2008015110A2 (en) | Methods, apparatus and computer programs for modelling computer programs | |
Talpin et al. | Hard real-time implementation of embedded software in JAVA | |
Chochlík | Portable reflection for C++ with Mirror | |
Hammer et al. | Check for updates PSCS4CPP: A Generative PSCS Implementation for C+ | |
Hammer et al. | PSCS4CPP: A Generative PSCS Implementation for C++ | |
Nikiel | Automating software development for distributed control systems with the OPC UA standard |
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 |