我正在使用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工作区的设置。
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:3)
在许多情况下,最好使用Model Workspace
而不是Base Workspace
:
hws = get_param(model, 'modelworkspace');
hws.assignin('mdl',mdl);
至少要知道此选项存在。
答案 1 :(得分:1)
问题的解决方案可能是将assignin
- 函数用于要在matlab基础工作区中传递其值的所有变量。为此,请使用
assignin('base','mdl',mdl)
将变量放在基础工作区中应该允许simulink查看它。