0

这是理想的目标。

我们有一个 simulink 模型,当它运行时,我们希望将所有结果值发送到我们的 vb.net 应用程序。

我想我已经找到了一些方法,但在潜入之前想要一些输入。我过去没有使用过 matlab 或 simulink,这使得这比现在更难。

matlab 有一个 COM 对象,但不允许在 simulink 运行时实时访问变量。Simulink 仅在完成后将其数据转储到 matlab。

选项#1:回调?我一直在阅读,似乎我能够向块添加回调,以便基于计时器将值发送到 matlab。然后我必须不断地从 vb 调用 matlab 来获取这些值。这似乎效率不高,并且可能会在同时运行 simulnk 的情况下占用大量资源? 如何将 Simulink 模块中的数据导入 MATLAB GUI?

选项 #2:我在 mathworks 网站上找到了一个“Simulink Coder”,这似乎是理想的解决方案,但如果这里有人使用过它,我想澄清一下。我已经申请了试用,但在我得到它之前还有几个箍要跳过。

在我看来,编码员会采用 simulink 模型并在 C/C++ 代码中创建算法?这是否意味着我可以创建一个 C 应用程序并将该代码用作源代码?因此,与其在我的应用程序中运行 simulink,不如只运行代码并输入参数来为我们提供输出变量?

我也一直在阅读一些关于 matlab 输出 DLL 或 mux 的信息?那么可以与.net 应用程序一起使用吗?

任何输入/意见表示赞赏:)

4

1 回答 1

2

您的问题确实没有一个简单的答案,最好/正确的方法归结为您需要的功能。

首先,关于 Simulink Coder:是的,它会将 Simulink 模型转换为 C 代码,此时您可以像使用您可能编写的任何其他 C 代码一样使用该 C 代码。

届时,您将不再使用 Simulink,并且不需要许可证。这对于部署您的应用程序可能很有用。

但是有一些限制。您(通常)仅限于固定步长求解器。您不能转换 M 代码 S-Function。您不能在 MATLAB 函数块中定义 coder.extrinsic 函数。您只能更改参数和模型输入。您不能更改拓扑,即块的数量和互连(无需重新生成代码)。有关更全面的列表,请参阅编码器限制。

使用运行时对象(在您提供的链接中提到)并不理想,有时也不能很好地扩展(即,如果您有许多要查看的信号可能会出现问题),但实际上是获得的唯一方法模拟过程中模型中的数据。(有可以附加到块的 event_listeners,但也不能很好地扩展。)

请注意,您提到的 COM 限制不是 Simulink 的限制。出于效率原因,Simulink 仅在模型暂停或停止时转储数据。这与 MATLAB-COM API 本身无关。

您还提到了 MATLAB 生成 DLL 和 mux [大概您的意思是 mex 这里]。请注意,MATLAB(即 m 代码)与 Simulink 有不同的代码生成机制。只有 Simulink Coder 对您有用,而不是 MATLAB Coder 或 MATLAB Compiler。Mex(假设这就是您的意思)是从 MATLAB 调用编译代码的机制,与您在此处询问的内容没有任何关系。

于 2014-06-05T20:32:59.627 回答