使用 Simulink 编辑器步进仿真
此示例说明如何步进仿真。通过使用 Simulink 编辑器中的控件,您可以按一个或多个时间步来推进仿真,或通过逐模块推进仿真来步进时间步。
此示例仅说明与步进仿真相关的功能和选项。要通过步进仿真在您要研究的点处暂停,请使用信号断点。有关详细信息,请参阅Debug Simulation Using Signal Breakpoints。
要在脚本仿真中步进一个或多个时间步,请使用 Simulation
对象。
打开模型并设置调试工具
打开实现范德波尔方程的模型 vdp
。有关该模型的详细信息,请参阅范德波尔振荡器。
openExample("simulink_general/VanDerPolOscillatorExample",... supportingFile="vdp")
在开始仿真之前,设置相关的调试工具。
要逐模块步进时间步,请检查以确认模型中的仿真模式设置为普通且启用了低级调试。
在 Simulink® 工具条中:
在仿真选项卡或调试选项卡的仿真部分,检查以确认仿真模式列表选择为普通。
在调试选项卡的断点部分中,点击断点列表。在断点列表中,检查以确认在时间步内暂停处于选中状态。
为了节省迭代调试仿真的时间,请启用快速重启。
在 Simulink 工具条的仿真选项卡上,点击快速重启。
要在步进仿真的同时查看模块图中的信号值,请添加端口值标签。
点击画布左上角的空白区域,并拖动以选择模块图中的所有内容。然后,在调试选项卡的工具部分中,在端口值按钮组中,点击在所选信号上显示端口值标签
。添加端口值标签后,每个信号都显示
no data yet
,直到仿真前进到为端口值标签提供新值的点。要在逐模块步进的同时查看执行顺序,请打开执行顺序查看器。
在断点列表中,点击“打开执行顺序查看器”
。
提示
要启用步入 MATLAB Function 模块和 Stateflow® 图,请在开始调试仿真之前选择允许在仿真期间设置断点。
步进仿真时间步
要开始对模型 vdp
进行仿真,请在 Simulink 工具条的仿真选项卡上,点击步进。仿真开始并在计算仿真中第一个时间步的值(对应于仿真开始时间)后暂停。
要监控仿真状态和仿真时间,请使用 Simulink 编辑器底部的状态栏。在仿真暂停时,进度条会指示仿真状态。状态栏显示最近计算了输出值的时间步的仿真时间。仿真时间上的星号表示仿真内部状态下的仿真时间早于状态栏中显示的时间。
默认情况下,每次您点击步进,仿真都会前进一个时间步。状态栏中的时间会更新,端口值标签也会更新以显示新信号值。
要在每次点击步进时将仿真前进多个时间步,请配置逐步仿真选项。要打开逐步仿真选项对话框,请点击步退按钮箭头,然后选择配置仿真步。在逐步仿真选项对话框中,将步退/步进数指定为 5
。然后点击确定。
现在,当您点击步进时,仿真将前进五个时间步。在状态栏中,您可以看到整体仿真进度,并且当您步进时,时间会以更大的增量变化。
双击 Scope 模块。随着仿真的进行,图会更新以显示信号 x1
和 x2
的数据。点击步进查看 Scope 模块更新,以显示另外五个时间步的数据。
逐模块步进时间步
要分析仿真如何计算模型的信号值,可以逐模块步进时间步。逐模块步进会根据在仿真初始化阶段确定的执行顺序,按一次一个模块的方式推进仿真。有关软件如何确定执行顺序的详细信息,请参阅控制和显示执行顺序。
为了帮助您跟踪仿真在执行顺序中和模块图中的暂停位置,请在逐模块步进时使用执行顺序查看器。要查看模型 vdp
的执行顺序,请在执行顺序查看器中,选择任务 0。执行顺序查看器将执行顺序显示为列表,并用在任务 0 中执行的模块的执行顺序来注解模块图。执行顺序查看器中的模块列表包括软件添加的隐藏模块,这些隐藏模块不会出现在模块图中。
要开始逐模块步进仿真,请在 Simulink 工具条的调试选项卡上,点击越过。仿真在执行任务 0 的执行顺序中的第一个模块之前暂停。名为 x1
的 Integrator 模块上的绿色突出显示表示在模块图中仿真暂停的位置。执行顺序查看器通过突出显示任务 0 的执行列表中的对应行来指示仿真暂停的位置。
状态栏左侧的状态字符串包括名为 x1
的模块的路径,以指示仿真暂停的位置。
要执行名为 x1
的模块,请再次点击越过。仿真将前进并在执行执行顺序中的下一个模块之前暂停。绿色突出显示移至名为 Out1
的 Outport 模块。执行顺序查看器突出显示名为 Out1
的模块的行。名为 x1
的信号上的端口值标签会更新,以显示为当前时间步计算的新值。
点击越过继续步进时间步。在步进时,您可以看到每个模块的输出值是如何变化的,以及每个模块用于计算该步的输出值的输入值。
在 Scope 模块执行后,仿真在一个隐藏模块上暂停。软件添加隐藏模块有几个原因,例如自动解决某些建模问题和记录仿真数据。由于软件不会在模块图中显示隐藏模块,因此模块图不会在任何模块上显示绿色突出显示以指示仿真暂停的位置。执行顺序查看器突出显示隐藏模块的行,状态字符串指示仿真在一个隐藏模块上暂停。
通过点击跳过继续逐模块推进仿真,直到仿真在 Sum 模块上暂停。当您点击越过来执行 Sum 模块时,仿真会前进到下一个时间步,并在执行执行顺序中的第一个模块(名为 x1
的模块)之前暂停。
要使仿真步进通过当前时间步并在计算下一个时间步之前暂停,请点击步进。
注意
在一个时间步内暂停时,您可以从 sldebug
编程接口使用一些函数来获取有关仿真的附加信息。例如,您可以使用 probe
函数来查看有关指定模块的信息。sldebug
编程接口中的函数显示的值可能与端口值标签显示的值不同。sldebug
编程接口中的函数显示为子时间步和主时间步计算的值。端口值标签仅显示主时间步的值。有关详细信息,请参阅Simulink Debugging Programmatic Interface。
步退时间步
除了按时间步或逐模块向前步进仿真,您还可以在仿真时步退一个或多个时间步。为了支持在仿真中步退,软件在仿真中前进时捕获模型工作点的快照。由于捕获这些快照需要内存并可能影响仿真性能,因此默认情况下在仿真中是禁用步退的。有关详细信息,请参阅How Stepping Through Simulations Works。
要在仿真中启用步退,请执行以下操作:
打开逐步仿真选项对话框。
在 Simulink 工具条的仿真选项卡或调试选项卡上,点击步退按钮箭头,然后选择配置逐步仿真。
在逐步仿真选项对话框中,选择启用步退。
点击确定。
由于在仿真开始时没有启用步退,因此软件没有仿真中任何先前时间步的快照。您必须先执行步进,才能执行步退。即使在步进后,也无法在仿真中步退超出启用了步退的仿真时间步。
点击步进两次。然后,点击步退。在状态栏中,仿真时间会更新以反映步退。端口值标签也会更新,以显示从您步退的时间开始的值。
当您第二次点击步退时,软件会禁用步退按钮,因为您无法在此仿真中进一步步退。
完成或停止仿真
当您完成步进仿真时,可以继续仿真直到结束,或在当前时间步停止仿真。
要运行仿真直至仿真停止时间,请在 Simulink 工具条中,在仿真选项卡或调试选项卡上,点击继续。
要在当前时间步停止仿真,请在 Simulink 工具条中,在仿真选项卡或调试选项卡上,点击停止。