建模标准(modeling standards)
由于猎户座项目是nasa利用mathworks软件将mbd流程充分利用在大型载人航天工程上,因而建立了一系列建模标准以辅助开发者。该标准文件源自于maab(matlab automotive advisory board)标准和honeywelllaserref6工程。通过cev pad abort 1 (pa-1)飞行测试工程获得的经验也包含其中。然而,大部分的内容都是来自开发过程本身。该标准是不断变化的,根据开发者的反馈及自动生成代码的性能不断进行改进。
该标准的主要目的是增强由一大批开发人员设计开发的众多模型的一致性、可读性、效率和兼容性。
猎户座gn&c matlab/simulink标准文档共有155条标准(参见www.mathworks.com/aerospace-defense/standards/nasa.html)。
为完善猎户座项目开发标准,建立了一系列model advisor脚本测试文件以简化对许多非客观标准的检查。这些检查可以自动运行以确定任何违反标准的建模。针对猎户座项目155条标准,目前共有68个模型检查文件。
一旦自动生成代码出现错误或不兼容情形,模块库将被修正或者重新修改标准以避免这些错误或者不兼容。许多时候模型检查也被写来自动寻找合适的一种方式。由于模型标准文档和模型检查要进行大量的修正,这些文件的可配置性是必须的。
模型库(modeling library)
simulink模块标准包含许多与rtw embedded coder或gn&c结构不兼容的模块。为了弄清楚哪些模块是兼容的,该团队搭建了猎户座项目库(orion library)。猎户座项目库(orion library)只包含与embedded coder和固定步长求解器兼容的模块,符合建模标准,且自动生成的代码符合该项目的sdp协议。而且,这些模块不包含需要从工作区读取变量/参数的模块,这是因为根据上文所述,猎户座架构不支持这些模块。该模块库(图9)为gn&c和fsw开发者提供了一组标准工具,这些工具与建模标准兼容并可以与猎户座架构进行无缝对接。
图9猎户座模块库
在设计猎户座模型库和建模标准时,其设计思想是模型应该不言自明。用户应该可以评估模型和理解算法的所有细节而无需点击进入模块内部观察模块设置或者对模块的功能有先验知识。数据类型、集成类型和数据限制等都应该可以单从模块框图即可清楚了解。模块的显示插图应该可以传达模块的功能。
simulink工具允许为每个模块创建独特的gui界面。猎户座模块库利用这些独特的gui界面来隐藏某些在模型运行过程中由于兼容性和自动代码生成的考虑要保持恒定的设置(例如采样速率)。
simulink模块的另外一个问题是不是所有重要的模块参数都可见。例如,标准simulink的“常值模块”可以设置输出的最大最小限定值,但是这个限制并未出现在模块图标上。主要判断该设置是否被利用的方式是打开该模块的对话框。当模块被打印出来或者在文档中浏览时,查看模块的对话框是不可行的。由于这些模型是不言自明的,他们应该是尽可能地可读、可描述和透明化。猎户座项目库使用的模块要么拥有不变的隐藏参数,要么模块图标被修改成根据选取的参数自动显示相关的功能。
根据猎户座标准的相关要求,其模块使用颜色编码,以区分模块类型并增加可读性。例如,猎户座gn&c模块库中的eml模块是灰色的,这样可以与其他子系统在视觉上区分开来。
自动代码配置设置(autocode configuration settings)
猎户座项目模型库包括针对自动代码生成的官方配置设置。格式化自动编码有许多选择,许多时候直到分析比较结果之后才会知道某个设置是如何影响生成的代码的。配置设置关注的的重点依次是效率,可测试性和可读性。尽管猎户座项目无需对自动生成代码进行正式评审,针对调试目的保持可追溯性仍然是十分有用的,因此代码的可读性还是很重要的。猎户座项目配置设置主要是通过反复试验方法确定的。该项目运行一些权衡分析,以了解自动代码配置设置的效果。
这些配置设置包括自动生成模型代码并编译该代码。在开发期间,生成代码和编译代码的功能均被用到。这意味着,需要在早期编译过程发现问题,而不是当代码要集成到更大的项目时。
在每个模型自动代码实现后,自动代码生成工具自动对生成的代码进行编译。该选项可以允许用户在模型层面查找编译早期的问题而不是在项目完整代码被编译时再发现问题。
猎户座项目利用“引用配置设置”功能进行仿真和自动代码生成的配置设置。这些设置可以通过基础模型或者所有模型可用的参考设置进行管理。这样可以允许用户在一个工程文件中管理所有模型的配置设置,避免使用户不得不在模型基础上管理配置更改,而这种更改对于cm系统而言可能是不可编译的。这样一来,每次一个单一选项的设置变化,所有模型都必须进行修正。
正如上文讨论的,csu在接线盒层面被集成到系统分区里。由于rhapsody级别代码的面向对象形式,接口需要运用c++(封装)对象。simulink 2010b是包含该对象的版本,并且该团队发现了许多的不兼容性需要攻克。
模型模板(modeling template)
该模型库还包含一个模板文件,如图10所示,被用来生成一个csu模型和csu包含的子系统。这被证明是非常有用的一个工具,可以保证所有模型在一开始就是一致的和兼容的。该模板可以被认为是代表算法设计及功能的一种正式的示意。
该模板包含如下特征:
1) 标准配置设置(通过配置设置参考)。这些配置设置包含针对模型仿真和自定义的自动代码生成选项的设定(参见上文“自动生成代码配置设置”)。
2) 每一层模型的右下方的信息区域用来显示项目名称、版本、作者、csu名称、子系统名称和上级子系统名称等,可以使用户查阅打印的模型。
3) 特定于项目cm工具的版本数据,在每次模型检查时进行自动修正。
4) 模型尺寸约束边界,允许在"8½x11"或"11x17"纸张上打印,不允许更大的尺寸(每一层模型均包含该约束边界)。
5) 标准输入、输出和参数端口存根。
6) 添加注释的注释块图。
图10猎户座gn&c模型模板
培训工具(training on tools)
关于simulink使用的早期培训是快速而简洁的。一周左右的时间用来培训猎户座建模标准的早期版本、猎户座模型库以及早期的原型工作。然而,一个多功能eba还不可用,并且针对闭环仿真连接的ramses-m工具尚未完成。此外,单元测试框架也是不可用的,所以开发人员搭建和测试模型的能力有限。
在那时,只有少数的人员具备丰富的simulink使用经验,团队里大部分人员并不熟悉该工具。用来培训团队人员的标准是比较初级的,并且许多自动代码生成器的相关问题尚不明了。所有这些因素使得开发周期艰难起步。未来的项目应该吸取该项目的教训,首先要准备好开发工具,其次要提供更多关于标准、开发过程、单元测试和通用mbd开发等的完整培训。
算法建模(algorithm modeling)
并不是所有算法都得益于图形数据流的实现。gn&c核心算法非常适合类似simulink的以数据流进行的图形化表示。所有的顶层gnc数据流和许多嵌入式控制律以模块图形式自然地表达出来。不宜用数据流图表示的算法主要包括迭代、复杂的方程、状态机、底层数据操作和面向对象表示等。simulink环境提供相关工具可以将这些算法以嵌入式算法形式表示为图形数据流形式。这些工具包括嵌入式matlab脚本、stateflow和s-function,以调用外部算法代码。最终的针对eft-1的猎户座设计就是混合运用上述语言的成功案例。特别要指出的是,gn&c程序代码是利用面向对象的uml工具完成的,并通过s-function形式嵌入到simulink中。猎户座导航算法充分利用了embedded matlab (eml)在保证simulink顶层和中级数据流图的前提下允许使用矢量和矩阵方程的表达形式。猎户座制导算法充分运用了stateflow功能,利用迭代和eml函数实现复杂的制导方程。针对eft-1,测试stateflow算法中存在的问题得到了很好的解决,但是猎户座项目仍然需要在后续改进中与mathworks进行沟通。最后,猎户座也利用simulink和eml开发了gn&c的敏感器接口。这为gn&c组件设计提供了交付格式和自动代码生成过程的一致性,但在清晰或抽象层面上收获不大。未来的项目或许会考虑针对硬件接口采用手写代码或uml代码,并通过s-function形式集成到simulink工程中。
随着项目的不断成熟以及团队成员对工具使用的优势与限制了解逐渐增多,建立了如表1所示的表格,用来辅助开发者为算法建模使用合适的工具。
表1 simulink语言工具使用标准
在猎户座针对eft-1应用关键性设计审查(cdr)时,gn&c算法得到了很好的定位,以便展开将这些算法从最初功能需求到成熟的图形化模型源文件的转化过程。26个csu模块完整的实现了相关功能,并集成到了ramses,在蒙特卡洛分析中表现良好。这些分析包括200多个可测试单元,这些可测试单元大部分都有符合猎户座sdp标准的修正的复杂指标。