我的研究项目组正在尝试将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版无法进行这种导出。我了解您的观点正确吗?
答案 0 :(得分:0)
您可以抓住FMU Software Development Kit for version 2.0。它有几个用C实现的示例,分别用于协同仿真(我想是您想要的)和模型交换。
您可以使用示例之一作为起点(例如,上面链接的zip文件中的fmu20 / src / models / bouncingBall)。适应它是很多手工工作,但是您会学到很多有关界面的知识。
请记住两点:
上面显示的结构类型不能按原样传递给FMU。没有遵循该标准的调用程序可以知道如何定义您的内部结构。它们只能传递FMI标准指定的原始标量数据类型。
信息,但是,可以传递。您可以定义一个名为例如的双模型变量 x2 并修改 mult 函数以直接使用它,或在FMU内部重建结构。