在模拟过程中更改FMI变量/功能
change FMI variable/function during simulation
我有一个简单的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 =时间"方程。
相关文章:
- 将 2D 数组传递给大小为变量的功能
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 功能原型变量范围C
- 避免为每个成员变量重复功能
- 线程安全性和静态变量/成员功能
- 功能和变量从何而来
- 无全局变量或功能参数的递归调用
- 在已经运行的功能C 中更改变量
- 将功能输出分配给变量
- 从成员变量更新类变量或调用类功能是给出运行时错误
- 如何访问C 中的功能范围变量
- 我的朋友功能无法访问私人变量
- 不同的变量和功能起作用
- 在功能中设置对象变量
- 类和本地功能变量内的全局变量
- 我需要在类C 中定义所有私人功能和变量
- 如何在Arduino的功能中提供软件变量
- 是否可以在C++中推迟 const 变量的初始化,例如 Java 的"blank final"功能?
- 无法从类中的其他功能访问同一类的变量
- 在模拟过程中更改FMI变量/功能