首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Modelica的fmi报头创建FMU从站并在C中初始化FMU

如何使用Modelica的fmi报头创建FMU从站并在C中初始化FMU
EN

Stack Overflow用户
提问于 2022-11-22 17:48:15
回答 2查看 53关注 0票数 1

我正在创建一个简单的FMI演示系统来尝试FMI,其中我有一个模拟器连接到一个FMU,它计算系统的状态(表示为一个从封闭形式方程中计算出来的数字)和另一个FMU,它通过封闭形式方程中的一个参数来控制系统。所以系统看起来就像

系统<->模拟器<->FMU-控制

在每一次迭代中,我将根据1方程更新系统状态,并将其传递给控件,该控件返回要传递给系统的参数。

我使用的是FMI 2.0.3,并且已经阅读了规范。现在我有3个文件,1个用作模拟器,2个作为FMU。但我在实现FMU和初始化模拟器方面遇到了困难。

要初始化FMU,我的理解是我需要调用具有此签名的fmi2Instantiate

  • fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2String fmuGUID, fmi2String fmuResourceLocation, const fmi2CallbackFunctions* functions, fmi2Boolean visible, fmi2Boolean loggingOn);

但是我不知道GUID、资源位置和回调函数在函数中传递什么。我应该如何实现回调函数和初始化?

然后,要实现FMU,我的理解是我需要实现fmi2SetRealfmi2GetRealfmi2DoStep,但我不知道如何用代码来实现它们。这些是签名

  • fmi2Status setReal(fmi2Component c, fmi2ValueReference vr[], size_t nvr, fmi2Real value[])
  • fmi2Status getReal(fmi2Component c, fmi2ValueReference vr[], size_t nvr, fmi2Real value[])
  • fmi2Status doStep(fmi2Component c, fmi2Real currentCommunicationPoint, fmi2Real communicationStepSize, fmi2Boolean noSetFMUStatePriorToCurrentPoint)

但我不知道如何实现这些功能。fmi2Component c在这里毫无意义吗?我想我必须对doStep中的FMU-系统进行系统状态计算。我应该如何更新状态并在这里传递代码?

对不起,如果这是太多的问题,但我试图寻找一个教程,但我找不到任何。

EN

回答 2

Stack Overflow用户

发布于 2022-11-23 03:39:21

https://github.com/traversaro/awesome-fmi

这是一个功能模拟接口( Functional up,FMI)库、工具和资源的目录.

有非商业工具可供使用。查看它们,您将了解如何为您的应用程序实现这些功能。

票数 1
EN

Stack Overflow用户

发布于 2022-12-01 19:15:51

实现FMI支持的一个好起点是开源参考FMU (最近还提供了一个简单的FMU模拟器)和fmpy:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74537024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档