主要内容

连续时间建模Stateflow

混合系统使用模态逻辑从一种模式过渡到另一种模式,以响应物理事件和条件。在这些系统中,连续时间动力学支配着每种模式。这种混合系统的一个简单例子是弹跳球。球在空中连续移动,直到触地,这时发生模式变化或不连续。结果,球突然改变了方向和速度。有关更多信息,请参见模拟一个连续时间的弹跳球

通过配置Stateflow来模拟响应连续和离散模式变化的混合系统®用于连续时间建模的图表。在状态流图中,可以将模态逻辑简洁而直观地表示为一系列状态、转换或流程图。您还可以将状态信息表示为连续的局部变量,并自动访问时间导数。

仅在Simulink的状态流图中支持连续时间模拟®模型。如果您的连续系统不包含模态逻辑,请考虑使用Simulink模型。有关更多信息,请参见建立连续系统的模型(模型)

配置一个Stateflow连续时间模拟图

要启用状态流图中的持续更新,请设置更新方法表属性连续,详见为状态流图指定属性

缺省情况下,开启过零检测功能。若要禁用此选项,请清除使讨论二阶导数过零检测复选框。有关更多信息,请参见禁用讨论二阶导数过零检测

请注意

你不能用摩尔图进行连续时间建模。

互动动态仿真模块解算器

在小时间步中保持模式

在连续时间模拟过程中,状态流图仅在主要时间步中更新其模式。在次要时间步中,图表根据最后一个主要时间步中的图表状态计算输出。有关更多信息,请参见连续样品时间(模型)

计算每个时间步的连续状态

定义局部连续变量时,状态流图提供了对其派生变量的编程访问。Simulink求解器基于这些变量的值及其在前一个时间步上的导数,计算图表在当前时间步上的连续状态。有关更多信息,请参见连续与离散求解(模型)

在状态转换上注册零交叉点

为了确定何时发生状态转换,状态流图向Simulink求解器注册一个过零函数。当Simulink检测到模式的变化时,求解器从前一个主要时间步向前搜索,以检测状态转换发生的时间。有关更多信息,请参见讨论二阶导数过零检测(模型)

禁用讨论二阶导数过零检测

对状态转换进行过零检测可以在准确性和性能之间进行权衡。当检测到过零时,一个Simulink模型精确地模拟模式变化,而不过度减少步长。对于表现出喋喋不休,或两种连续操作模式之间的频繁波动,过零检测可能会潜在地影响仿真时间。抖振需要Simulink模型快速连续地检查过零,这会减慢仿真速度。在这些情况下,你可以:

  • 禁用零交点检测。

  • 为您的图表选择不同的过零检测算法。

  • 在Simulink模型中修改控制过零频率的参数。

打开“配置参数”对话框,并在解算器窗格,更改模型的过零选项。有关更多信息,请参见讨论二阶导数过零检测(模型)

连续时间模拟指南

要保持连续时间模拟结果的完整性和平滑性,请将图表限制为Stateflow图表语义的受限子集。通过限制语义,输入不依赖于不可预测的因素,例如:

  • Simulink求解器在每个主要时间步中使用的次要间隔数。

  • 稳定积分和过零算法所需的迭代次数。

通过最小化这些副作用,状态流图可以在较小的时间步骤中维护其状态,而只在较大的时间步骤中更新其状态。因此,状态流图可以基于连续时间的恒定状态计算输出。

连续时间图表必须至少有一个状态

在连续时间模拟过程中,图表以相应的小时间步长更新其输出激活状态的动作。没有状态的图表不会产生输出。若要在连续时间中模拟无状态图表的行为,请创建单个状态,该状态调用其图形函数行动。

更新本地数据条目退出,以及转换操作

为了保持连续时间模拟的精度,只在与状态转换相对应的主要时间步期间更新离散和连续本地数据。在状态转换期间,只会发生以下类型的操作:

  • 状态退出动作,这些动作在转换开始时离开状态之前发生。

  • 状态条目操作,这些操作发生在转换结束时进入新状态之后。

  • 转换操作,在转换期间发生。

  • 限制转换上的操作,但仅当转换直接达到某个状态时。例如,此图表执行操作n + +即使条件c2而且c3都是虚假的。因为没有状态转换,所以条件操作会更新n在一个小的时间步长,并导致一个错误。

    包含称为A、B和C的状态流图。

是否在状态下写入本地连续数据操作,因为这些操作发生在较小的时间步骤中。

求状态导数行动

在小时间步中,连续时间图只执行状态行动。因为Simulink模型在小时间步内读取连续时间导数,所以在操作,以提供最新的计算。

不读取状态下的输出或衍生品动作或在转换条件中

在较小的时间步长中,输出和导数有可能不反映它们的最当前值。为了提供平滑输出,可以从本地离散数据、本地连续数据和图表输入中计算值。

不叫动态仿真模块功能状态动作或在转换条件中

不能在较小的时间步长期间调用Simulink函数。相反,只在主要时间步骤(state)期间发生的动作中调用Simulink函数条目退出操作和转换操作。在状态下调用Simulink函数动作或在过渡条件下会在模拟过程中导致错误。有关更多信息,请参见在状态流图中重用Simulink函数

使用离散变量控制条件行动

为了防止主要时间步骤之间的模式更改,影响控制流的条件行动依赖于离散变量。离散变量在主要时间步之间不改变值。

不使用输入事件

输入事件的存在使图表表现得像一个被触发的子系统,无法在连续时间内进行模拟。例如,如果图表使用连续更新方法,此模型将生成错误。

包含带有输入事件的状态流图的Simulink模型。

要模拟输入事件的行为,将输入信号通过打穿越块作为连续时间图表的输入。

包含状态流图和命中交叉块的Simulink模型。

不使用内部过渡

在连续时间模拟过程中,当模式发生变化时条目目标状态的动作向Simulink模型表明发生了状态转换。对于内部转换,图表永远不会执行条目行动。有关更多信息,请参见内心的转变

限制使用时间逻辑

不要使用基于事件的时间逻辑,因为在连续时间模拟中,没有tick的概念。连续时间模拟只使用绝对时间时间逻辑。有关更多信息,请参见使用时态逻辑执行控制图

不使用变更检测操作符

为了实现变更检测,Stateflow会以一种影响小时间步和下一个大时间步之间图表行为的方式缓冲变量。

不要修改操作点值

连续时间图表的操作点是只读的。您可以为连续时间图表保存一个操作点,并将其用作模拟的初始状态。但是,您不能修改状态活动或操作点中的任何数据值。有关更多信息,请参见操作点的限制

相关的话题

Baidu
map