Matlab Simulink协同仿真:逐步执行并与外部应用程序交换参数

Matlab Simulink协同仿真:逐步执行并与外部应用程序交换参数,matlab,batch-file,cmd,simulink,coupling,Matlab,Batch File,Cmd,Simulink,Coupling,我必须用Simulink和外部应用LS-DYNA实现耦合仿真。主要的模拟是在Simulink中完成的,我想在Simulink中实现一个功能块,如下所示: 交互是使用windows的cmd完成的,因此Simulink块应执行以下操作: function [ x,y ] = ExternalSimlation( u,v ) % open the windows cmd and run the external simulation by passing u and v [status,cmdou

我必须用Simulink和外部应用LS-DYNA实现耦合仿真。主要的模拟是在Simulink中完成的,我想在Simulink中实现一个功能块,如下所示:

交互是使用windows的cmd完成的,因此Simulink块应执行以下操作:

function [ x,y ] = ExternalSimlation( u,v )

% open the windows cmd and run the external simulation by passing u and v
[status,cmdout] = system( 'command for executing the external simulation -u -v');

    function [ x,y ] = readcmd( cmdout )
        %algorithm to evaluate the cmd output
    end

    [x,y] = readcmd(cmdout);

end
确切的代码在这里不应该相关。我的问题是,如何将接口实现到simulink模型中?我可以只使用一个自定义功能块,使用上面的代码,它就可以工作了吗?但是哪一个,我真的看不出有什么区别

或者,我的另一个想法是构建如下内容:

然后使用这样的while循环:

while ... do
[u,v] = sim('model', 'x',x,'y', y, 'some option just to run a single step');
[x,y] = ExternalSimlation( u,v )
[u,v] = sim('model' .... next step ...)
逐步执行simulink模拟。我怎么能意识到这一点?其余的仿真包含复杂的控制算法、推导和积分

我没有编写批处理文件的经验,但这对我来说也是可能的

如果你想知道为什么我不只是测试,那是因为我没有可用的外部应用程序,我只知道输入和输出是如何工作的,如果根本不可能的话,我不想浪费时间编写一个替代应用程序来测试

非常感谢在simulink的耦合仿真中提供的任何提示和经验!
谢谢大家!

据我所知,将simulink与其他应用程序耦合的正确方法是编写 S-函数。如果外部应用程序具有C/C++接口,这也是迄今为止最好的解决方案性能:
这个问题与Simulink的协同仿真机制有关。 我建议 作为第一步。 为了比较和理解现有软件解决方案的实现,本手册应该有所帮助。

首先,我使用过的所有协同仿真软件基本上都使用windows的COM接口。我没有在任何其他操作系统中使用matlab,它们创建对象并使用共享内存进行数据传输。基本上,它们是通过S函数实现的。
您也可以考虑从Simulink或State流生成代码,并为外部应用程序编写包装器。

您的第一种方法应该起作用。默认情况下,系统命令会阻止执行,因此仿真应等到完成后,才允许Simulink继续进行进一步处理。如果使用MATLAB函数块,则需要将系统定义为coder.extrinsic函数才能使用它,并且根据系统调用返回的数据类型,可能会遇到问题。但如果是这样,则使用m代码S函数。第二种方法虽然在技术上是可行的,但速度太慢,所以你认为S函数是最好的解决方案?我不明白你关于Matlab功能块的说法。你能具体说明一下吗?我需要重新定义哪个系统?当数据的大小/维度或数据类型不变时,MATLAB功能块工作得最好,并且任何不在嵌入式MATLAB子集中的函数都必须定义为coder.extrinsic。在文档中搜索该术语,即coder.extrinsic,以获取更多信息。这里有一个简单的示例,它使用了旧语法eml.extrinsic,与新的coder.extrinsic具有相同的效果。如果您在使用这种方法时遇到问题,那么在m代码S函数中很容易实现。使用DDS怎么样?