人在仿真软件万博1manbetx

万博1manbetxSimulink &基于模型的设计

R2009a中我最喜欢的新功能:SimState

我很兴奋在Simulink中保存和恢复仿真状态万博1manbetx.这是我最喜欢的R2009a特性,因为人们对它期待已久,它支持重要的模拟新功能。虽然唯一的接口更改是在配置参数的Data Import/Export下添加了一个复选框,但这影响了存储某种状态信息的每个块,包括statflow。有谁能比那些花了几年时间改进Simulink以保存整个模拟状态的开发人员更好地解释这一点呢?万博1manbetx在这篇文章中,我将介绍客座博主智汉

我上次模拟的状态是什么?

由智汉

万博1manbetxSimulink开发者Zhi Han

保存和恢复模拟状态的能力是Simulink用户长期以来的要求之一。万博1manbetx动机有两方面。有时模拟需要很长时间,通常需要将一个很长的模拟分成几个阶段。此外,如果您多次模拟一个模型,那么大多数模拟共享一个共同的阶段,例如系统的启动。在这些情况下,最好在模拟结束时保存系统的状态,然后从保存的状态重新启动模拟。

在R2009a之前,Simulin万博1manbetxk提供了保存最终状态和加载模型初始状态的能力。然而,Simuli万博1manbetxnk只能加载已记录的状态。记录状态是连续状态和作为状态使用的离散工作向量,这只是仿真中使用的变量的子集。在实际的模型中,记录的状态集通常不足以捕获模拟的完整状态。

作为实验,让我们打开一个Simulink演示模型万博1manbetxsldemo_VariableTransportDelay.该模型采用可变运输延迟块来捕捉行驶车辆前轮与后轮垂直位移之间的延迟。

带有传输延迟块的模型通常很难恢复到它们的状态,因为当您保存“Final states”时,Simulink不会以结构格式或数组格式保存传输延迟的状态。万博1manbetx作为演示,我们从0到5秒模拟模型,并在工作空间中以结构格式保存“Final states”。然后我们加载这个保存的状态并模拟5到10秒。

蓝线是不间断模拟的结果,作为我们的基线。红色虚线是我们实验的结果。可以看到,从5秒开始恢复的模拟与不间断的模拟不匹配。

在R2009a中,S万博1manbetximulink引入了特性保存并恢复完整的状态集用于模拟;这是SimState的模型。通过在模拟结束时保存SimState, Simulink能够恢复所有的模拟变量,并在不间断的模拟中再现万博1manbetx完全相同的模拟结果。

现在,我们打勾,重复我们的实验。通过恢复完整的仿真状态,保存和恢复的仿真结果与不间断的仿真结果相匹配。

以下是SimState的一些重要功能:

计时信息

SimState保留上次仿真模型的定时信息,包括起始时间和当前的模拟时间:模拟运行的最后一次时间。恢复后,Simulink将恢复启动时万博1manbetx间和仿真时间。这对于正确处理时变系统非常重要。SimState的这个细节有以下可能会让用户惊讶的效果:

  • 如果恢复的模拟中指定的开始时间与上次模拟的开始时间不同,则使用存储在SimState中的开始时间重写。
  • 当加载SimState时,用户必须确保停止时间大于上次模拟时间;否则,在将SimSta万博1manbetxte加载到模型后,Simulink会立即停止模拟。

结构变化

万博1manbetxSimulink用存储在SimState中的信息检查模型的结构和配置参数,以验证模型在加载SimState之前没有更改。结构更改,如添加或删除块、重命名块或更改块之间的连接,将使模型与SimState不兼容。

访问美国

用户可以访问存储在SimState中的数据。您可以更改保存在SimState中的值,以将模型初始化为与上次模拟不同的操作点。对于记录的状态,值的结构格式为xFinal.loggedStates.对于状态流图,状态可用以下方式:

>> state = xFinal.getBlockSimState('path_to_the_Stateflow_Chart')

要设置状态流图的状态,请使用以下函数。

>> state = xFinal.setBlockSimState('path_to_the_Stateflow_Chart',x)

检查SimState文档有关此新功能如何工作的完整细节。

现在轮到你了

您是否使用以前运行的状态初始化模拟?你请求过这个功能吗?留下一个这里的评论告诉我们你的想法。

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。