1

我必须使用 Simulink 和外部应用程序 (LS-DYNA) 实现耦合仿真。领先的仿真是在 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 进行耦合仿真的任何提示和经验!谢谢!

4

2 回答 2

0

问题与 Simulink 的协同仿真机制有关。我建议将http://www.mathworks.in/help/matlab/calling-external-functions.html 作为第一步。为了比较和理解现有软件解决方案的实现,本手册应该有所帮助。 http://vector.com/portal/medien/cmc/application_notes/AN-IND-1-007_Using_MATLAB_with_CANoe.pdf

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

于 2014-10-24T08:29:26.270 回答
0

据我所知,将 simulink 与其他应用程序耦合的“正确”方法是编写 S-Function。如果外部应用程序具有 C/C++ 接口,这也应该是迄今为止性能方面的最佳解决方案:http: //www.mathworks.de/de/help/simulink/create-cc-s-functions.html

于 2013-09-11T14:40:00.207 回答