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 模块)的状态。当您使用最终状态配置参数记录数据时,Transport Delay 模块的状态不会以结构体或数组格式保存。使用数据集记录格式时,ModelOperatingPoint 返回的结果始终与状态记录方式(非工作点保存操作)返回的结果匹配。加速模式模型引用内模块的记录状态可见且可编辑。许多具有自定义工作点函数的模块的记录状态(例如 Simscape、模型引用加速和可变传输延迟)是可编辑的。

您还可以使用“配置参数”对话框的数据导入/导出窗格上的最终状态选项来保存仿真状态。但是,此选项仅保存记录的状态 - 模块的连续状态和离散状态。这些状态只是模型的完整仿真状态的一部分。它们不包括正确执行模块所需的模块隐藏状态的有关信息。

保存工作点

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

  • 在最终的停止时间

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

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

交互式保存

  1. 在“配置参数”对话框的数据导入/导出窗格中,选中最终状态复选框。保存最终工作点复选框变为可用。

  2. 选中保存最终工作点复选框。

  3. 最终状态文本框中,为 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;

提示

在保存工作点之前,请在配置设置 > 仿真目标 > 高级参数中禁用模块简化参数。

还原工作点

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

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

注意

如果您在还原 ModelOperatingPoint 之前更改了开始时间,Simulink 将用 ModelOperatingPoint 中保存的值覆盖开始时间

交互式还原

  1. 在“配置参数”对话框中,在数据导入/导出窗格中的从工作区加载下,选中初始状态复选框。此时文本框将可用。

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

  3. 停止时间设置为大于保存工作点时的值。

从不同 Simulink 版本还原

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

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

相关主题