基于模型架构的航天器控制软件研制方式研究

2021-04-22 02:45董晓刚李经松王殿佑陈朝晖
空间控制技术与应用 2021年2期
关键词:功能模块航天器代码

董晓刚, 李经松, 王殿佑, 李 川, 陈朝晖

北京控制工程研究所, 北京 100190

0 引 言

航天器控制系统,即航天器姿态轨道控制系统的简称,主要负责航天器的姿态测量与控制、轨道计算与轨道机动、帆板驱动机构控制等工作,为航天器的关键分系统.航天器控制软件运行于控制系统计算机(软硬件共同组成控制器),与敏感器、执行机构等一起构成“测量数据输入-算法计算/数据处理-控制指令输出”的嵌入式实时闭环控制系统.

当前,航天器控制软件研制主要面临以下问题:一、主要以文档和自然语言的方式传递、描述需求与设计,通常存在需求描述不准确,需求理解二义性等问题;二、对于软件需求与设计的验证工作只能在软件编码完成后实施,验证工作滞后,不能尽早发现需求与设计中存在的问题,从而造成型号质量成本增加;三、软件规模与复杂度呈快速增长趋势,手工编写代码的方式逐渐无法满足航天器控制软件高质量快速交付的需求.开展面向航天器控制软件的基于模型设计研究,探索工程应用适用流程,促进宇航软件研制模式的转型升级.

基于模型的设计(model based design,MBD),已在航空航天领域(波音、霍尼韦尔)、汽车领域(奔驰、丰田)的系统设计及实现中广泛采用,技术发展成熟,积累丰富的工程经验.目前,工业界已有许多成熟的建模工具或建模方法,例如,UML、SysML、MATLAB/Simulink、SCADE、Modelica等,每一类工具或方法都具有各自特点与优势,覆盖系统设计、算法设计、仿真验证、代码生成等多个方面.其中,UML提供了较强的软件接口及行为抽象描述方法,主要适用于面向对象设计的建模; SysML是UML在嵌入式系统领域建模方法的扩展与演化,主要作为系统级模型开发工具使用;MATLAB/Simulink建模工具在产业界或学术界被广泛应用,具有丰富的专业模型库,方便用户快速构建系统原型,适合前期控制律的设计、分析和参数调优,支持自动生成代码及多阶段在环测试验证,适用于嵌入式软件建模开发工作;SCADE工具能够覆盖嵌入式实时软件模型化开发的全过程,也适用于嵌入式软件建模开发工作;Modelica主要适用于物理系统仿真建模,不适用于软件建模.

航天领域工程应用,NASA在2000年以前就已经开始探索MBD在航天系统开发领域的应用,先后在DeepSpace-1卫星、勇气号和机遇号火星探测器上成功应用.在Orion飞船GNC系统设计开发过程中,MBD技术得到全面应用并且通过飞行测试,资料显示Orion飞船的GNC系统应用软件70%以上的代码由模型自动生成,MBD技术的应用有效克服任务经费短缺及开发进度紧张的问题.NASA的MBD工作主要选用MATLAB/Simulink工具集,基于MATLAB/Simulink的嵌入式软件典型开发V字模型如图1所示.

图1 基于MATLAB/Simulink的嵌入式软件开发V字模型Fig.1 The V model of embedded software development based on MATLAB/Simulink

本文首先针对航天器控制软件的嵌入式特点进行分析,引出嵌入式软件模型驱动开发时代码胶合这一显著问题;其次开展面向航天器控制软件的模型架构研究,阐述模型架构设计与规范化定义;再次,作为模型架构的重要支撑,开展模型库研究,介绍模型库建设方法与形成成果;再次,探讨基于模型架构的软件研制流程;最后,本方法在系统应用介绍及分析总结.

1 问题分析

