运行 来自 Matlab 函数的 Simulink

Run Simulink from Matlab function

我正在使用 FastRestart 运行ning 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 工作区的设置。

如有任何帮助,我们将不胜感激。提前致谢!

您的问题的一个解决方案可能是对您要将其值传递给 matlab 基础工作区中的 simulink 的所有变量使用 assignin 函数。为此,只需使用

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

在基础工作区中包含变量应该允许 simulink 看到它。

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

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

至少要知道这个选项存在。