Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

开始使用快速重启

当您需要以迭代方式仿真模型来调整参数、获得所需的响应或自动化测试时,请使用快速重启来避免再次编译。快速重启允许您执行迭代仿真,而无需每次编译模型或终止仿真。使用快速重启的一般工作流包括以下步骤。

  1. 使用 Simulink® 工具条上的快速重启按钮或从命令行打开快速重启。

  2. 对模型进行仿真。第一次仿真需要对模型进行编译和初始化,并保存一个 ModelOperatingPoint 对象。仿真完成后,它并不会真正终止。模型会以快速重启模式再次初始化。

  3. 执行以下任一操作:

    • 更改可调参数。

    • 调整根级输入。

    • 修改可调参数引用的基础工作区、模型工作区变量和数据字典条目。

    • 更改 From FileFrom Workspace 模块的输入。

    • 更改初始状态参数,供下次仿真使用。

    • 使用 Signal Builder 模块,更改数据、重命名信号和信号组并添加新组。

    • 通过使用 set_param 命令和 DataLoggingOverride 参数,以编程方式更改模型的信号记录覆盖值。请参阅Override Signal Logging Settings from MATLAB

    一旦在快速重启模式下始化了模型,就无法:

    • 更改信号或变量的维度、类型或复/实性。

    • 更改不可调参数,如采样时间。

    • 进行结构性更改,如添加或删除模块或连接。

    这些更改要求您再次编译模型。要进行此类更改,请关闭快速重启,进行更改,然后重复此过程。

  4. 如果更改求解器,不需要重新编译模型。您可以在运行时选择合适的求解器,而不必经历高成本的重新编译过程。

  5. 对模型进行仿真。该模型使用您提供的参数和输入的新值,但不会再次编译。

  6. 一旦您获得所需的响应,请关闭快速重启。

    注意

    当您关闭快速重启时,Simulink 不会存储模型的任何编译信息。在您下次仿真模型时,模型会进行编译。

准备要使用快速重启的模型

在使用快速重启对模型进行仿真之前,请确保模型满足以下要求:

  • 如果您已在模型中启用回调,请确保在重新初始化模型时,回调不会尝试进行结构性更改。例如,每次仿真开始时都会调用回调,如封装初始化命令。因此,请避免使用对模型进行结构性更改的封装初始化代码。

  • 模型中的所有模块必须支持 ModelOperatingPoint 对象。

  • 仿真模式是普通模式或加速模式。

注意

启用快速重启时,您无法在模型编译后保存对模型的更改。保存更改需要 Simulink 放弃关于编译状态的信息。要保存对模型的任何更改,请先关闭快速重启。

启用快速重启

使用以下方法之一启用快速重启:

  • 点击 Simulink 编辑器工具栏上的快速重启按钮

  • 在 MATLAB® 命令提示符下,使用 set_param 启用快速重启。键入

    set_param(model,'FastRestart','on')

使用快速重启对模型进行仿真

加载模型并打开快速重启后,对模型进行仿真。

  1. 通过调用 sim 或点击 Simulink 编辑器工具条中的运行按钮 来对模型进行仿真。快速重启中的第一次仿真需要对模型进行编译并保存 ModelOperatingPoint 对象。

    仿真完成之后,状态栏会显示模型已在快速重启模式下初始化。

  2. 调整模型中的可调参数,如 Gain 模块的增益值,或调整根级输入值。您还可以对基础工作区变量进行更改。您无法调整不可调参数,如采样时间,因为这样做需要再次编译模型。

  3. 再次对模型进行仿真。这一次,模型不会编译。当您点击播放按钮或向前步进时,Simulink 会更新具有新值的模块以及引用工作区变量的模块。

  4. 当您对结果满意时,可通过点击快速重启按钮来关闭快速重启。

  5. 要保留您的更改,请保存模型。

注意

在快速重启模式下初始化模型后,如果您尝试对模型进行结构性更改,Simulink 会显示警告。要进行此类更改,您必须关闭快速重启。

停止仿真

当您在快速重启仿真过程中点击停止时:

  • 仿真不会终止。

  • 模型处于已初始化状态。

  • 现在,您可以更改模型中的可调参数

  • 您可以通过点击快速重启按钮将其关闭来终止仿真并退出快速重启。

退出快速重启

仅当模型处于已初始化状态时,您才能退出快速重启。在仿真后,点击快速重启按钮将其关闭。要以编程方式执行此操作,请键入:

set_param(model,'FastRestart','off')

  • Simulink 终止仿真。

  • Simulink 丢弃关于模型的任何已编译信息。

  • 下次仿真时,模型必须再次编译。

快速重启方法

在各次仿真之间调整参数

  • 在快速重启模式下初始化了模型时,除模块值和基础工作区变量之外,您还可以在“配置参数”对话框(在仿真选项卡的准备下,点击模型设置)的数据导入/导出求解器窗格中调整参数。

  • 仅当模型已在快速重启模式下初始化时,某些参数才在各次仿真之间可调。这些参数包括:

    • IC 模块的初始值参数

    • Merge 模块的初始输出参数

    • From Workspace 模块的数据参数

    • Signal Builder 模块的信号参数和信号组。

快速重启中的模型方法和回调

