gpt4 book ai didi

c++ - 在仿真期间更改 FMI 变量/函数

转载 作者:行者123 更新时间:2023-11-30 05:07:04 33 4
gpt4 key购买 nike

我有一个简单的 FMU 文件,其中包含一个将 u 作为输入并输出 y 的正弦 block 。在这种情况下,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;
}

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

附言。有什么地方可以找到有关 FMI 库函数的更详细说明?目前我只能找到输入输出描述还是我又漏掉了什么。

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

最佳答案

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

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

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

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

关于c++ - 在仿真期间更改 FMI 变量/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664936/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com