我必须实现与Simulink和外部应用程序(LS-DYNA)的耦合仿真。领先的仿真在Simulink中完成,我想在其中实现如下功能块:
使用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进行耦合仿真的任何提示和经验都非常感谢! 谢谢!
答案 0 :(得分:0)
据我所知,将simulink耦合到其他应用程序的“正确”方法是编写 S-功能。如果外部应用程序具有C / C ++接口,那么到目前为止,这应该是性能最佳的解决方案: http://www.mathworks.de/de/help/simulink/create-cc-s-functions.html
答案 1 :(得分: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生成代码,并为外部应用程序编写包装器。