第18卷 第6期太赫兹科学与电子信息学报Vo1.18,No.6 2020年12月 Journal of Terahertz Science and Electronic Information Technology Dec.,2020
文章编号:2095-4980(2020)06-1117-05
基于AADL和SCADE的模型驱动软件设计
刘芮滦,邓杨,龚彬
(中国工程物理研究院电子工程研究所,四川绵阳 621999)
摘 要:模型驱动开发逐渐应用于嵌入式系统的软件设计,在软件设计阶段重点关注的是软件的架构模型和详细功能模型。用于嵌入式系统软件建模的语言和工具很多,其中结构分析与设
计语言(AADL)模型可以构建嵌入式软件的架构,高安全性应用开发环境(SCADE)模型可以描述嵌
入式软件的逻辑功能,将两者统一使用可以满足嵌入式软件概要设计和详细设计的建模需求。针
对某飞行器控制系统,本文分别使用AADL和SCADE对飞行器控制系统软件架构和功能进行建
模,利用KCG工具从SCADE模型自动生成C代码,通过手工代码和自动生成代码的集成完成控
制系统部分软件设计。实际应用表明,采用AADL和SCADE相结合的建模方法适用于模型驱动
开发在嵌入式软件设计中应用。
关键词:AADL模型;SCADE模型;模型驱动开发;嵌入式系统;自动代码生成
中图分类号:TN967.6;TP391.9文献标志码:A  doi:10.11805/TKYDA2019233
Model driven software development based on AADL and SCADE
LIU Ruiluan,DENG Yang,GONG Bin
(Institute of Electronic Engineering,China Academy of Engineering Physics,Mianyang Sichuan 621999,China)
Abstract:Model-driven design has been used in embedded system software design. The software architecture model and detailed functional model are the focuses in the software design stage. There are
many languages and tools for the embedded system software modeling. The architecture of embedded
software can be built by the Architectural Analysis and Design Language(AADL) model, and the logic
function of embedded software can be described by the Safety Critical Application Development
Environment(SCADE) model. The integration of the two models can meet the modeling requirements of
outline design and detailed design of embedded software. AADL and SCADE are adopted to model the
architecture and function of the software of an aircraft control system, KCG tool is utilized to auto generate
C code from SCADE model, and the aircraft control system software is partly designed through the
integration of handmade and auto-generated codes. Actual application indicates that AADL associated
with SCADE is suitable for model-driven design applied in the embedded software design.
Keywords:AADL;SCADE;model-driven design;embedded system;auto code generation
随着科技的进步,嵌入式系统的应用已无处不在,嵌入式软件开发方式也得到长足发展。目前,模型驱
动开发[1−4]在嵌入式软件设计中得到应用,逐渐代替传统的基于文档的开发方式。通过建模和仿真可以提前进行软件的验证和确认,通过自动代码生成可以减少手工编码的工作量并有效提升代码质量。各种各样的建模语言和建模工具应运而生并日渐成熟[5−6]。结构分析与设计语言(AADL)[7−8]是由美国汽车工程师协会(Society of Automotive Engineers,SAE)在2004年以SAE AS5506标准发布的建模语言,用于设计和分析嵌入式系统的软、硬件体系结构及功能与非功能性质。AADL采用系统组件层次化方法建立嵌入式系统的体系结构模型,该模型提供了运行时的、定义明确的、可分析的语义,并以接口规范及其实现详细描述了各软硬件组件,以及各个组件之间通信的交互规范。AADL支持高安全嵌入式系统的结构建模与分析验证,适用于构建嵌入式系统的体系结构,但不太适合描述系统具体的逻辑功能[9−11]。高安全性应用开发环境[12](SCADE)面向高安全性系统和
收稿日期:2019-06-29;修回日期:2019-11-056
作者简介:刘芮滦(1987–),男,硕士,助理研究员,主要研究方向为嵌入式软件建模与仿真。email:******************
1118                          太赫兹科学与电子信息学报                      第18卷
嵌入式软件,适用于对嵌入式系统的功能和控制逻辑建模和仿真,其自动代码生成工具KCG 代码生成器(KCG Code Generator ,KCG)通过DO-178C 最高标准认证,能够充分保证模型和代码的一致性。SCA
DE [13]支持文本和图形两种建模方式,文本方式使用Lustre 语言,图形方式包括安全状态机和数据流图,这两种建模方式都具有严格的数学语义。SCADE 模型验证通过后,使用KCG 以SCADE 图形模型作为输入,首先将方程式、参数块等图形转变成Lustre 语言描述,然后再将Lustre 描述转换成面向工程的C 语言。
1  飞行器控制系统AADL 架构建模
本文以某飞行器控制系统为例建立AADL 模型。该控制系统通过惯性测量单元(Inertial Measurement Unit ,IMU)传感器接收IMU 数据,GPS 设备接收GPS 数据,依据控制策略计算控制命令,将控制命令传输给Motors 设备控制飞行器飞行,同时通过WiFi 无线传输装置将接收的GPS 位置信息处理后发射给地面测控设备,或接收地面测控设备发送的遥控指令。飞行器控制系统的处理器为ARM Cortex-M4(主频100 MHz),采用标准CAN 总线用于内部设备通信。
AADL 模型实例使用进程、线程、数据描述控制系统软件体系架构,使用处理器、存储器、总线、设备组件描述控制系统的硬件体系架构。在模型中,IMU 传感器、GPS 、Motors 、WiFi 无线传输装置建模为设备组件,模型只关注设备的通信接口数据而忽略设备内部结构。飞行器控制功能表示为进程组件,软件运行时组件包括在该进程类型的实现中。控制系统中组件的接口是在组件类型中说明的端口特征,例如IMU 组件经由数据端口IMU_Data 输出加速度数据。通过端口可以实现组件之间的连接,例如在Pil
ot_Control 进程的数据端口Act_Cmd 与Motors 设备的数据端口Act_Cmd 之间建立连接,并标记为<<Data>>。通过定义处理器、存储器和总线,实现控制系统硬件建模。处理器ARM_100 MHz 执行控制系统的代码(线程),存储器Stand_Memory 存储系统
的可执行代码(进程),总线Stand_CAN_Bus 为系统提供物理路径。在设备组件、处理器组件、存储器组件中添加总线访问(requires bus access)说明,通过说明可以将它们与总线Stand_CAN_Bus 连接,并标记为<<BusAccess>>。飞行器控制系统的AADL 模型图形表示如图1所示。
通过OSATE 工具建立飞行器控制系统AADL 模型后自动生成相应的AADL 文本表示。飞行器控制系统包括各个设备、数据连接和总线连接的各组件文本部分说明如下:
systemimplementation Complete.Aerocraft
subcomponents
IMU: device IMU.Sensor;
GPS:device GPS.Dev;
Pilot_Control: process Aerocraft_Control.Pilot;
Motors: device Actuator.Motors;
WiFi:device WiFi.Transmit;
ARM_100MHz: processor MCU.MHz;
Stand_Memory: memory RAM.Standard;
Standard_CAN_Bus: bus CAN.Standard;
connections
DC1: dataport IMU.IMU_Data -> Pilot_Control.IMU_Data;
DC2: dataport GPS.GPS_Data -> Pilot_Control.GPS_Data;
DC3: dataport Pilot_Control.Radio_Data -> WiFi.Radio_Data;
DC4: dataport Pilot_Control.Act_Cmd -> Motors.Act_Cmd;
BC1: busaccess Standard_CAN_Bus<-> GPS.BA1;
BC2: busaccess Standard_CAN_Bus <-> Motors.BA1;
BC3: busaccess Standard_CAN_Bus <-> ARM_100MHz.BA1;
BC4: busaccess Standard_CAN_Bus <-> Stand_Memory.BA1;
BC5: busaccess Standard_CAN_Bus <-> WiFi.BA1;
BC6: busaccess Standard_CAN_Bus <-> IMU.BA1;
end Complete.Aerocraft;
IMU data IMU GPS GPS data <<BusAccess>> <<BusAccess>> <<BusAccess>>
standard CAN bus <<BusAccess>> standard memory bus IMU data pilot control radio data WiFi    GPS data radio data Motors standard memory ARM 100 MHz Fig.1 AADL graphical representation of aircraft control system 图1 飞行器控制系统的AADL 模型图形表示
<<data>>    <<data>> <<data>> BA2 <<data>> BA2 BA1    Act Cmc Act Cmc BA2
第6期            刘芮滦等:基于
AADL 和SCADE 的模型驱动软件设计            1119
对进程Pilot_Control 进行简化处理,建立3个线程组件,如图2所示。第一个线程组件Sacle_Acc_Data 接收IMU 传感器发送的加速度数据和对数据进行预处理,并向第二个线程组件发送处理后的数据;第二个线程组件Acc_Control_Laws 是执行加速度控制规则计算,向Motors 组件发送控制命令,并向第三个线程组件发
送启动无线传输事件;第三个线程组件WiFi_Transmit 接收到Acc_Control_Laws 线程组件发送的事件Start_Tran 后将接收的GPS 数据发送给WiFi 组件。 通过文本表示可以定义线程组件的执行特性,如周期、执行时间等。例如线程组件实例Acc_Control_Laws
的周期为20 ms ,执行时间为3~5 ms 。利用OSATE 调度程序和调度分析插件可以分析系统的调度性[12]。
进程组件Pilot_Control 的部分AADL 文本表示如下:
threadAcc_Control_Laws:
f eatures
Cmd: Out data port;
Pro_Data: in data port;
Start_Tran: out event port;
properties
Dispatch_Protocol => Periodic;
Compute_Execution_Time => 3ms .. 5ms;
Period => 20ms;
endAcc_Control_Laws:;
processimplementation Aerocraft_Control.Pilot
subcomponents
Scale_Acc_Data: thread Read_Data.Acceleration;
Acc_Control_Laws: thread Control_Laws.Pilot;
WiFi_Transmit:thread WiFi_Transmit.DataTran;
connections
DC1: dataport IMU_Data -> Scale_Acc_Data.IMU_Data;
DC2: dataport Scale_Acc_Data.Proc_Data -> Acc_Control_Laws.Pro_Data;
DC3: dataport Acc_Control_Laws.Cmd -> Act_Cmd;
DC4: dataport GPS_Data -> WiFi_Transmit.GPS_Data;
DC5: dataport WiFi_Transmit.Tran_Data -> Radio_Data;
EC1: eventport Acc_Control_Laws.Start_Tran -> WiFi_Transmit.Start_Tran;
end Aerocraft_Control.Pilot; 2  SCADE 详细功能建模
使用SCADE 对飞行器控制系统的逻辑功能进行建模。在该实例中飞行器控制系统的具体功能可以分解到3个线程组件Sacle_Acc_Data 、Acc_Control_Laws 和WiFi_Transmit ,对线程组件Acc_Control_Laws 的功能建模进行具体说明。线程组件Acc_Control_Laws 的主要功能是对加速度数据
进行计算和判断,其SCADE 模型如图3所示。该SCADE 模型采用并行状态机设计,包含计算IntegraCal 和有效数据计数Count 两个并行状态,状态IntegralCal 对加速度值进行计算获取当前速度,状态Count 判断当前加速度值大小。当加速度和速度满足判定条件时,线程组件Acc_Control_Laws 向线程组件WiFi_Transmit 发送启动无线传输事件Start_Tran 。
状态Count 有TrajChkInit 和TrajChkCount 等子状态,子状态TrajChkInit 对变量DataCnt 和AvailCnt 清零,当变量Data(加速度值)大于等于2时,从子状态TrajChkInit 迁移到子状态TrajChkCount ,并执行计数动作,当变量DataCnt 等于100而变量AvailCnt 小于80则又从子状态TrajChkCount 迁移回子状态TrajChkInt ,清零变量DataCnt 和AvailCnt 。
SCADE 模型建好后首先利用建模软件进行模型检查。模型检查正确后对模型进行仿真,SCADE 仿真器基于生成的C 代码进行,可以对模型进行连续、批处理的仿真。通过加载LoadAccData.in 场景文件,加载模拟的加表数据,仿真周期设置为10 ms 。对重要输入和输出进行标记,在观察窗口中观察相关变量的值,运行模型  Fig.2 AADL graphical representation of process implementation 图2 进程实现的AADL 图形表示 IMU data <<Data>> WiFi transmit GPS data GPS data Tran data Start Tran Start Tran Proc data Proc data
<<Data>> <<Data>>
IMU data        <<Data>> Scale Acc Data Acc control laws
Act Cmc Cmc Radio Data <<Data>>
1120                          太赫兹科学与电子信息学报                      第18卷
后可得到仿真结果。通过仿真可知当满足给定要求后变量TrajChkFlag 置1,通过判断该变量标志,线程组件Acc_Control_Laws 可以向线程组件WiFi_Transmit 给出事件Start_Tran 。
3  自动代码生成与代码集成
除了模型检查、模型仿真,SCADE 模型还可以进行覆盖率分析和形式化验证。经过验证后的模型保证了其正确性和安全性,可以自动生成标准的C 代码。SCADE 模型中的每个变量在其作用域内只赋值一次,没有递归、死循环、动态指针、动态内存分配,因此满足软件的高安全性要求[13−15]。
线程组件Sacle_Acc_Data 、Acc_Control_Laws 和WiFi_Transmit 对应C 代码中与平台相关任务入口函数,例如Acc_Control_Laws 对应函数void Acc_Control_Laws_Task(void*arg)。使用KCG 工具可以从线程组件Acc_Control_Laws 的SCADE 模型自动生成C 代码,代码集成时需要使用其中7个头文件和源文件,其中文件Acc_Control_Laws.c 包含的模型函数TrajChk()是SCADE 模型的具体实现。
函数的参数包含两个结构体指针,结构体中的元素分别包含输入和输出变量。其中,kcg_float32 Data 对应AADL 模型中线程组件Acc_Control_Laws 的输入数据端口Pro_Data ;kcg_uint32 TrajChkFlg 对应输出事件端口Start_Tran 。在设计飞行器控制系统软件时,函数Acc_Control_Laws_Task()接收函数Scale_Acc_Data_Task()发送的处理后的加速度值进行计算判断,计算判断功能可以直接调用KCG 自动生成C 代码Acc_Control_Laws.c 文件中的函数TrajChk(),实现自动生成代码和手工代码的集成。当输出变量TrajChkFlg 为1表示当前加速度满足给定要求,可以向函数WiFi_Transmit_Task()发送启动无线传输事件Start_On 。函数Acc_Control_Laws_Task()的伪代码如下:
void Acc_Control_Laws_Task(void* arg)
{
while(1)
{
/*阻塞等待线程Scale_Acc_Data_Task 发送加速度数据fAccData */
......
inC->Data = fAccData;
/*调用自动生成代码对加速度数据进行计算处理*/
TrajChk(inC_TrajChk_CK *inC, outC_TrajChk_CK *outC);
if(outC-> TrajChkFlg == 1)
{
/* 加速度满足条件,向线程WiFi_Transmit_Thread 发送事件Start_On*/
......
}
}
}
Fig.3 SCADE model of acceleration data calculation function 图3 加速度数据计算功能的SCADE 模型 <SM1>TrajChkSucess (1 : uint32)TrajChkFlg TrajChk <SM3>IntegralSucess IntegraCal  last 'IntCal Data * 0.015IntCal <SM2>TrajChkCntOK Inv alidCnt  last 'DataCnt + 1DataCnt TrajChkCnt  last 'DataC
nt + 1 last 'Av ailCnt + 1DataCnt Av ailCnt TrajChkInit DataCnt (0 : uint32)Av ailCnt 2Data < 21Data > 22Data > 23DataCnt = 100 and Av ailCnt < 801IntCal > 5.01DataCnt = 100 and Av ailCnt >= 801DataCnt = 100 and Av ailCnt >= 801  DataCnt=100 and Av ailCnt<80  DataCnt=100 and Av ailCnt>=80 DataCnt=100 and Av ailCnt>=80 Data>2 Data>2  Data<2 IntCat>5.0 <SM1> Av ailCnt DataCnt DataCnt last ‘DataCnt+1 last ‘DataCnt+1 last ‘Av ailCnt +1 Av ailCnt DataCnt <SM3> <SM2> IntCat Data * 0.01 last `IntCal TrajChk IntegralSucess TrajChkInit Inv alidCnt TrajChkCnt TrajChkCntOK IntegraCal
TrajChkSucess TrajChkFlg
(0꞉uint32) (1꞉uint32)
第6期刘芮滦等:基于AADL和SCADE的模型驱动软件设计1121 4  结论
本文基于AADL和SCADE建模语言及工具完成某飞行器控制系统建模,通过代码自动生成技术完成嵌入式系统部分逻辑控制功能的软件实现,提高了软件开发效率,后期还需要通过AADL模型仿真分析实现软件架构模型的优化设计,以及根据AADL模型自动生成框架代码来进一步提高软件开发的自动化程度。实际应用表明,AADL和SCADE相结合进行软件建模是模型驱动开发的一种具有可操作性的实践示范,具有在嵌入式系统软件设计中应用和推广的价值。
参考文献:
[1]刘兴华,曹云峰. 一种模型驱动的嵌入式控制软件设计技术研究[J]. 系统仿真学报, 2013,25(7):1530-1567. (LIU
Xinghua,CAO Yunfeng. Research on model driven development of embedded control software[J]. Journal of System Simulation, 2013,25(7):1530-1567.)
[2]赵勇,陈香兰. 基于模型驱动的实时嵌入式系统[J]. 计算机系统应用, 2017,26(8):83-87. (ZHAO Yong,CHEN
Xianglan. Real-time embedded system design method based on model-driven[J]. Computer Systems & Applications, 2017, 26(8):83-87.)
[3]ROUDIER Y,IDREES M S,APVRILLE L. Towards the model-driven engineering of safety requirements for embedded
systems[C]// 2013 International Workshop on Model-Driven Requirements Engineering(MoDRE). Rio de Janeiro,Brazil: IEEE, 2013:55-64.
[4]HUTCHINSON J,ROUNCEFIELD M,WHITTLE J. Model-driven engineering practices in industry[C]// 33rd International
Conference on Software Engineering(ICSE). Honolulu,HI,USA:IEEE, 2011:633-642.
[5]王文全,宋科璞,王勇,等. 基于模型驱动的机载嵌入式软件应用[J]. 计算机技术与发展, 2013,23(8):145-148.
(WANG Wenquan,SONG Kepu,WANG Yong,et al. Airborne embedded software application based on MDA[J]. Computer Technology and Development, 2013,23(8):145-148.)
[6]张涛,秦凯,王楠,等. 面向航天领域的模型驱动软件设计开发方法[J]. 航天控制, 2017,35(5):74-79. (ZHANG Tao,
QIN Kai,WANG Nan,et al. Research on model-driven aerospace software development method[J]. Aerospace Control, 2017,35(5):74-79.)
[7]Aerospace SAE. Architecture analysis & design language(standard SAE AS5506)[S]. 2004.
[8]Aerospace SAE. Architecture analysis & design language(standard SAE AS5506A)[S]. 2009.
[9]杨志斌,皮磊,胡凯,等. 复杂嵌入式实时系统体系结构设计与分析语言:AADL[J]. 软件学报, 2010,21(5):899-915.
(YANG Zhibin,PI Lei,HU Kai,et al. AADL: an architecture design and analysis language for complex embedded real-time systems[J]. Journal of Software, 2010,21(5):899-915.)
[10] 刘承威,杨志斌,周勇,等. 面向限定自然语言需求的AADL自动生成工具[J]. 小型微型计算机系统, 2019,40(5):984-
995. (LIU Chengwei,YANG Zhibin,ZHOU Yong,et al. Automated tool to derive AADL models from requirements in restricted natural language[J]. Journal of Chinese Computer Systems, 2019,40(5):984-995.)
[11] 王飞,杨志斌,黄志球,等. 基于限定自然语言需求模板的AADL模型生成方法[J]. 软件学报, 2018,29(8):2350-2370.
(WANG Fei,YANG Zhibin,HUANG Zhiqiu,et al. Approach for generating AADL model based on restricted natural language requirement template[J]. Ruan Jian Xue Bao/Journal of Software, 2018,29(8):2350−2370.)
access是基于什么的工具
[12] 陈淑珍,陈荣武,李耀. 基于SCADE的安全软件开发方法研究[J]. 铁路计算机应用, 2015,24(3):14-18. (CHEN
Shuzhen,CHEN Rongwu,LI Yao. Method of SCADE-based safety software development[J]. Railway Computer Application, 2015,24(3):14-18.)
[13] 傅亮,潘明罕,严俊. 基于SCADE模型驱动的软件集成设计[J]. 航空电子技术, 2013,44(3):26-30. (FU Liang,PAN
Minghan,YAN Jun. A model driven software integration design based on SCADE[J]. Avionics Technology, 2013,44(3):26-30.)
[14] 陈明铝,张立臣. AADL对月球车导航系统的设计与建模[J]. 计算机应用与软件, 2013,30(11):235-237. (CHEN
Minglyu,ZHANG Lichen. Designing and modelling lunar rover navigation system with AADL[J]. Computer Application and Software, 2013,30(11):235-237.)
[15] 李虎,马晋,郑凤,等. SCADE模型驱动开发过程研究及高安全性分析[J]. 航空电子技术, 2013,44(1):15-19. (LI Hu,
MA Jin,ZHENG Feng,et al. SCADE model-driven development process research and high security analysis[J]. Avionics Technology, 2013,44(1):15-19.)