在模拟过程中更改FMI变量/功能



我有一个简单的FMU文件,该文件包含一个正弦块,将您作为输入和输出y。在这种情况下,u将等于时间。在我的C 代码中,我从Fmilibrary加载了FMI库,并完成了所有必要的步骤,直到我想给我的输入U一个新值PI(AS 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;
}
即使我试图给它一个新的价值,

u仍将其设置为时间。我想念什么吗?

ps。我可以在任何地方找到有关FMI库功能的更详细的描述吗?目前,我只能找到输入输出描述,或者我再次错过了一些。

更新:经过几次试验,我认为这个问题可能是因为我试图重新定义我的方程式u =时间。换句话说,当我将U变量更改为OpenModelica中的RealInput块时,一切都很好。那么,如果我真的想重新定义某个方程式怎么办?我该怎么办?

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

详细信息:对于共同模拟FMI,对FMI2规范第4.2.4节中的状态数据图中可以设置的限制。

在fmi2dostep之间,您只能设置具有因果关系="输入"或Causality ="参数"和可变性="可调"的真实变量,并且具有方程式的输入不合格。

在开始集成之前,您也可以将其设置为其他变量,但这仅是初始化的猜测值 - 并且不应覆盖" u =时间"方程。

最新更新