从Matlab函数

时间:2017-03-09 14:27:43

标签: matlab simulink

我正在使用FastRestart运行Simulink,因为我需要多次启动和停止模拟更改参数。当我从主脚本运行Simulink时,没有问题。但是,只要我将脚本设为一个函数,以便我可以为不同的输入数据运行它,我就会得到一个与Simulink明显相关的错误,而不是在函数中看到Matlab工作区。

更准确地说,sfile是我的Simulink文件,然后在Matlab中初始化我需要的所有变量之后运行以下行:

load_system(sfile);
set_param(sfile,'FastRestart','on');
set_param(sfile,'SaveFinalState','on');
set_param(sfile,'SaveCompleteFinalSimState','on');
set_param(sfile,'SimulationCommand','update');

在最后一行,我收到Simulink无法识别的错误mdl.tStep(这是时间步),因为mdl不是公认的结构。事实上,如果我从主脚本运行Simulink,一切都很好。

现在,在过去,我会使用

options = simset('SrcWorkspace','current');

但是,我认识的专家建议我反对simset(因为将来可能会弃用)并鼓励我使用set_param代替。我有 在线查找set_param的选项,但我找不到Matlab工作区的设置。

非常感谢任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:3)

在许多情况下,最好使用Model Workspace而不是Base Workspace

hws = get_param(model, 'modelworkspace');
hws.assignin('mdl',mdl);

至少要知道此选项存在。

答案 1 :(得分:1)

问题的解决方案可能是将assignin - 函数用于要在matlab基础工作区中传递其值的所有变量。为此,请使用

assignin('base','mdl',mdl)

将变量放在基础工作区中应该允许simulink查看它。