主要内容

连续时间建模Stateflow

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

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

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

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

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

缺省情况下,开启过零检测。若要禁用此选项,请清除启用过零检测复选框。有关更多信息,请参见禁用过零检测

请注意

不能将摩尔图用于连续时间建模。

互动金宝app解算器

维护模式在小时间步骤

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

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

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

在状态转换上注册零交叉

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

禁用过零检测

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

  • 禁用过零检测。

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

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

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

连续时间模拟指南

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

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

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

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

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

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

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

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

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

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

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

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

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

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

计算状态导数行动

在较小的时间步长中,连续时间图只执行状态行动。由于Simuli金宝appnk模型在较小的时间步长中读取连续时间导数,因此在操作,以提供最新的计算。

不读取输出或导数状态动作或在转换条件中

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

不要打电话金宝app国家职能动作或在转换条件中

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

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

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

不使用输入事件

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

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

若要模拟输入事件的行为,请将输入信号传递给打穿越块作为连续时间图的输入。

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

不使用内部过渡

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

限制时间逻辑的使用

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

不使用变更检测操作符

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

不修改工作点值

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

相关的话题