【发布时间】:2017-07-30 14:06:26
【问题描述】:
我正在使用 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 工作区的设置。
任何帮助将不胜感激。提前谢谢!
【问题讨论】:
-
这行得通吗:
options = sim(model, 'SrcWorkspace', 'current')? -
不是因为在运行
sim(sfile,...,options);之前我实际上是在调用set_param(sfile,'SimulationCommand','update'); -
我知道,这不是一个非常“干净”的解决方案,但您可以尝试使用
assignin('base','mdl',mdl)将变量放入 simulink 可以读取的 matlabs 基础工作区。 -
实际上,这正是我对所有变量所做的。有没有办法通过
assignin指定工作区,即指定base的方法? -
@EnricoAnderlini 对不起,我不明白你的问题。您要指定什么?使用
assignin,您可以指定要将变量分配到的工作区。将它们分配给基本工作区实际上应该可以解决您的问题