本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

开始使用快速重启

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

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

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

  3. 执行以下任一操作:

    • 更改可调参数。

    • 调整根级输入。

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

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

    • 更改 Initial state 参数,供下次仿真使用。

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

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

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

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

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

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

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

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

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

    注意

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

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

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

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

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

  • 仿真模式是 Normal 模式或 Accelerator 模式。

注意

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

启用快速重启

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

  • 点击 Simulink Editor 工具栏上的 Fast restart 按钮

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

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

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

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

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

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

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

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

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

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

注意

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

停止仿真

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

  • 仿真不会终止。

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

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

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

退出快速重启

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

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

  • Simulink 终止仿真。

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

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

快速重启方法

在各次仿真之间调整参数

  • 在快速重启模式下初始化了模型时,除模块值和基础工作区变量之外,您还可以在 Configuration Parameters 对话框(在 Simulation 选项卡的 Prepare 下,点击 Model Settings)的 Data Import/ExportSolver 窗格中调整参数。

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

    • IC 模块的 Initial Value 参数

    • Merge 模块的 Initial Output 参数

    • From Workspace 模块的 Data 参数

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

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

当启用快速重启时,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 Editor),请返回步骤 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 置于引用模型的 Accelerated 模式下时。

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

工作点和初始状态值

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

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

使用 Simulation Data Inspector 分析数据

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

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

当您将自定义代码放置在 Model Configuration Parameters 对话框的 Configuration Parameters > Simulation Target > Custom Code > Initialize function 窗格中时,该代码只会在快速重启的第一次仿真过程中被调用。

相关主题