航天器控制软件的运行环境为嵌入式计算机,具有强实时性、算法密集、时序复杂、接口多样、运行资源受限等特点.为适应系统以上特点,嵌入式控制软件MBD开发通常将模型驱动方式与传统开发方式相结合,模型驱动方式的便捷高效更侧重于算法与逻辑功能的设计与实现,但对于通讯数据处理、操作系统接口、硬件底层驱动等功能的应用优势并不明显,这部分功能更适合于手写编码实现[1].针对航天器控制软件的MBD/非MBD实现方式梳理如图2所示.

自动生成代码与手写代码的胶合操作不可避免,代码胶合普遍存在接口变量/函数对接映射、全局变量/函数的共享、硬件接口访问时序、任务/中断调用时序等操作,若胶合接口识别不全或胶合操作设计不合理将会导致软件错误;由于软件需求不断增加或改变,每次算法逻辑模型的变化都可能重新进行代码胶合操作,从而增大问题发生概率.因此,代码胶合问题在MBD开发过程比较突出.

图2 航天器控制软件的MBD/非MBD实现方式划分Fig.2 The division of MBD/non-MBD implementation mode of spacecraft control software

文献[2]中针对代码胶合过程介绍了3种常见形式:模型采用默认设置生成代码,然后手动编写所有接口的胶合代码进行胶合操作;模型采用Simulink提供的“信号对象”机制实现数据对象与信号的映射,所配置生成代码仅需手动编写少量函数接口代码进行胶合;模型采用“隐含”全局变量/函数,在模型内部调用了手写代码的变量/函数,既需要手动编写胶合代码又需要配置引入既有手写代码.前两种形式的应用场景为简单接口的系统模型,第三种形式的应用场景为复杂接口的系统模型.文献[3]中介绍通过C-Mex S函数来编写底层硬件驱动代码,实现硬件驱动模块与算法逻辑模块在Matlab/Simulink环境中的同步开发,减少代码胶合工作量,降低开发成本.文献[4]中简要介绍汽车天窗控制器设计时自动生成代码与手写代码的胶合方法,胶合过程特别强调定时器时钟周期与模型仿真固定步长的一致性,以及模型输入、输出变量与硬件接口的对应性.

提出一种基于模型架构的航天器控制软件研制方式,通过模型封装方式将既有代码资产或新编写代码嵌入到软件模型驱动框架,简化或减少代码胶合过程.以软件模型驱动框架为主体,开展整个软件功能的仿真与验证、MBD实现功能与非MBD实现功能的接口验证、自动生成代码、编译链接形成可执行文件等过程,此方法适用于底层驱动程序或非MBD实现功能相对稳定而算法功能变化频繁的软件项目,减少代码胶合工作量.

2 模型架构设计

随着软件系统规模和复杂性的不断增加,软件系统体系结构设计的重要性已远远超过特定算法和数据结构的选择,良好的体系结构设计是保证系统成功的关键.同理,基于模型的软件研制方式,模型架构的重要性在工程应用过程中逐渐凸显,Orion飞船GNC系统模型驱动开发标准中明确规定了模型架构的分层结构形式,明确了Project(项目)、Domain(域)、Rate Groups(仿真速率组)、CSU(computer software unit)、Subsystem(子系统)等层次划分关系,模型架构示意图如图3所示[5-6].

图3 Orion飞船GNC系统模型架构Fig.3 Spaceship Orion’s GN&C model architecture

借鉴Orion飞船GNC系统模型架构定义形式,为了更准确地表示模型架构组成,严谨地定义组成元素关系,本文的模型架构设计从层次划分、功能模块、约束条件3个方面对模型架构进行刻画,其中,功能模块包括功能粒度、仿真速率、接口关系以及模型引用等属性.模型架构的规范化定义如下.

%模型架构组成元素GNC_MA = {layers, functions[granularities, rates, interfaces, reference], constraints}%模型架构各组成元素定义layers = functions=constraints=%模型架构中功能元素属性定义granularities=rates=interfaces=reference=

模型架构的形式定义,一方面明确组成元素,定义模型架构的物理组成及逻辑结构.模型架构设计依据模型的功能、速率、过程与数据等特性,将层次元素划分为功能层、调度层、子功能层、控制流层、选择层、数据流层等6个层次,构造松散耦合结构形式,通过分层来化简模型,使得各层专注于本层模型的实现与封装.层次元素具体定义形式如表1所示.

