gpt4 book ai didi

c - 以结构作为输入参数的 C 代码的 FMU 导出

转载 作者:行者123 更新时间:2023-11-30 16:29:27 26 4
gpt4 key购买 nike

我的研究项目组正在尝试将 matlab 代码导出为 FMU。我们想出的方法之一是从 matlab 脚本生成 C 代码并将 C 代码导出为 FMU。我很好奇是否有任何工具可以将c代码打包为FMU?如果没有,是否有其他方法可以实现这一目标?

在 @mklingn 回答后更新问题
我尝试使用 bouncingball.c 进行编辑,但我面临的问题是,在提供的每个示例中,变量被视为 bool 型或 double 型的数据类型。在我的例子中,输入之一是结构,例如我生成的 c 文件是

#include "mult.h"

/* Function Definitions */

/*
* Arguments : double u
* double v
* const struct0_T *m
* Return Type : double
*/
double mult(double u, double v, const struct0_T *m)
{
double y;
y = u * v * m->x[2];

/* fcn(u,v ,'parameter1',m,'parameter2',n) */
return y;
}

生成的.h文件是

#ifndef MULT_H
#define MULT_H
typedef struct {
char y[6];
double x[6];
} struct0_T;
extern double mult(double u, double v, const struct0_T *m);
#endif

所以根据您的观点 2:FMI 2.0 版不可能进行此类导出。我理解你的观点正确吗?

最佳答案

您可以获取FMU Software Development Kit for version 2.0 。它有几个用 C 实现的示例,用于 union 仿真(我猜这就是您想要的)和模型交换。

您可以使用其中一个示例作为起点(例如上面链接的 zip 文件中的 fmu20/src/models/bouncingBall)。调整它需要相当多的手动工作,但是您可以学到很多有关界面的知识。

需要记住两件事:

  1. 请注意,只有一小部分 Matlab 功能可以导出为 C 代码。请参阅MATLAB Language Features Supported for C/C++ Code Generation获取列表。
  2. FMI 尚不处理数组变量。这是planned for version 3.0 。因此您只能传递标量变量。

上面显示的结构类型不能按原样传递给 FMU。遵守该标准的调用程序无法知道您的内部结构是如何定义的。它们只能传递 FMI 标准指定的原始标量数据类型。

但是,信息是可以传递的。您可以定义一个双模型变量,例如x2 并修改 mult 函数以直接使用它或重建 FMU 内部的结构。

关于c - 以结构作为输入参数的 C 代码的 FMU 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51836935/

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