【问题标题】:FMU export of c code with structure as an input argument以结构为输入参数的 C 代码的 FMU 导出
【发布时间】:2018-08-29 02:42:26
【问题描述】:

我的研究项目组正在尝试将 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 fmi


    【解决方案1】:

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

    您可以使用其中一个示例作为起点(例如,上面链接的 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 内部的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多