如何与两个 FMU 模型进行联合仿真

计算科学 模拟 fmi 开放模型
2021-12-08 19:50:26

我有两个用不同的模拟工具开发的 FMU。我想通过一些变量将它们连接起来,并使用开源工具 OpenModelica 运行联合仿真。由于两个 FMU 都存在不连续性,因此这种联合仿真必须相当严格。

那可能吗?。你能提供一个简单的样本吗?

1个回答

模型交换与协同仿真

这取决于您如何导出 FMU:您可以使用 FMI 进行模型交换或使用 FMI 进行协同仿真。

在模型交换场景中,FMU 仅包含模型而没有求解器。因此使用了导入模拟器的求解器。

在联合仿真场景中,FMU 包含模型和求解器。在这里,导入模拟器充当协同模拟的主人。

在这两种情况下,您都需要一个支持导入相应 FMU 类型的模拟器。OpenModelica 从 1.8.0 版本开始支持导入模型交换 FMU。因此,如果您有两个使用 FMI 导出的 FMU 用于模型交换,您可以将它们都导入 OpenModelica 并使用 OpenModelica 求解器对其进行仿真。请注意,严格来说,这不是真正的联合仿真,因为只涉及一个求解器。

如果您想为每个 FMU 使用单独的求解器(即执行真正的联合仿真),那么您应该只将其中一个模型导出为使用 FMI 进行联合仿真的 FMU。将该 FMU 导入到另一个模型的模拟器中。请注意,OpenModelica 1.8.0 不支持 FMI 进行联合仿真。

模型交换示例

这是一个工作示例(在 Dymola 中测试,我现在没有安装 OpenModelica):

文件TestFMU1.mo

model TestFMU1
  parameter Real p = 1.0;

  connector TestOutputConnector
    output Real value;
  end TestOutputConnector;
  TestOutputConnector c;

equation 
  c.value = p;

end TestFMU1;

文件TestFMU2.mo

model TestFMU2
  Real result;

  connector TestInputConnector
    input Real value;
  end TestInputConnector;
  TestInputConnector c;

equation 
  result = c.value;

end TestFMU2;

将这两个都导出为 FMU。然后将它们导入并组合起来,如下所示:

model TestConnection
  TestFMU1_fmu OutputFMU;
  TestFMU2_fmu InputFMU;
equation 
  connect(OutputFMU.c_value, InputFMU.c_value);
end TestConnection;

OpenModelica

OpenModelica 目前似乎不支持同时模拟两个 FMU。这是一个已知的错误