MATLAB无效的Simulink对象名称,parfor和load_system

时间:2015-06-29 08:15:18

标签: matlab parallel-processing simulink parfor

我尝试使用parfor命令在循环中运行模型。

mymodel

所以我写了下面的代码:

% control_model.m
warning('off', 'Simulink:Engine:UsingDefaultMaxStepSize');
apool = gcp('nocreate');
if isempty(apool)
    apool = parpool('local');
end

load_system('mymodel');

tic
parfor w=1:10
    warning('off', 'Simulink:Engine:UsingDefaultMaxStepSize');
    w_str=num2str(w);
    set_param('mymodel/mysystem','sys', ['tf(',w_str,',[1 ',w_str,'])'] )
    sim('mymodel',[],[])
    drawnow
end
toc

close_system('mymodel',0);
% delete(poolobj)

然后我会收到以下错误:

  

使用control_model时出错(第11行)

     

无效的Simulink对象名称:mymodel / mysystem

如果我再次运行它,我会收到同样的错误(尽管使用for代替parfor可以解决此错误。)

但是,如果我在load_system('mymodel');之后放置parfor并运行一次,问题就解决了。即使我删除load_system命令,错误也不再显示在下一次。

我很想知道幕后发生了什么,以及为什么即使我多次运行程序,第一个load_system也无法解决问题。 parfor中的那个即使在下次调用脚本时删除了问题也能解决问题吗?

1 个答案:

答案 0 :(得分:1)

我认为您需要在工作人员上加载模型(有关详细信息,请参阅文档中的sim in parfor with Normal Mode),因此您的load_system必须位于parfor循环中:

tic
parfor w=1:10
    load_system('mymodel');
    warning('off', 'Simulink:Engine:UsingDefaultMaxStepSize');
    w_str=num2str(w);
    set_param('mymodel/mysystem','sys', ['tf(',w_str,',[1 ',w_str,'])'] )
    sim('mymodel',[],[])
    drawnow
end
toc