在模拟期间更改FMI变量/功能

时间:2017-12-06 00:32:51

标签: c++ modelica fmi

我有一个简单的FMU文件,其中包含一个正弦块,它将u作为输入并输出y。在这种情况下,u设置为等于时间。在我的C ++代码中,我已经从FMILibrary加载了FMI库并完成了所有必要的步骤,直到我想给我的输入u一个新的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 =时间。换句话说,当我在openmodelica中将我的u变量更改为RealInput块时,一切都很顺利。那么,如果我真的想要重新定义某个等式呢?我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

详细说明: 对于协同仿真FMI,对可以设置的内容的限制在FMI2规范的4.2.4节中的状态图中。

在fmi2DoStep之间,你只能设置具有因果关系=“输入”或因果关系=“参数”和变异性=“可调”的真实变量 - 并且带有等式的输入不符合条件。

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