表1 模型架构层次元素定义Tab.1 The definition of hierarchy elements in model architecture

另一方面规范组成元素之间的约束关系.约束条件选用一阶谓词逻辑来描述,定义如下:

(∀f)(f∈functions)⇒(∃g)(∃r)(∃i)((g∈granularities)∧(r∈rates)∧(i∈interfaces))(1)(∀f)(f∈functions)⇒(∃l)(l∈layers)(2)(∀f)((f∈functions)∧(g∈granularities)∧(f.g.id<3))⇒(∃r)((r∈reference)∧(r=Use))(3)

如上定义,约束条件(1)的含义表示模型架构中任意一个功能模块,必然具有明确的粒度类型、仿真速率及接口关系等属性;约束条件(2)的含义表示模型架构中任意一个功能模块,必然具有明确的层次位置;约束条件(3)的含义表示模型架构中任意一个大于模块粒度的功能模块,必然使用模型应用方式,以此来提高模型架构的清晰可用性.随着模型架构设计的逐渐成熟,约束条件也将逐步完善.

3 模型库设计

模型库作为基于模型设计的基础,积累及管理成熟可靠并且方便复用的软件功能模型资产,为模型架构的实施提供构件支撑.建设面向本领域的算法模型库是当前国内外航空、航天、汽车等领域的普遍做法,这对于提高算法模型成熟度,提升软件可靠性及研制效率都起到关键作用[7].

根据航天器控制软件的特点,模型库设计既要满足算法模型的易用性,又要考虑高安全关键系统代码生成的可靠性.建设面向航天器控制领域的标准模型库,覆盖基础数学运算、小粒度算法功能模块,以及定姿算法、控制算法、轨道计算等大粒度功能模块.

创建自定义模型库的过程:首先,创建一个空白的库模型文件,保存模型文件为GNCLibs.slx;其次,将待纳入模型库的模块或子系统集中拷贝至此模型文件中;再次,编写slblocks.m脚本,实现将自定义库添加至Simulink的库浏览器中,完成自定义模型库的建立.slblocks.m脚本格式如下所示[8-9].

%slblocks.m脚本文件functionblkStruct = slblocks%功能:定义面向航天器GNC系统的Simulink 模型库Browser(1).Library='GNCLibs';Browser(1).Name='航天器GNC系统通用模型库';Browser(1).IsFlat=0;blkStruct.Browser=Browser;%EOF

所创建的航天器控制领域通用模型库如图4所示,将常用的算法计算及逻辑处理功能模块进行抽象封装,统一纳入模型库,后续亦可以根据工程需要对模型库进行动态的删减、扩充与完善.

图4 航天器控制领域通用模型库Fig.4 General model library for spacecraft control

航天器控制领域通用模型库的建设将有效推进模型驱动开发方式的实施,提高成熟可靠软件资产的高效管理及复用能力,提升高可信航天器控制软件研制水平,进而提高航天器控制系统的可靠性、安全性.

4 基于模型架构的软件研制

由于定姿算法、轨道计算等数值计算及数据有效性、故障诊断等逻辑判断适用于MBD实现方式,则通过建模、验证、精化、自动生成代码等步骤生成对应软件代码;对于底层驱动、硬件资源访问等适合手写代码开发的功能,模型架构为其提供便捷的集成接口,实现将手写代码的模型封装,嵌入到软件系统一体化模型,减少或消除代码胶合工作量,例如C Mex S函数(包括S-Function Builder、Legacy Code Tool等)或C-Caller(C代码调用模块)等方式.以下示例通过Legacy Code Tool方式将既有手写代码数学函数sin_Math封装为Simulink模型的操作示例,执行脚本将sinMath.h与sinMath.c中实现的C语言函数sin_Math生成为sfun_sin_Math.c及动态可执行文件sfun_sin_Math.mexw64,最终生成名为sfun_sin_Math的S函数.其中S函数的初始化M脚本文件sinMath.m如下所示.

