
随着科技的进步,嵌入式系统的应用已无处不在,嵌入式软件开发方式也得到长足发展。目前,模型驱动开发[1-4]在嵌入式软件设计中得到应用,逐渐代替传统的基于文档的开发方式。通过建模和仿真可以提前进行软件的验证和确认,通过自动代码生成可以减少手工编码的工作量并有效提升代码质量。各种各样的建模语言和建模工具应运而生并日渐成熟[5-6]。结构分析与设计语言(AADL)[7-8]是由美国汽车工程师协会(Society of Automotive Engineers,SAE)在2004年以SAE AS5506标准发布的建模语言,用于设计和分析嵌入式系统的软、硬件体系结构及功能与非功能性质。AADL采用系统组件层次化方法建立嵌入式系统的体系结构模型,该模型提供了运行时的、定义明确的、可分析的语义,并以接口规范及其实现详细描述了各软硬件组件,以及各个组件之间通信的交互规范。AADL支持高安全嵌入式系统的结构建模与分析验证,适用于构建嵌入式系统的体系结构,但不太适合描述系统具体的逻辑功能[9-11]。高安全性应用开发环境[12](SCADE)面向高安全性系统和嵌入式软件,适用于对嵌入式系统的功能和控制逻辑建模和仿真,其自动代码生成工具KCG代码生成器(KCG Code Generator,KCG)通过DO-178C最高标准认证,能够充分保证模型和代码的一致性。SCADE[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输出加速度数据。通过端口可以实现组件之间的连接,例如在Pilot_Control进程的数据端口Act_Cmd与Motors设备的数据端口Act_Cmd之间建立连接,并标记为《Data》。通过定义处理器、存储器和总线,实现控制系统硬件建模。处理器ARM_100 MHz执行控制系统的代码(线程),存储器Stand_Memory存储系统的可执行代码(进程),总线Stand_CAN_Bus为系统提供物理路径。在设备组件、处理器组件、存储器组件中添加总线访问(requires bus access)说明,通过说明可以将它们与总线Stand_CAN_Bus连接,并标记为《BusAccess》。飞行器控制系统的AADL模型图形表示如图 1所示。
![]() |
Fig.1 AADL graphical representation of aircraft control system 图 1 飞行器控制系统的AADL模型图形表示 |
通过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;
对进程Pilot_Control进行简化处理,建立3个线程组件,如图 2所示。第一个线程组件Sacle_Acc_Data接收IMU传感器发送的加速度数据和对数据进行预处理,并向第二个线程组件发送处理后的数据;第二个线程组件Acc_Control_Laws是执行加速度控制规则计算,向Motors组件发送控制命令,并向第三个线程组件发送启动无线传输事件;第三个线程组件WiFi_Transmit接收到Acc_Control_Laws线程组件发送的事件Start_Tran后将接收的GPS数据发送给WiFi组件。
![]() |
Fig.2 AADL graphical representation of process implementation 图 2 进程实现的AADL图形表示 |
通过文本表示可以定义线程组件的执行特性,如周期、执行时间等。例如线程组件实例Acc_Control_Laws的周期为20 ms,执行时间为3~5 ms。利用OSATE调度程序和调度分析插件可以分析系统的调度性[12]。
进程组件Pilot_Control的部分AADL文本表示如下:
threadAcc_Control_Laws:
features
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。
![]() |
Fig.3 SCADE model of acceleration data calculation function 图 3 加速度数据计算功能的SCADE模型 |
状态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。对重要输入和输出进行标记,在观察窗口中观察相关变量的值,运行模型后可得到仿真结果。通过仿真可知当满足给定要求后变量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*/
......
}
}
}
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.) |
[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.) |