这是理想的目标。
我们有一个simulink模型,当它运行时,我们希望将所有结果值发送到我们的vb.net应用程序。
我想我已经找到了一些方法,但在潜水之前会想要一些输入。我过去没有使用matlab或simulink,这使得它比现在更难。
有一个用于matlab的COM对象,但是当simulink运行时,它不允许实时访问变量。 Simulink只在完成后才将其数据转储到matlab。
选项#1:回调? 我一直在阅读,似乎我能够向块添加回调,以便根据计时器将值发送到matlab。然后我必须从vb不断调用matlab来获取这些值。这看起来效率不高,并且可能会同时运行simulnk来占用大量资源? How do I get data from a Simulink block into a MATLAB GUI?
选项#2: 我在mathworks网站上找到了一个'Simulink Coder',看起来是理想的解决方案,但如果有人在这里使用它,我想澄清一下。我已经要求进行试验,但在我得到它之前仍然需要更多的箍。
在我看来,编码器会采用simulink模型并在C / C ++代码中创建算法吗?这是否意味着我可以创建一个C应用程序并将该代码用作源代码?因此,我只是运行代码并输入参数来给我们输出变量,而不是运行我的应用程序simulink?
我也在阅读有关matlab输出DLL或多路复用器的一些信息?那么可以和.net应用程序一起使用吗?
任何意见/意见都赞赏:)
答案 0 :(得分:2)
对于您的问题,确实没有一个简单的答案,最佳/正确的方法归结为您需要的功能。
首先,关于Simulink Coder:是的,它会将Simulink模型转换为C代码,此时您可以像使用其他任何可能编写的C代码一样使用该C代码。
此时您将不再使用Simulink,并且不需要许可证。 这可能对部署您的应用程序很有用。
但是有限制。您(通常)仅限于固定步长求解器。您无法转换M代码S函数。你不能在MATLAB函数集团中定义coder.extrinsic函数。您只能更改参数和模型输入。您无法更改拓扑,即块的数量和互连(无需重新生成代码)。有关更全面的列表,请参阅Coder Limitations。
使用运行时对象(在您提供的链接中提及)并不理想,有时不能很好地扩展(例如,如果您要查看许多信号,可能会出现问题),但实际上是唯一的在模拟过程中从模型中获取数据的方法。 (有可以附加到块的event_listeners,但也不能很好地扩展。)
请注意,您提到的COM限制不是Simulink的限制。出于效率原因,Simulink仅在模型暂停或停止时转储数据。这与MATLAB-COM API本身无关。
你还提到MATLAB生成DLL和mux [推测你的意思是mex]。请注意,MATLAB(即m代码)的代码生成机制与Simulink不同。只有Simulink Coder对您有用,而不是MATLAB Coder或MATLAB Compiler。 Mex(假设这就是你的意思)是从MATLAB调用编译代码的机制,并不会与你在这里提出的问题有任何关系。