fmi2GetFMUState/fmi2SetFMUState 支持 Matlab/OpenModelica 生成的 FMU?

fmi2GetFMUState/fmi2SetFMUState supported for Matlab/OpenModelica generated FMUs?

我正在尝试测试一个简单的 fmu 来保存和恢复状态。

例如openmodelica:

model modelicatest
input Real In1;
output Real Out1(start=0, fixed=true);
equation
der(Out1) = In1;
end modelicatest;

也适用于 simulink:

我正在使用 FMPy 来模拟生成的 FMU。

但是对于 OpenModelica v1.14.1 生成的 FMU,当我从 FMPy 调用 getFMUState 时出现以下错误:

Exception: fmi2GetFMUstate failed with status 3

对于Simulink(2019b)使用内置导出器生成的FMU,当我运行 setFMUState.

时FMU状态不会重置(即输出值)

只是想知道 OpenModelica 和 Simulink 生成的 FMU 是否支持这些函数?还是 FMPy 问题?

关于 fmi2GetFMUstate/fmi2SetFMUstate,FMI Specification,第 2.1.8 节。状态:

These functions are only supported by the FMU, if the optional capability flag <fmiModelDescription> <ModelExchange / CoSimulation canGetAndSetFMUstate in = "true"> in the XML file is explicitly set to true (see sections 3.3.1 and 4.3.1).

你可以解压fmu文件,看一下modelDescription.xml文件,看看是否设置了flag:如果是false or not set all ,不支持 get 和 set 函数。