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

MATLAB Invalid Simulink object name, parfor and load_system

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

所以我写了下面的代码:

% 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)

然后我会得到以下错误:

Error using control_model (line 11)

Invalid Simulink object name: mymodel/mysystem

如果我再次 运行 它,我会得到同样的错误(尽管使用 for 而不是 parfor 解决了这个错误)。

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

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

我认为您需要在 worker 上加载模型(有关详细信息,请参阅文档中的 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