∥M script: sinMath.mlct_spec = legacy_code(“initialize”);lct_spec.SFunctionName = ‘sfun_sin_Math’;lct_spec.HeaderFiles = {‘sinMath.h’};lct_spec.SourceFiles = {‘sinMath.c’};lct_spec.OutputFcnSpec = ‘int32 y1=sin_Math(uint32 u1)’;legacy_code(‘sfcn_cmex_generate’, lct_spec);legacy_code(‘compile’, lct_spec);legacy_code(‘slblock_generate’, lct_spec, ‘lct_model’);

基于模型架构的软件研制方式与传统开发方式相比,能够较好地适应算法设计与验证、软件设计与验证并行开展,有利于算法设计的高效传递以及软件设计的尽早验证.航天器控制软件两种开发方式对比如图5所示.

基于模型架构将软件模型驱动开发过程进行集成,覆盖模型架构设计、模型库、模型设计、分析与验证、手写代码嵌入、代码自动生成以及多级在环验证等软件研制流程.以模型架构统一管理维护整个软件设计与实现状态,通过配置TLC文件(Target Language Compiler)方式一键实现模型自动代码胶合、自动生成代码、编译链接、生成可执行代码[10-11].

基于系统总体、算法方案、软件设计、质量管理等多方的协调合作,逐渐形成基于模型架构的航天器控制软件研制方式,推进建设基于模型架构的航天器控制软件通用研制流程与技术体系,需要满足如DO-178C、DO-331等相关软件开发标准[12-13].通用研制流程简要示意如图6所示.

如图6中,Q1、Q2、Q3表示质量控制点,Q1:针对模型架构设计、模型设计正确性及有效性开展评审;Q2:针对手写代码的模型封装设计、软件系统模型的仿真有效性做统一审查;Q3:开展项目验收评审,包括模型生成代码、编译生成可执行文件、软件配置项测试、模型与代码走查、软件分系统测试、第三方评测等内容.

图5 航天器控制软件传统开发方式与基于模型架构开发方式对比Fig.5 Comparison between traditional development method and model architecture based development method of spacecraft control software

图6 基于模型架构的航天器控制软件通用研制流程Fig.6 An general development process of spacecraft control software based on model architecture

5 结 论

本文所研究方法已在某小卫星型号姿轨控软件初样研制过程中实施应用.首先,基于Matlab/Simulink工具集创建姿轨控软件系统的模型架构,模型架构主要实现模型层次及功能模块划分;其次,针对姿轨控算法方案中的模式管理、姿态确定、姿态控制、轨道计算和系统故障诊断五大部分内容,开展模型设计与模型验证工作;再次,将遥控遥测、硬件操作、任务调度、接口通讯等功能模块的代码封装为模型嵌入到模型架构中,统一进行整个软件系统模型的仿真验证,降低代码胶合操作复杂度;最后,生成可执行文件,后续开展软件配置项测试及软件分系统测试等工作.采用MBD方式自动生成C代码合计2.2万行左右,占软件总规模的40%左右,整个软件满足系统功能及性能需求.工程应用表明,基于模型架构的航天器控制软件研制方式,具有算法与逻辑功能实现直观准确、算法设计与软件设计验证提前、代码自动生成等优点,另外,借助模型库显著提高成熟算法模型复用效率,能够整体提升航天器控制软件的可靠性及研制效率.

本文提出一种基于模型架构的航天器控制软件研制方式,实现基于模型架构的建模、仿真、代码胶合、代码生成与测试验证的软件模型化研制全流程,促进软件研制模式转变,提升型号研制需求精确描述、设计验证前移、软件快速交付的能力,满足未来智能自主控制航天器的发展需求.

猜你喜欢
功能模块航天器代码
2022 年第二季度航天器发射统计
2021年第4季度航天器发射统计
《航天器工程》征稿简则
2021年第3季度航天器发射统计
神秘的代码
商业模式是新媒体的核心
基于ASP.NET标准的采购管理系统研究
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
高校二手交易网络平台功能及技术框架分析与设计