2. 多领域系统建模语言与标准
多领域虚拟样机的集成,本质上要解决三个层面的问题:用什么语言描述模型、用什么格式交换模型、用什么接口把模型连起来联合仿真。Modelica、FMI、SysML 分别在这三个层面扮演不同角色,它们不是互相替代的关系,而是互补的标准体系。理解它们各自"管什么、不管什么",是搭建多领域集成方案的前提。
一、三类标准的分工定位
Modelica 是一种面向对象的、基于方程的建模语言。它的核心思想是"声明式建模":用户描述系统的物理方程(微分方程、代数方程),而不是描述求解步骤。求解器负责把方程整理成可计算的形式。Modelica 天然支持多领域——机械、电气、热流体、控制等库可以混合使用,因为不同领域的连接都归结为"势变量相等、流变量求和为零"的广义基尔霍夫定律。
FMI(Functional Mock-up Interface) 是一个模型交换与联合仿真接口标准,它不规定模型内部怎么建模,只规定模型对外暴露什么接口。一个符合 FMI 的模型被打包成 FMU(Functional Mock-up Unit),内部可以是 Modelica 编译结果、Simulink 模型、C 代码甚至商业软件导出的黑盒。FMI 让"不同工具建的模型"能在同一个仿真环境里协同运行。
SysML(Systems Modeling Language) 是 UML 面向系统工程的扩展,用于系统架构与需求建模。它描述的是系统的组成、接口、行为、需求和参数约束,通常不直接参与数值仿真。SysML 的价值在于把"系统怎么分解、模块之间怎么交互"讲清楚,为后续 Modelica/FMI 的模型划分提供架构依据。
二、Modelica 的语法要素
Modelica 模型的基本单元是 model 或 block,内部由变量声明、方程段和连接组成。关键语法要素包括:
- 变量类型:
Real(连续量)、Integer、Boolean、parameter(仿真前确定的参数)、constant(常量)。 - 方程段:用
equation声明代数/微分方程,用=表示等式而非赋值。方程数量必须与未知量数量匹配,否则模型欠定或过定。 - 连接器:通过
connector定义接口,典型如Pin(电气)、Flange(机械转动)。连接时自动生成"势相等、流和为零"的方程。 - 继承与替换:
extends复用父类,replaceable支持在实例化时替换子模型,便于搭建可配置的模型库。
下面是一个简化的直流电机电枢回路示例,用于说明方程建模的写法:
model DCMotorArmature
parameter Real R = 1.2 "电枢电阻(Ohm)";
parameter Real L = 0.005 "电枢电感(H)";
parameter Real Ke = 0.05 "反电动势系数(V·s/rad)";
Real u "端电压(V)";
Real i "电枢电流(A)";
Real omega "角速度(rad/s)";
equation
u = R*i + L*der(i) + Ke*omega;
end DCMotorArmature;
注意 der(i) 表示电流对时间的导数,Modelica 工具会自动选择求解器处理这个微分方程。参数 R、L、Ke 是仿真前设定的,i、omega、u 是随时间变化的变量。
三、FMI 的两种模式与接口规范
FMI 定义了两种运行模式,这是实际集成中最容易混淆的地方:
| 模式 | 含义 | 典型场景 |
|---|---|---|
| Model Exchange(ME) | FMU 只提供方程/导数,求解器由主仿真工具提供 | 需要统一求解器、强耦合系统 |
| Co-Simulation(CS) | FMU 自带求解器,按通信步长与外部交换数据 | 工具封装、黑盒模型、弱耦合 |
FMI 接口的核心函数包括:fmi2Instantiate(实例化)、fmi2SetReal/fmi2GetReal(读写变量)、fmi2DoStep(推进一个通信步长)、fmi2Terminate(结束)。在 CS 模式下,主控工具在每个通信步长调用各 FMU 的 fmi2DoStep,并交换输入输出变量。通信步长的选择直接影响精度和稳定性:步长过大,耦合变量在步内被冻结,可能引入误差甚至发散;步长过小,则调用开销上升。
四、SysML 与模型集成的衔接
SysML 的 块定义图(BDD) 描述系统层级分解,内部块图(IBD) 描述块之间的端口连接,参数图(Parametric Diagram) 用约束块表达参数之间的数学关系。在多领域集成中,SysML 通常先给出系统架构:哪些子系统、各自接口是什么、哪些量需要跨系统传递。这些接口和参数随后映射为 Modelica 的连接器或 FMI 的输入输出变量。
例如,一个"电动助力转向系统"在 SysML 中被分解为电机、减速器、ECU、传感器四个块,IBD 标出电机与减速器之间的转矩/转速接口。到了 Modelica 层,这个接口就对应一个转动连接器;到了 FMI 层,转矩和转速就成为两个 FMU 之间交换的 Real 变量。这种"架构—模型—接口"的逐层映射,是保证多领域集成一致性的关键。
五、标准协同关系图解
下图给出三类标准在虚拟样机集成流程中的协同关系:SysML 提供架构与接口定义,Modelica 提供物理模型与方程,FMI 提供跨工具交换与联合仿真接口,最终汇聚到联合仿真环境中运行。
六、集成实践中的关键判断
在实际项目中,选择哪种标准组合取决于集成目标。若所有模型都能在同一 Modelica 工具内建立,直接用 Modelica 连接器集成最简单,求解器统一、精度可控。若模型分散在不同工具(如 Simulink 控制器 + AMESim 液压 + 自研 C 代码),则必须用 FMI 封装为 FMU,此时要重点确认:各 FMU 的输入输出变量名是否与接口定义一致、单位是否统一、通信步长是否匹配系统动态。SysML 则在整个过程中作为架构基线,防止模型划分与系统分解脱节。
一个常见的集成检查清单如下,可在搭建联合仿真前逐项确认:
- SysML 架构中的每个接口,是否都有对应的 Modelica 连接器或 FMI 变量?
- 跨 FMU 传递的变量,单位、量纲、正方向是否一致?
- CS 模式下通信步长是否小于系统最快时间常数的 1/5~1/10?
- 是否存在代数环?若有,是否已通过延迟或迭代处理?
- 各 FMU 的初始条件是否协调,避免仿真启动瞬间出现大跳变?
掌握这三类标准的分工与衔接方式,就能在虚拟样机集成中做到"架构有依据、模型有语言、交换有接口",而不是把不同工具的文件简单拼在一起。