使用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