当启用快速重启时,Simulink 将按如下所示调用模型和模块的方法以及回调:

  1. 调用模型的 InitFcn 回调。

  2. 调用模型的 SetupRuntimeResources 方法。

    1. 调用 mdlSetupRuntimeResources S-Function 方法。

  3. 调用模型的 Start 方法。

    1. 调用 mdlStart S-Function 方法。

  4. 调用模型的 Initialize 方法。

    1. 调用 mdlInitializeConditions S-Function 方法。

      注意

      使用 ssIsFirstInitCond 标志来保护只应在任何仿真的初始化阶段运行的代码,包括快速重启中的第一次和后续初始化。

  5. 调用模型和模块的 StartFcn 回调。

    注意

    步骤 1-5 适用于 Simulink 中的所有仿真(使用或不使用快速重启)。

  6. 对于快速重启中的第一次仿真,捕获一个仿真快照。仿真快照包含仿真状态 (ModelOperatingPoint) 以及与记录的数据和可视化模块相关的信息。在快照捕获过程中,调用 ModelOperatingPoint S-Function 方法。

  7. 这是任何仿真的一个标准执行阶段,无论使用还是不使用快速重启。

    • 调用模型的 Outputs

    • 调用模型的 Update

    • 调用模型的 Derivatives

    • 循环重复这些步骤,直到到达停止时间或请求停止为止。

  8. 调用模型的 Terminate 方法。

    1. 调用 mdlTerminate S-Function 方法。

  9. 仿真结束后,调用模型和模块的 StopFcn 回调。这是任何仿真的一个标准阶段,无论使用还是不使用快速重启。

  10. 还原为快速重启拍下的仿真快照。在还原过程中,调用 set S-Function 方法。

  11. 在已重新初始化的状态下等待,直到执行以下操作之一:

    • 要在快速重启模式下运行另一个仿真(以编程方式或使用 Simulink 编辑器),请返回步骤 3。

    • 要结束快速重启模式并取消模型编译:

      1. 调用模型方法 CleanupRuntimeResourcesmdlCleanupRuntimeResources S-Function 方法。

      2. 此时不要再次调用 StopFcn 回调。

在某些情况下,StartTerminate 方法只调用一次。在每次后续快速重启仿真中都不会再调用这些方法。在这些情况下,这些方法调用会分别与 SetupRuntimeResources 调用和 CleanupRuntimeResources 调用合并。这些情况如下:

  • 当 S-Function 包含自定义的 ModelOperatingPoint save 和 restore 方法时。

  • 当 S-Function 设置标志 SS_OPTION_CALL_TERMINATE_ON_EXIT 时。

  • 当 S-Function 置于引用模型的加速模式下时。

有关模型回调的详细信息,请参阅针对自定义模型行为的回调

工作点和初始状态值

您可以在各次快速重启仿真之间更改初始状态值,包括 ModelOperatingPoint

当在快速重启模式下使用了初始状态的 ModelOperatingPoint 对象时,每个新仿真都将重置为模型的开始时间,而不是每个 ModelOperatingPoint 对象的快照时间。此后,在第一个向前步进中,Simulink 检查是否指定了 ModelOperatingPoint。如果是,Simulink 会先还原到该状态,然后再计算下一仿真步。因此,第一个仿真步会高效地快进到指定的 ModelOperatingPoint 对象的快照时间。

使用仿真数据检查器分析数据

快速重启支持使用仿真数据检查器进行数据记录。快速重启中的每次仿真都会创建一个名为 <modelname> fast restart run <number> 的 SDI 对象。number 的值随每次仿真递增。

初始化函数中的自定义代码

当您将自定义代码放置在模型配置参数对话框的配置参数 > 仿真目标 > 自定义代码 > 初始化函数窗格中时,该代码只会在快速重启的第一次仿真过程中被调用。

通过快速重启切换求解器

求解器更改行为取决于您尝试求解的是常微分方程 (ODE) 还是微分代数方程 (DAE)。有关微分方程的更多详细信息,请参阅 对微分代数方程建模

ODE 方程组的求解器更改行为

隐式和显式求解器提供两种不同的模型求解方法。隐式求解器是专门为求解刚性问题而设计的,而显式求解器求解非刚性问题。隐式求解器需要 Jacobian 矩阵。有关隐式和显式求解器的更多详细信息,请参阅 显式与隐式连续求解器

某个 ODE 包含因变量 y 关于一个自变量 t(通常称为时间)的一个或多个导数。

隐式求解器.  如果您使用隐式求解器 A 开始进行仿真,然后决定切换到求解器 B,则第二个求解器可以是隐式或显式求解器。

  • 如果要切换到另一个隐式求解器,将创建 B 并在仿真中使用它。

  • 如果要切换到显式求解器,将创建 B,但仅在没有质量矩阵的情况下才能使用它。如果存在强制使用隐式求解器的质量矩阵或模块,您将看到警告并继续使用前一个求解器。具有质量矩阵的模型将需要隐式求解器来完成仿真。

显式求解器.  如果您使用显式求解器 A 开始进行仿真,然后决定切换到求解器 B,则第二个求解器可以是隐式或显式求解器。

  • 如果您要切换到隐式求解器,但 Jacobian 方法不是自动/完全方法,您将看到警告,它将被满扰动替换以创建隐式求解器。

  • 如果要切换到显式求解器,将创建 B 并在仿真中使用它。

DAE 方程组的求解器更改行为

DAE 方程组同时包含常微分方程和代数方程。代数方程没有任何导数,方程的个数等于方程组中因变量的个数。

如果您使用 DAE 求解器 A 开始进行仿真,然后决定切换到求解器 B,则第二个求解器可以是 ODE 或 DAE 求解器。

  • 如果要切换到另一个 DAE 求解器,将创建 B 并在仿真中使用它。

  • 如果您要切换到 ODE 求解器,您将看到警告,系统将继续使用以前的隐式求解器执行仿真,因为具有质量矩阵的模型需要 DAE 求解器来执行仿真。

相关主题