我有两个用不同的模拟工具开发的 FMU。我想通过一些变量将它们连接起来,并使用开源工具 OpenModelica 运行联合仿真。由于两个 FMU 都存在不连续性,因此这种联合仿真必须相当严格。
那可能吗?。你能提供一个简单的样本吗?
我有两个用不同的模拟工具开发的 FMU。我想通过一些变量将它们连接起来,并使用开源工具 OpenModelica 运行联合仿真。由于两个 FMU 都存在不连续性,因此这种联合仿真必须相当严格。
那可能吗?。你能提供一个简单的样本吗?
这取决于您如何导出 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 目前似乎不支持同时模拟两个 FMU。这是一个已知的错误。