1

我有一个简单的 FMU 文件,其中包含一个将 u 作为输入并输出 y 的正弦块。在这种情况下,u 设置为等于时间。在我的 C++ 代码中,我从FMILibrary加载了 FMI 库,并完成了所有必要的步骤,直到我想给我的输入 ua 新的 pi 值(如 3.14)。所以我去了:

fmistatus = fmi2_import_set_real(fmu, &uRef, 1, &pi);
while (timeCurrent < timeEnd){
    fmistatus = fmi2_import_do_step(fmu, timeCurrent , stepSize, fmi2_true);
    timeCurrent += stepSize;
}

即使我试图给它一个新的值,你仍然设置为时间。我错过了什么?

PS。在哪里可以找到有关 FMI 库函数的更详细说明?目前我只能找到输入输出描述或者我又错过了什么。

更新:经过几次试验,我认为这个问题可能是因为我试图重新定义我的方程 u = time。换句话说,当我将 u 变量更改为 openmodelica 中的 RealInput 块时,一切正常。那么如果我真的想重新定义某个方程呢?我需要做什么?

4

1 回答 1

1

您将无法在 FMI 中设置任何变量 - 尤其是不能设置具有绑定方程的变量 - 我假设您的 Modelica 模型具有“u=time;”。您不需要添加“u=time”,而是添加一个没有任何方程的顶级输入(以便导出的 FMI 将其作为输入) - 然后将其连接到正弦块。

详细信息:对于协同仿真 FMI,您可以设置的限制在 FMI2 规范第 4.2.4 节的状态图中。

在 fmi2DoStep 之间,您只能设置具有 causality="input" 或 causality="parameter" 和variability="tunable" 的 Real 变量 - 并且带有方程的输入不符合条件。

在开始集成之前,您也可以为其他变量设置它,但这只是初始化的猜测值 - 不应覆盖“u=time”方程。

于 2017-12-07T08:53:13.670 回答