开始使用快速重启
当您需要以迭代方式仿真模型来调整参数、获得所需的响应或自动化测试时,请使用快速重启来避免再次编译。快速重启允许您执行迭代仿真,而无需每次编译模型或终止仿真。使用快速重启的一般工作流包括以下步骤。
使用 Simulink® 工具条上的快速重启按钮启用快速重启。
对模型进行仿真。
第一次仿真需要模型编译、初始化并捕获模型工作点的快照。仿真完成后,它并不会真正终止。模型会以快速重启模式再次初始化。
执行以下任一操作:
更改可调参数。
在变步长求解器之间切换。
调整根级输入。
修改基础工作区或模型工作区中的变量以及可调参数引用的数据字典条目。
更改 From File 和 From Workspace 模块的输入。
更改初始状态参数,供下次仿真使用。
使用 Signal Editor 模块,更改数据、重命名信号和场景并添加新场景。
通过使用
set_param
函数和DataLoggingOverride
参数,以编程方式更改模型的信号记录覆盖值。请参阅Override Signal Logging Settings Programmatically。
一旦在快速重启模式下始化了模型,就无法:
更改信号或变量的维度、类型或复/实性。
更改不可调参数,如采样时间。
进行结构性更改,如添加或删除模块或连接。
这些更改要求您再次编译模型。要进行此类更改,请关闭快速重启,进行更改,然后重复此过程。
对模型进行仿真。该模型使用您提供的参数和输入的新值,但不会再次编译。
一旦您获得所需的响应,请关闭快速重启。
注意
禁用快速重启时,软件不会保留模型的任何编译信息。在您下次仿真模型时,模型会进行编译。
准备要使用快速重启的模型
在使用快速重启对模型进行仿真之前,请确保模型满足以下要求:
如果您已在模型中启用回调,请确保在重新初始化模型时,回调不会尝试进行结构性更改。例如,每次仿真开始时都会调用回调,如封装初始化命令。因此,请避免使用对模型进行结构性更改的封装初始化代码。
模型中的所有模块必须支持
ModelOperatingPoint
对象。仿真模式是普通模式或加速模式。
注意
启用快速重启时,您无法在模型编译后保存对模型的更改。要保存更改,软件必须丢弃有关编译状态的信息。要保存对模型的更改,请禁用快速重启。
启用快速重启
使用以下方法之一启用快速重启:
点击 Simulink 编辑器工具栏上的快速重启按钮 。
在 MATLAB® 命令行窗口中,使用
set_param
函数来启用快速重启。set_param(model,"FastRestart","on")
使用快速重启对模型进行仿真
加载模型并打开快速重启后,对模型进行仿真。
通过调用
sim
或点击 Simulink 工具条中的运行按钮 来对模型进行仿真。快速重启中的第一次仿真需要模型编译并捕获模型工作点的快照。仿真完成之后,状态栏会显示模型已在快速重启模式下编译。
当快速重启正在进行时,仿真状态变为
Restarting
,并且 Simulink 编辑器变为冻结状态,就像在模型编译和初始化期间一样。调整模型中的可调参数,如 Gain 模块的增益值,或调整根级输入值。您还可以对基础工作区变量进行更改。您无法调整不可调参数,如采样时间,因为这样做需要再次编译模型。
再次对模型进行仿真。这一次,模型不会编译。当您点击播放按钮或向前步进时,Simulink 会更新具有新值的模块以及引用工作区变量的模块。
当您对结果满意时,可通过点击快速重启按钮来关闭快速重启。
要保留您的更改,请保存模型。
注意
在快速重启模式下初始化模型后,如果您尝试对模型进行结构性更改,软件会发出警告。要进行此类更改,请禁用快速重启。
停止仿真
当您在快速重启仿真过程中点击停止时:
仿真不会终止。
模型处于已初始化状态。
您可以更改模型中的可调参数。
您可以通过禁用快速重启来终止仿真并退出快速重启。
退出快速重启
仅当模型处于已初始化状态时,您才能退出快速重启。在仿真后,点击快速重启按钮。要以编程方式实现这一点,请使用 set_param
函数。
set_param(model,"FastRestart","off")
软件终止仿真。
软件会丢弃关于模型的编译信息。
下次仿真时,模型必须再次编译。
快速重启方法
在各次仿真之间调整参数
在快速重启模式下初始化了模型时,除模块值和基础工作区变量之外,您还可以在“配置参数”对话框(在仿真选项卡的准备下,点击模型设置)的数据导入/导出和求解器窗格中调整参数。
仅当模型已在快速重启模式下初始化时,某些参数才在各次仿真之间可调。这些参数包括:
IC 模块的初始值参数
Merge 模块的初始输出参数
From Workspace 模块的数据参数
Signal Editor 模块的激活场景参数。您也可以打开信号编辑器工具,编辑信号数据,创建和删除场景与信号等。您可以更改活动信号并查看信号属性,但无法在快速重启模式下编辑 Signal Editor 信号属性。
在仿真之间切换求解器
启用快速重启时,可以在仿真之间切换求解器。“配置参数”对话框的求解器列表中仅列出可切换到的有效求解器。如果您使用 set_param
命令在仿真之间切换求解器但设置为无效求解器,您将看到一条警告,无效求解器将被忽略。
快速重启中的模型方法和回调
当启用快速重启时,Simulink 将按如下所示调用模型和模块的方法以及回调:
调用模型的
InitFcn
回调。调用模型的
SetupRuntimeResources
方法。调用
mdlSetupRuntimeResources
S-Function 方法。
调用模型的
Start
方法。调用
mdlStart
S-Function 方法。
调用模型的
Initialize
方法。调用
mdlInitializeConditions
S-Function 方法。注意
使用 ssIsFirstInitCond 标志来保护只应在任何仿真的初始化阶段运行的代码,包括快速重启中的第一次和后续初始化。
调用模型和模块的
StartFcn
回调。注意
步骤 1-5 适用于 Simulink 中的所有仿真(使用或不使用快速重启)。
对于快速重启中的第一次仿真,捕获一个仿真快照。仿真快照包含仿真状态 (
ModelOperatingPoint
) 以及与记录的数据和可视化模块相关的信息。在快照捕获过程中,调用ModelOperatingPoint
S-Function 方法。这是任何仿真的一个标准执行阶段,无论使用还是不使用快速重启。
调用模型的
Outputs
。调用模型的
Update
。调用模型的
Derivatives
。循环重复这些步骤,直到到达停止时间或请求停止为止。
调用模型的
Terminate
方法。调用
mdlTerminate
S-Function 方法。
仿真结束后,调用模型和模块的
StopFcn
回调。这是任何仿真的一个标准阶段,无论使用还是不使用快速重启。还原为快速重启拍下的仿真快照。在还原过程中,调用
set
S-Function 方法。在已重新初始化的状态下等待,直到执行以下操作之一:
要在快速重启模式下运行另一个仿真(以编程方式或使用 Simulink 编辑器),请返回步骤 3。
要结束快速重启模式并取消模型编译:
调用模型方法
CleanupRuntimeResources
和mdlCleanupRuntimeResources
S-Function 方法。此时不要再次调用
StopFcn
回调。
在某些情况下,Start
和 Terminate
方法只调用一次。在每次后续快速重启仿真中都不会再调用这些方法。在这些情况下,这些方法调用会分别与 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
的值随每次仿真递增。
初始化函数中的自定义代码
当您将自定义代码放置在模型配置参数对话框的配置参数 > 仿真目标 > 自定义代码 > 初始化函数窗格中时,该代码只会在快速重启的第一次仿真过程中被调用。