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

C++ 在模拟过程中更改FMI变量/功能,c++,modelica,fmi,C++,Modelica,Fmi,我有一个简单的FMU文件,其中包含一个正弦块,将u作为输入并输出y。在这种情况下,u设置为等于时间。在我的C++代码中,我已经加载了FMI库并完成了所有必要的步骤,直到我想给输入一个新的PI值(3.14)。于是我去了: fmistatus = fmi2_import_set_real(fmu, &uRef, 1, &pi); while (timeCurrent < timeEnd){ fmistatus = fmi2_import_do_step(fmu, tim

我有一个简单的FMU文件,其中包含一个正弦块,将u作为输入并输出y。在这种情况下,u设置为等于时间。在我的C++代码中,我已经加载了FMI库并完成了所有必要的步骤,直到我想给输入一个新的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;
}
fmistatus=fmi2_导入_集_实(fmu,&uRef,1,&pi);
while(timeCurrent
即使我尝试给它一个新的值,u仍然设置为时间。我错过什么了吗

附:是否有关于FMI库功能的更详细说明?目前我只能找到输入输出描述,或者我又错过了什么


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

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

详情: 对于协同模拟FMI,可以设置的限制在FMI2规范第4.2.4节的状态图中

在fmi2DoStep之间,您只能设置具有causality=“input”或causality=“parameter”和variability=“tunable”的实变量,并且带有等式的输入不符合条件


在开始积分之前,您还可以为其他变量设置积分,但这只是初始化的猜测值,并且不应该重写“u=time”方程

FMI中不允许“替换”变量的值吗?可能相关:类似,但在我的情况下,它不是关于参数,而是关于改变方程。即将u=时间改为u=3.14。