【问题标题】:Run Simulink from Matlab function从 Matlab 函数运行 Simulink
【发布时间】: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,您可以指定要将变量分配到的工作区。将它们分配给基本工作区实际上应该可以解决您的问题

标签: matlab simulink


【解决方案1】:

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

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

在您的基础工作区中拥有该变量应该允许 simulink 看到它。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    相关资源
    最近更新 更多