文档

使用SimState保存和恢复模拟状态

这个例子展示了如何使用SimState对象保存和恢复模拟状态。它还说明了使用SimState对象的好处。

SimState对象包含与模型模拟相关的所有变量集。在模拟结束时保存SimState对象后,Simulink®可以重新加载SimState并从保存SimState的时间开始继万博1manbetx续模拟。此操作产生的模拟结果与模拟从未中断过一样。

这个例子说明:

  • 如何保存最终状态(记录的状态)并不总是足以完整和准确地恢复模拟状态。

  • 如何使用SimState特性来保存和恢复完整的模拟状态。

具有可变传输延迟模型的困难

在模拟期间记录的状态是完整描述模拟状态所需的所有信息的子集。某些块依赖于不作为非simstate最终状态导出的一部分记录的内部信息。其中一个这样的块是传输延迟块。具有传输延迟块的模型通常很难完全恢复到特定状态,因为传输延迟的状态没有作为“最终状态”数据记录的一部分保存在结构格式或数组格式中。

为了说明这个问题,比较两种情况的模拟结果:

1.模拟一个包含传输延迟块的模型,从0到5秒,并在工作区中保存“最终状态”值。然后加载第一组最终状态并模拟5到10秒。

2.从0到10秒模拟相同的模型,并强制模型在5秒时产生输出。我们把这个模拟的结果称为基线结果,因为它是一个不间断的模拟。

第一次模拟的结果与基线结果的前半部分相匹配。如果第一个模拟的模拟状态已经完全恢复,那么第二个模拟结果将与基线的后半部分匹配。

首先,加载这个模型:

mdl =“sldemo_VariableTransportDelay”;load_system (mdl);

模拟至时间5,并以结构格式保存最终状态:

Out = sim(mdl,“StopTime”“5”“SaveFinalState”“上”“FinalStateName”“xFinal”“SaveFormat”“结构”);Y1 = out.get()“ScopeData”);

加载最后一次模拟的最终状态并运行到10:

assignin (“基地”“xFinal”重燃(“xFinal”));Out1 = sim(mdl,“开始时间”“5”“StopTime”“十”“SaveFinalState”“关闭”“LoadInitialState”“上”“InitialState”“xFinal”);= = = = = = =“ScopeData”);

运行一个不间断的模拟,这将作为基线结果:

Out2 = sim(md1,“OutputOption”“AdditionalOutputTimes”“OutputTimes”[05:10]“LoadInitialState”“关闭”);2.get()“ScopeData”);

绘制结果。注意,从5秒到10秒,基线结果的后半部分与模拟不匹配,其初始状态是从5秒保存的最终状态恢复的:

图;Idx =1:3 subplot(3,1, Idx);情节(y.time y.signals (idx) . values);持有;情节([y1.time;y2.time),[y1.signals (idx) . values; y2.signals (idx) . values],“r——”);持有;网格;结束

保存和恢复完整的模拟状态

您可以在Simulink中保存完整的最终模拟状态。万博1manbetxSimState对象。SimState对象包含恢复模拟结果所需的所有变量。通过使用完整的SimState, Simulink能够完全恢复仿万博1manbetx真状态并重现基线仿真结果。

设置Simulink的参数,以便在模拟结束时万博1manbetx保存完整的SimState。

Out3 = sim(mdl,“StopTime”“5”“SaveFinalState”“上”“LoadInitialState”“关闭”“SaveCompleteFinalSimState”“上”“FinalStateName”“xFinal”);= = = = = = =“ScopeData”);

从上次模拟中加载SimState并再运行5秒。开始时间值必须保持为0.0(该值是原始模拟的开始时间)。该软件将原始模拟开始时间存储在xFinal中。此值必须与当前模拟的开始时间匹配,才能恢复模拟状态。

assignin (“基地”“xFinal”out3.get (“xFinal”));Out4 = sim(mdl,“StopTime”“十”“SaveFinalState”“关闭”“LoadInitialState”“上”“InitialState”“xFinal”);= = = = = = =“ScopeData”);

绘制结果并将其与基线模拟进行比较。注意,这一次,模拟状态已经完全恢复,SimState结果与基线匹配。

图;Idx =1:3 subplot(3,1, Idx);情节(y.time y.signals (idx) . values);持有情节([y1.time;y2.time),[y1.signals (idx) . values; y2.signals (idx) . values],“r——”);持有;网格;结束

关闭模型并清除本例中使用的变量

close_system (mdl 0);清晰的mdlidxxFinaly日元y2y3着干活out2out3out4
这个话题有帮助吗?