1. 技术背景

1.1. 仿真的基本概念

本文档中,仿真是指用计算机计算,对物理过程进行模拟的方法。通过计算机仿真的手段,能够对被设计产品的数学模型进行模拟研究,估计预期的动态性能,实现基于模型的设计。

首先,需要对被模拟对象的动态物理过程进行数学建模(简称建模),获得简化的数学模型,如常微分方程(ordinary differential equation,ODE),或微分代数方程(differential algebra equation,DAE)等形式。然后,复杂的数学模型表现为多变量的方程组,难以直接给出各变量随时间变化的解析形式,往往需要借助计算机上的通用数值算法,对数学模型进行数值求解(简称求解)。

求解方面,已经有众多成熟的仿真软件工具,将通用数值算法形成模型求解器(solver),如MATLAB/Simulink、LabVIEW、ADAMS、AMESim、SimulationX、Silver等等。

建模方面,随着被研究对象数学模型的复杂度增加,为便于开发、测试与功能复用,将其进行模块化分割成为必须的手段。

反过来,对模块化的部件模型进行接口的连接,才能形成代表被模拟对象的系统仿真模型,称该过程为模型集成(简称集成)。

前面提到的仿真软件工具,一些兼具建模功能,一些仅对模型进行集成,多数软件则兼具建模和集成功能。在对航空、航天器,汽车等复杂的被模拟对象进行数学建模时,其往往包含力学、热学、电学、自动控制和软件等不同领域的设计特征,是一个多学科交叉系统;不同仿真软件所针对的物理领域往往不同,单一软件难以方便地实现多学科交叉系统的建模。因而,需要在不同仿真软件的模块化部件模型集成方面,形成可交换的标准接口,使得在不同仿真软件内建立的模型可以相互导入、导出,实现对多源异构模型的集成和系统仿真。

1.2. 本系统着力解决的问题

目前,主要的模型标准接口为S-Function与Functional Mock-up Interface, FMI。S-Function为Simulink的模型开发接口,应用较为广泛;对于集成已有的C/C++代码,具有Legacy Code Tool, LCT代码导入工具以及图形化的向导工具S-Function Builder;但由于Simulink是商业工具,其他工具仅支持S-Function模型的导出,S-Function模型的导入和求解仅能在Simulink中进行。

FMI是一种还在发展之中的开放接口标准,由国际性的产业联盟维护,已在汽车行业广泛支持。符合FMI接口标准的模型为Functional Mock-up Unit, FMU,其模型端(model slave)与求解端(solver master)的实现都有开源软件实现范例,因而越来越多的工具支持FMU模型的导入、导出以及系统集成仿真。但是,FMI标准的技术细节多,相关工具链自动化程度低,对于技术人员的编程水平要求较高;对于集成已有的C/C++代码,需要熟悉C代码模板的运行流程,定义一维展开的接口变量,完成与已有模型接口数据结构的相互转换,编制FMU描述文件(modelDescription.xml),编译各运行平台下的动态链接库,FMU目录结构的创建,FMU的打包及测试等等工作。一般用户难以实现复杂的功能,使用的便利性不足。

针对使用FMI接口标准集成已有的C/C++代码自动化程度低,开发门槛高等问题,对FMI及S-Function模型接口标准的运行流程进行提炼和抽象,在FMI接口代码模板基础上进行扩展,提供外部资源和定时任务的统一管理接口,形成通用的中间层(图 1.1);开发图形向导式的接口适配工具,能够自动完成已有模型接口数据结构与FMI中一维展开的接口变量间的相互转换,自动生成模型描述文件,并能够一次编码同时支持FMI及S-Function模型接口标准。

../_images/layer.svg

图 1.1 系统功能定位

1.3. 主要功能特性

  1. 用于模型在环仿真(MiL)的C/C++代码集成工具

  2. 简捷、统一,一次编码同时支持FMI及S-Function模型接口标准

  3. 对外部资源及定时任务提供了自动化的管理接口,便于模型中引用

  4. 使用CMake构建系统,可自动适配大多数编译器

  5. 使用Qt图形界面,可运行于大部分操作系统的桌面环境

  6. 与来自IBK的MasterSimulator环境集成发布,便于FMU集成仿真

  7. 生成平台相关的代码,兼容Windows及Linux

  8. 生成的模型可运行在基于Linux的半实物仿真(HiL)系统

对FMI及S-Function模型接口标准的运行流程进行提炼和抽象,在FMI接口代码模板基础上进行扩展,形成通用的中间层; 开发了向导式图形界面,能够辅助用户建立中间层接口函数模板,包括实例化、初始化,步进,重置以及终止,还扩展了外部资源和定时任务的统一管理接口,便于用户在模型代码中引用; 开发了接口解析及代码生成工具,能够递归地解析用户模型定义文件中的接口数据定义,建立已有模型接口数据结构与FMI中所需的一维展开的接口变量间的映射关系; 用户只需一次编写模型定义及实现代码,能够同时支持FMI及S-Function模型接口标准,自动生成FMU模型对应的FMI接口代码文件以及FMU描述文件,同样的信息也用于自动生成S-Function模型对应的LCT接口代码文件以及LCT模型定义文件。