Main Content

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

保存和还原仿真工作点

注意

在 R2019a 中,SimState 对象重命名为 ModelOperatingPoint

为了有效地设计系统,您需要以迭代方式对模型进行仿真,以便基于不同的输入值、边界条件或工况来分析系统。在许多应用中,当执行多个仿真时,其启动阶段都具有相同的显著动态行为。例如,在每一组飞机机动飞行之前,都会发生燃气轮机的冷启动起飞。在多个仿真中,您最好:

  1. 对启动阶段进行一次仿真。

  2. 在启动阶段结束时保存仿真快照。

  3. 将此快照作为每一组条件或机动飞行的初始状态。

使用 ModelOperatingPoint 对象保存仿真快照。保存快照后,在将来的仿真中,可以还原 ModelOperatingPoint 对象并使用它来设置初始条件。

ModelOperatingPoint 对象包含以下各项的信息:

  • 记录的状态

  • 求解器和执行引擎的状态

  • 记录过零点的模块的过零信号

  • 模型中某些模块的输出值

    Simulink® 通过分析模块连接和其他信息,来确定它是否有效地使用输出值作为状态信息。

ModelOperatingPoint 对象还存储以下模块的隐藏状态:

  • Transport Delay

  • Variable Transport Delay

  • From Workspace

  • For Each 子系统

  • 条件执行子系统

  • Stateflow

  • MATLAB System

  • Simscape™ Multibody™ Second Generation

通过存储这些信息,ModelOperatingPoint 对象确保从工作点开始的仿真与从头开始运行的仿真具有相同的结果。

使用工作点的好处

  • ModelOperatingPoint 对象保存仿真快照时,除了记录的状态外,它还会在模型中保存其他信息。您可以还原所有这些信息,以确保仿真与不间断的仿真完全匹配。例如,如果求解器信息影响了仿真,则更改模块状态而不使用 ModelOperatingPoint 可能会产生不同的结果。

  • 您可以在仿真过程中保存几个工作点,然后从其中任一工作点还原仿真。

  • ModelOperatingPoint 对象能够还原通常难以还原到特定状态的模块(例如 Transport Delay 模块)的状态。当您使用 Final states 配置参数记录数据时,Transport Delay 模块的状态不会以结构体或数组格式保存。

您还可以使用 Configuration Parameters 对话框的 Data Import/Export 窗格上的 Final states 选项来保存仿真状态。但是,此选项仅保存记录的状态 - 模块的连续状态和离散状态。这些状态只是模型的完整仿真状态的一部分。它们不包括正确执行模块所需的模块隐藏状态的有关信息。

保存工作点

使用以下选项之一在最后一个时间步开始时保存工作点:

  • 在最终的 Stop time

  • 在您使用 PauseStop 按钮中断仿真时也可以在使用 get_param('modelName','CurrentOperatingPoint') 暂停仿真时保存工作点。

  • 在您使用 set_param 或模块(如 Stop 模块)停止仿真时。

交互式保存

  1. 在 Configuration Parameters 对话框的 Data Import/Export 窗格中,选中 Final states 复选框。Save final Operating Point 复选框变为可用。

  2. 选中 Save final Operating Point 复选框。

  3. Final states 文本框中,为 ModelOperatingPoint 对象输入变量名称。

  4. 对模型进行仿真。

保存和还原工作点

sim 命令与 set_param 结合使用。将 SaveOperatingPoint 参数设置为 'on'

sldemo_tonegen
set_param('sldemo_tonegen','SaveFinalState','on','FinalStateName',...
'myOperPoint','SaveOperatingPoint','on');
simOut = sim('sldemo_tonegen','StopTime','10');
myOperPoint = simOut.myOperPoint;

要配置仿真以还原您保存的工作点,请使用 LoadInitialState。Simulink® 会在您仿真模型时还原 ModelOperatingPoint 对象。

set_param('sldemo_tonegen','LoadInitialState','on','InitialState',...
'myOperPoint');
myOperPoint = simOut.myOperPoint;

提示

在保存工作点之前,请在 Configuration Settings > Simulation Target > Advanced Parameters 中禁用 Block Reduction 参数。

还原工作点

在修改模型后,可以使用 ModelOperatingPoint 对象还原仿真快照。Start time 与生成工作点的仿真中的值保持一致。它是原始仿真和当前仿真中所有时间变量以及依赖于时间的变量的参考值。例如,模块可将从仿真开始以来发生的采样时间命中点数保存并还原为其 ModelOperatingPoint 对象。

假设有一个模型从 0 秒运行到 100 秒,现在您要从 100 秒运行到 200 秒。原始仿真和当前仿真的 Start time 都为 0。当前仿真的初始时间为 100 秒。而且,如果模块在原始仿真期间有 10 个采样时间命中点,Simulink 可以判断出下一个采样时间命中点为第 11 个采样时间命中点,此时间点相对于 0 秒,而不是相对于 100 秒。

注意

如果您在还原 ModelOperatingPoint 之前更改了 Start time,Simulink 将用 ModelOperatingPoint 中保存的值覆盖 Start time

交互式还原

  1. 在 Configuration Parameters 对话框中,在 Data Import/Export 窗格中的 Load from workspace 下,选中 Initial state 复选框。此时文本框将可用。

  2. 在文本框中输入包含 ModelOperatingPoint 的变量的名称。

  3. Stop time 设置为大于保存工作点时的值。

从不同 Simulink 版本还原

您可以使用从 R2010a 开始的版本中保存的 ModelOperatingPoint 对象还原模型的 ModelOperatingPoint。但是,此选项仅还原模型的已记录状态。要查看用来保存 ModelOperatingPoint 的 Simulink 版本,请检查 ModelOperatingPoint 对象的 version 参数。

Simulink 会检测您作为初始状态提供的 ModelOperatingPoint 对象是否是在当前版本中保存的。默认情况下,如果 ModelOperatingPoint 不是在当前版本中保存的,Simulink 将显示一条错误消息。您可以配置诊断,以允许 Simulink 显示警告,并还原尽可能多的值。要启用这种尽最大可能进行还原的方式,请在 Configuration Parameters 对话框中,将 Operating Point object from earlier release 的消息设置为 “warning”。先前命名为 SimState 的对象在 19a 中加载为 ModelOperatingPoint 对象。

相关主题