C 从VB.Net读取MatLab Simulink值

C 从VB.Net读取MatLab Simulink值,c,vb.net,matlab,simulink,matlab-coder,C,Vb.net,Matlab,Simulink,Matlab Coder,这就是理想的目标 我们有一个simulink模型,当它运行时,我们希望将所有结果值发送到我们的vb.net应用程序 我想我已经找到了一些方法,但在投入之前,我希望得到一些意见。我在过去没有使用过matlab或simulink,这使得这变得更难 matlab有一个COM对象,但它不允许在simulink运行时实时访问变量。Simulink仅在完成后将其数据转储到matlab 选项1:回调? 我一直在阅读,似乎我能够添加一个回调到块,以便值发送到matlab基于定时器。然后我必须不断地从vb调用ma

这就是理想的目标

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

我想我已经找到了一些方法,但在投入之前,我希望得到一些意见。我在过去没有使用过matlab或simulink,这使得这变得更难

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

选项1:回调? 我一直在阅读,似乎我能够添加一个回调到块,以便值发送到matlab基于定时器。然后我必须不断地从vb调用matlab来获得这些值。如果同时运行Simulink,这似乎效率不高,可能会占用大量资源?

选项2: 我在mathworks网站上找到了一个“Simulink编码器”,这似乎是一个理想的解决方案,但如果这里有人使用过它,我希望得到一些澄清。我已经申请了一次试训,但在我得到它之前,我还有几个障碍需要克服

在我看来,程序员会采用simulink模型并用C/C++代码创建算法吗?这是否意味着我可以创建一个C应用程序并将该代码用作源代码?因此,我不需要在我的应用程序中运行simulink,而只需要运行代码并输入参数,以获得输出变量

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


感谢您的任何意见:)

对于您的问题,确实没有一个简单的答案,最好/正确的方法就是您所需要的功能

首先,关于Simulink编码器:是的,它会将Simulink模型转换为C代码,在这一点上,您可以以与您可能编写的任何其他C代码相同的方式使用该C代码

此时,您将不再使用Simulink,也不需要许可证。 这可能有助于部署应用程序

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

使用运行时对象(在您提供的链接中提到)并不理想,有时扩展性也不太好(即,如果您有许多要查看的信号,可能会有问题),但这确实是在模拟期间从模型中获取数据的唯一方法。 (有些事件_侦听器可以附加到块,但也不能很好地扩展。)

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


您还提到MATLAB生成DLL和mux[这里您可能指的是mex]。请注意,MATLAB(即m-code)与Simulink的代码生成机制不同。只有Simulink编码器对您有用,而不是MATLAB编码器或MATLAB编译器。Mex(假设这就是您的意思)是从MATLAB调用编译代码的机制,与您在这里提出的问题无关

非常感谢您的回复。首先,是的,我是指墨西哥,我的错。我今天刚刚收到Simulink Coder的试用版,所以其中一些现在变得更有意义了。这似乎也是目前最可行的选择。我不确定是否应该为此创建一个新问题,但我很难理解其他一些函数。是否可以定义输入和输出,以便生成的代码具有接受输入变量并返回输出变量的函数?或者我需要创建某种包装来实现这一点?它确实需要一个新的问题。但简而言之,生成的代码反映了模拟过程中发生的情况:有用于初始化的代码,有用于逐步调整模型的代码(通过调用用于更新状态和块输出的代码,以及用于终止的代码。模型最高级别的输入和输出端口用于输入和输出信号。要具有可调用功能,需要将模型的相关部分放入原子子系统并设置“代码生成”将块参数的选项设置为适当的值。