基于FMI的卫星数字仿真平台设计及实现
2024-03-12陈欢欢吴洪成王吉旭
陈欢欢, 桑 毅, 张 鹏,2*, 吴洪成, 王吉旭
1. 中国空间技术研究院杭州中心, 杭州 310024
2. 北京控制工程研究所, 北京 100094
0 引 言
卫星是一类涉及机、电、光和热等多学科的典型复杂对象[1].传统的仿真软件只支持特定的领域模型,为了研究多因素耦合下的卫星运行场景,验证系统设计的合理性,需要将卫星运行涉及的多学科仿真模型集成到同一环境下进行联合仿真,但这些仿真模型通常来源于不同的建模仿真工具,由于工具之间的接口不统一,各专业工具构建的模型不能有效地集成到统一的仿真工具中进行联合仿真,导致模型重复设计与开发,不仅耗时耗力而且系统的验证效率也较低[2].因此,亟需一种标准的数据交换接口,来解决仿真模型接口不兼容的问题.
为解决上述问题,2010年1月Modelisar协会推出了一种独立于仿真工具的FMI (functional mock-up interface)接口标准[3-4].依据该标准,各仿真工具只需将各自搭建的模型按照FMI标准导出成FMU(functional mock-up unit),便可实现在任意支持FMI标准的仿真工具中进行联合仿真的目的,从而能够有效利用不同仿真工具及其专业模型库的优势,克服复杂对象仿真过程中多源模型难以实现数据交互的难题,使多源模型在统一的仿真引擎下运行成为可能[5-7].
目前已有众多厂商开始在自己的工具平台上支持FMI模型的导出,如:Simulink、SimulationX、AMESim和MWorks等[2-8].其中,Simulink是美国Mathworks公司推出的一款可视化仿真工具,其特点是模型以可视化图形块的形式存在,且相互之间通过输入输出端口进行数据交互,由于避免了代码编写,仅通过连线方式,就可快速地构造出复杂的系统,因而显著地降低了系统仿真的门槛,目前被广泛用于汽车、工业控制、航空航天和电力系统等领域[8].SimulationX是德国ITI公司开发的多学科建模仿真平台,内部集成有强大的标准模型库,支持Modelica标准以及CAD文件导入等功能,可以直接驱动场景中的三维机械结构进行运动仿真,该软件在研究完整的动作执行过程方面具有显著优势,经过多年的迭代发展,该仿真平台在机械、石油、能源和车辆等领域得到了大量应用.AMESim是德国西门子旗下的一款多学科复杂系统建模仿真平台,广泛应用在液压、机电、冷却和制动等系统中,其仿真平台的最大特点是基于因果关系建模,只有符合匹配关系的2个模型才能实现正确连接,否则将无法连通,因此在该平台上搭建的求解模型错误率较低,另外由于在仿真过程中规定了每个模型的仿真任务,一旦仿真出错,可以基于因果关系,快速定位到故障点,这对于一些大型复杂系统的仿真而言,在提升仿真效率方面具有显著优势.MWorks是中国苏州同元公司基于Modelica语言开发的一款多学科仿真平台,可实现对机、电、液和控等领域的模型进行联合仿真,支持复杂装备全生命周期的开发,其产品功能涵盖:系统设计、仿真验证、模型集成、虚拟测试和协同仿真等环节,已在大飞机、空间站、航空发动机和船舶动力等领域展开了相关应用.总的来说,上述软件所包含的模型库主要由单一功能的数学计算模块组成,对于卫星系统这类复杂对象模型的构建及集成,依赖较强的专业知识,需要耗费大量的时间和人力[9-12].因此将卫星部件模型采用标准化接口进行封装并开发配套的仿真工具套件,是解决卫星部件模型复用性不高及仿真开发效率低的有效手段[13-15].
针对含多领域模型的卫星仿真问题,本文基于FMI接口标准和模型复用技术,构建了一个能够支持卫星数字仿真的工具体系架构,在此基础上,基于模块化思想设计了卫星数字仿真平台,并给出Simulink及C/C++模型的FMI标准封装方法.利用卫星数字仿真平台,搭建了多星运行仿真场景,通过远程过程调用技术,将仿真过程数据推送到可视化平台中,完成对卫星运行场景的可视化展示.
1 仿真工具体系架构
为支持多源异构模型的联合仿真以及基于场景的可视化的需求,整个仿真系统在功能上需具备多源异构模型库的管理、模型之间组态关系的设计、卫星数据的实时采集、任务管理、内核在线计算、数据可视化和过程数据管理等功能.
根据上述需求,本文提出的一种支持多源异构模型联合仿真的架构,具体如图1所示,主要由模型库、卫星数字仿真平台、数据采集接口框架、时序数据库和场景可视化平台等部分组成.其中模型库主要由支持FMI标准的各类模型构成,这些模型可以通过Simulink、CATIA和AMESim等第三方工具导出[4],也可以基于FMUSDK开发包通过手动代码方式生成.卫星数字仿真平台分为前端组态开发工具及后端仿真引擎.组态开发工具的功能包括:模型管理、组态设计、场景初始化、任务构建及任务下发等.仿真引擎的功能包括:根据仿真平台下发的组态任务,分别完成仿真模型的加载和初始化、任务的拆分,从时序数据库获取卫星系统的运行数据并调用模型库的算法,将求解的结果通过RPC技术推送到时序数据库中;对于系统的配置参数以及仿真过程中产生的快照数据则保存到关系数据库中,用于系统还原点的创建与恢复.数据采集接口框架通过工厂模式,将不同通讯协议的上行和下行数据通过该接口进行规范化约束.通过对外提供一套标准的数据访问接口,实现与时序数据库系统的解耦,这样时序数据库系统不需要了解各类型号卫星的具体协议,就可以实现不同协议下行数据的接入以及不同控制指令的上行处理.场景可视化平台的功能是基于内置的三维模型库,搭建仿真场景,利用向时序数据库订阅的目标位号与场景中的三维模型进行关联,驱动场景的模型进行运动仿真,将仿真引擎产生的过程数据进行可视化展示.
图1 卫星仿真软件整体架构图Fig.1 Architecture of satellite simulation software
2 卫星数字仿真平台设计
构建仿真用的卫星部件模型是准确估计卫星各项功能可靠性的基础.本文基于模块化的设计思想,将卫星部件模型按类型划分为:敏感器、控制器、执行机构、动力学和遥控遥测等类型.在参数化系统仿真中,模型之间的信息交互是关键,为实现模型数据的正确传输以及降低后期系统建模的难度,本文定义了一套标准的模型数据交换接口,利用该接口,将卫星部件模型映射为图形化的功能模块并通过端口之间的连线实现数据传输和卫星模型的快速组态.在端口与卫星部件模型参数的绑定方面,利用参数数据共享的方法,实现部件模型数据的单向传输.
准确掌握每个模型库的使用特性是正确构建卫星仿真系统的前提,对此,需要将卫星模型库依据继承关系进行分类,本文将卫星模型库划分为2种类型,分别是:功能块基类和子系统基类,这2种基类都继承于功能块接口类,具体如图2所示.其他所有类型的功能块,如传输信号类型的信号类功能块,统一由功能块基类派生.对于新扩展的信号类型的功能块,如:数学功能块、支持FMI标准的FMI功能块和敏感器的功能块等,可通过信号类功能块进行派生;数学类型的功能块则可以通过数学功能块来派生.通过上述基类,对新增的模型库,依据类型继承关系,可实现对新增模型库的扩展和按类型进行分类管理的目的.
图2 仿真引擎的功能块及子系统类图Fig.2 Function block and subsystem class diagram of simulation engine
在仿真过程中,转储快照数据以及对仿真引擎进行启停等管理操作是实现卫星系统进行自动化功能分析的必要环节,针对上述问题,本文通过在子系统中扩展仿真管理接口的方法来实现,这些方法包括:模型库管理、配置文件修改、仿真引擎初始化、启动、暂停、创建还原点和快照恢复等.通过在子系统中实现上述方法,使整个仿真内核在功能上具备模型的组态管理和在线仿真能力.此外,针对仿真引擎与场景可视化平台之间的数据交互问题,本文定义了一个网络接口类,借助该接口类派生出一个场景可视化功能块,利用该功能块的通信协议适配器,将仿真结果直接推送到时序数据库指定的位号中,当时序数据库一旦检测到被订阅位号的数据有更新事件产生时,时序数据库将立即启动数据更新逻辑,将订阅的位号数据直接发送到场景可视化平台中,达到系统低耦合、功能高内聚的目的.
3 FMI模型封装流程
本文将不同轨道的多颗卫星运行的场景作为仿真对象,对每颗卫星姿轨控系统包含的各功能模块进行建模.卫星的姿轨控系统主要由敏感器、执行机构、控制器和动力学组成[16-17].敏感器负责测量卫星运行的轨道和姿态信息、执行机构根据控制器指令产生驱动卫星轨道和姿态运动的力和力矩,动力学反映卫星本体受到力和力矩作用后的运动状态变化,控制器根据敏感器测量的轨道和姿态信息生成控制指令驱动执行机构[18-20].除了卫星姿轨控系统包含的功能模型外,仿真案例中还要包含星时和可视化通信模型.为了说明所需的模型来源于不同建模工具,本文通过Simulink环境完成敏感器、执行机构、控制器、动力学和星时模型构建和FMI模型的封装;通过C/C++语言手动编码的方式建立可视化通信功能模型,并利用FMUSDK开发包和7z压缩工具完成FMI模型的封装.
3.1 Simulink模型封装
图3(a)为Simulink环境搭建的动力学仿真模型,模型输入力和力矩,模型输出为卫星的姿态和位置,通过该模型.图3(b)为星时模型,用来为模拟卫星的星时系统.
图3 动力学模型和星时模型Fig.3 Rigid body dynamics model and sidereal time model
为了将Simulink模型封装为FMI模型,在Simulink工具中安装CATIA FMI Kit插件,利用该插件,将前述设计的动力学模型、星时等模型导出成FMI模型,具体过程如图4所示.
图4 Simulink工具导出FMU模型过程Fig.4 Export FMU model via Simulink
3.2 C/C++模型封装
可视化通信模块的主要作用是负责将仿真引擎的计算结果,依据场景可视化平台的通信协议,将场景中的三维模型与仿真过程数据进行绑定,用于驱动场景模型进行运动模拟.因此场景可视化平台通信模型主要任务为:数据转换和事件推送,其中数据转换用于从仿真结果中抽取目标对象的实时数据,然后通过量纲转换和内置的数学运算算法,将对象数据转换为三维模型的空间坐标数据或系统的运行数据等;事件推送则是用于将数据转换后的信息通过GRPC(google remote procedure call)接口推送到时序数据库中,随后时序数据库监测到订阅的位号有更新事件时,立即将更新后的数据推送给可视化软件中,达到驱动三维模型运动模拟和过程监控的目的.
网络模块与具体业务耦合性较高,需要采用手动编码方式来实现.在本示例中,数据转换和事件推送的业务逻辑在多星网络模型库(multiSatNetmodel)中实现,FMI模型的封装则是通过FMUSDK开发包提供的模板库来实现,具体封装过程如图5(a)所示.需要注意的是模型配置文件(modelDescription.xml)中描述的属性信息、模型变量信息以及模型名称和全局唯一标识符等要与MultiSatNetModel中对应的变量值保持一致,否则在仿真过程中会出现运行异常问题.在确认模型配置文件成功之后,可以将编译后生成的动态库文件以及依赖的其他资源文件(resources)利用7z工具,选择zip压缩算法直接压缩为FMI模型,但是需要注意的是,由于上述压缩过程通常需要先将模型配置文件、资源文件和动态库文件组织好,然后再通过7z工具手动方式打包,整个过程较为繁琐,为了简化上述打包过程,在本实例中则是利用vc工程的后处理事件,通过自动化脚本,在编译之后,自动地将模型配置文件、动态库文件和资源文件,一键拷贝到指定文件夹下,然后通过自动化脚本调用7z工具并选择zip压缩算法直接生成FMI模型,vc工程的具体配置如图5(b)所示.
图5 基于编码方式生成FMI模型过程Fig.5 FMI model generated by coding
4 多星运行仿真实例
在卫星仿真平台中搭建多星运行仿真实例,需要经历4个步骤:模型导入、组态设计、场景配置和仿真运行.
4.1 模型导入
调用仿真模型的数值运算,统一由仿真引擎负责执行,由于仿真引擎内置模型的数据交换接口与FMI标准接口存在一定的差异,因此,在正式仿真之前首先需要将FMI模型适配为仿真引擎内部标准的模型.为此,需要通过一个自定义类模板的方法,基于FMI模型自带的配置信息,动态生成一个模板文件,然后通过自动化脚本,利用gcc/vc编译器,在FMI模型库的基础上,生成符合仿真引擎内部标准的中间模型库,并将新生成的模型信息添加到组态开发工具的模型库中,最终完成模型的导入工作.
4.2 组态设计
依据模型间信息流向,通过连线的方式完成模型的组态设计.为了提高模型的复用率,本文在设计上,将多星的组态工程划分为2部分,分别是单个卫星子系统的组态和多星组态.其中,对于单颗卫星的组态,通过在组态设计工具中创建一个子系统,然后将前述导入的FMI模型拖入到设计器中,根据模型之间的依赖关系,通过连线的方式将动力学、敏感器和执行机构等模型组织起来,最终完成单颗卫星的仿真模型的构建,具体如图6(a)所示.在前述的子系统模型的基础上,将单颗卫星模型作为一个独立的卫星组件模型,依次拖入到设计器中并与其他组件模块关联起来,共同构成一个多星仿真组态,具体如图6(b)所示.
图6 仿真模型的组态设计Fig.6 Configuration design of simulation model
4.3 场景配置
通过组态开发工具配置各模型仿真初始条件(包括端口初始值及内部状态变量的初值),配置仿真开始时间、结束时间、仿真步距和仿真速度等参数.场景可视化平台需要配置卫星三维模型的导入和协议绑定2部分内容,其中协议绑定主要用来将可视化通信模型的数据与卫星三维模型进行关联,实现三维场景模型的驱动.
4.4 仿真运行结果
场景配置完成后,在启动仿真引擎进行模型仿真时,组态开发工具首先将组态工程下发到仿真引擎中.仿真引擎将根据下发的组态工程中各模型间连线,由仿真引擎内部的任务管理器生成具体的仿真任务,并将这些任务加入到任务池中.仿真引擎通过内部的任务执行器,从任务池中取出一个待执行的计算任务并为该计算任务关联一个工作线程,借助该线程对仿真模型逐个调用,当仿真模型内部的算法调用结束后,仿真引擎将运算后的结果立即更新到模型对应的快照参数列表上,完成一个仿真周期的计算.每完成一个仿真周期,仿真时间累加一个仿真步距,以此类推,直至结束时间,完成整个工程的仿真.为了便于对仿真过程进行实时监控和历史数据分析,仿真引擎在执行一个仿真周期之后,将产生的仿真结果(端口的实时值和内部状态变量的实时值)加入到一个历史数据队列中.当仿真结束之后,组态开发工具能够基于快照参数列表和历史数据队列,对端口的实时值及端口的历史数据进行可视化展示和分析,具体如图7所示.
图7 仿真运行状态过程监控Fig.7 Monitoring of simulation state
利用场景可视化软件,三维卫星模型将依据仿真引擎的计算结果,严格遵从卫星模型的仿真运行数据,对卫星的空间位置和姿态进行可视化动态展示.通过该三维可视化软件能够方便地对单颗和多颗卫星的运行姿态和位置进行实时跟踪与监控,具体如图8(a)和(b)所示.
图8 可视化软件多星仿真Fig.8 Multi-satellite simulation via visualization software
5 结 论
本文基于FMI标准数据交换接口和模型复用技术,构建了支持卫星数字仿真的工具体系架构,在此基础上,基于模块化思想设计了卫星数字仿真平台,并给出了Simulink及C/C++模型的FMI标准封装方法.利用卫星数字仿真平台,搭建了多星运行仿真场景,通过远程过程调用技术,将仿真过程数据推送到可视化平台中,完成对卫星运行场景的可视化展示.通过仿真案例说明,卫星仿真平台可以对模型运行状态及变化趋势进行监控,同时,可视化平台可以对卫星的运行轨道及姿态等数据实时动态显示.本文提出的卫星数字仿真平台不仅支持卫星姿轨控仿真,同时也可作为其他航天器系统或应用场景的数字仿真开发环境,为系统、整星及星座模拟器的开发提供工具支撑.