从Matlab函数运行Simulink

从Matlab函数运行Simulink,matlab,simulink,Matlab,Simulink,我正在使用FastRestart运行Simulink,因为我需要多次启动和停止模拟以更改参数。当我从主脚本运行Simulink时,没有问题。但是,一旦我将脚本设置为函数,以便可以针对不同的输入数据运行它,我就会得到一个错误,这显然与Simulink没有看到函数中的Matlab工作区有关 更准确地说,假设sfile是我的Simulink文件,那么在Matlab中初始化了结构中所需的所有变量后,我运行以下几行: load_system(sfile); set_param(sfile,'FastRes

我正在使用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工作区的设置


任何帮助都将不胜感激。提前谢谢你

您的问题的解决方案可能是使用
assignin
-函数将其值传递给matlab基本工作区中的simulink的所有变量。要做到这一点,只需使用

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

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

在许多情况下,最好使用
模型工作区
,而不是
基本工作区

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

至少要注意此选项的存在。

是否有效:
options=sim(model,'SrcWorkspace','current')
?实际上不是因为在运行
sim(sfile,…,options)之前我实际上在调用
set_param(sfile,'SimulationCommand','update')我知道,这不是一个非常“干净”的解决方案,但您可以尝试使用
assignin('base','mdl',mdl)
将变量放入matlabs base workspace,simulink可以读取。实际上,这正是我对所有变量所做的。是否有一种方法可以通过
assignin
指定工作区,即指定
base
?@EnricoAnderlini抱歉,我不理解你的问题。您想具体说明什么?使用
assignin
可以指定要将变量分配到的工作空间。将它们分配到基本工作区实际上可以解决您的问题非常感谢您的帮助!