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

以结构作为输入参数的c代码的FMU导出,c,fmi,C,Fmi,我的研究项目组正在尝试将matlab代码导出为FMU。 我们提出的方法之一是从matlab脚本生成c代码,并将c代码导出为FMU。 我很好奇是否有任何工具可以将c代码打包为FMU?如果没有,是否有其他方法来实现这一点 在@mklingn的回答后更新问题 我曾尝试使用bouncingball.c进行编辑,但我面临的问题是,在提供的每个示例中,变量都被视为布尔或双精度数据类型。在我的例子中,输入之一是结构,例如,我的c文件是生成的 #include "mult.h" /* Function Def

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

在@mklingn的回答后更新问题
我曾尝试使用bouncingball.c进行编辑,但我面临的问题是,在提供的每个示例中,变量都被视为布尔或双精度数据类型。在我的例子中,输入之一是结构,例如,我的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版不可能进行这种导出。我理解你的观点正确吗?

你可以抓住这个机会。它有几个用C实现的示例,既用于协同仿真(我想这就是您想要的),也用于模型交换

您可以使用其中一个示例作为起点(例如,上面链接的zip文件中的fmu20/src/models/bouncingBall)。对其进行调整需要相当多的手工工作,但您对界面了解了很多

要记住两件事:

  • 请注意,只有一小部分Matlab功能可以导出为C代码。请参阅以获取列表
  • FMI尚未处理阵列变量。这是。因此,只能传递标量变量
  • 上面显示的结构类型不能按原样传递给FMU。任何遵循标准的调用程序都无法知道内部结构是如何定义的。它们只能传递FMI标准指定的原始标量数据类型

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