主要内容

计算机中的连续时间建模Stateflow

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

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

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

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

持续更新是一个状态流图属性。

  1. 在图表内单击鼠标右键,然后选择属性从上下文菜单中。

  2. 在“图表属性”对话框中,设置更新方法字段连续。选择此选项时:

    • 使讨论二阶导数过零检测复选框被选中。

    • 启用超步语义复选框不可用。

  3. (可选)默认情况下,启用过零检测。要禁用此选项,请清除使讨论二阶导数过零检测复选框。有关更多信息,请参见禁用讨论二阶导数过零检测

  4. 点击好啊

请注意

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

金宝app解算器

以较小的时间步长保持模式

在连续时间模拟期间,状态流程图仅在主要时间步更新其模式。在次要时间步中,图表根据上一个主要时间步中图表的状态计算输出。有关详细信息,请参阅连续采样时间(金宝app模型)

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

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

在状态转换上注册零交叉

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

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

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

  • 禁用零交点检测。

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

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

您可以选择不同的过零检测算法上解算器窗格中的。有关更多信息,请参见讨论二阶导数过零检测(金宝app模型)

连续时间模拟指南

为了保持连续时间模拟结果的完整性和平滑性,将图表约束为状态流图语义的受限子集。通过限制语义,输入不依赖于不可预知的因素,如:

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

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

通过最小化这些副作用,状态流程图可以在较小的时间步保持其状态,并仅在较大的时间步更新其状态。因此,状态流程图可以基于连续时间的恒定状态计算输出。

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

在连续时间模拟中,图表在较小的时间步长下更新其输出激活状态的动作。没有状态的图表不会产生输出。要在连续时间内模拟无状态图的行为,创建一个调用其中的图形函数的单一状态行动。

更新本地数据进入出口,以及转换操作

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

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

  • 状态进入在转换结束时进入新状态后发生的操作。

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

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

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

计算状态导数行动

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

不要读取状态中的输出或导数过渡条件下的动作或动作

在较小的时间步长内,输出和导数可能不反映其最新值。要提供平滑输出,请从局部离散数据、局部连续数据和图表输入计算值。

不叫金宝app状态函数过渡条件下的动作或动作

不能在次要时间步长期间调用Sim金宝appulink函数。相反,仅在主要时间步(状态)期间发生的操作中调用Simulink函数进入出口操作和转换操作。在状态中调用Simulink函数金宝app在模拟过程中,操作或转换条件会导致错误。有关更多信息,请参见在状态流程图金宝app中重用Simulink组件

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

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

不使用输入事件

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

要模拟输入事件的行为,将输入信号通过交叉路口块作为连续时间图的输入。

不要使用内部转换

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

限制时态逻辑的使用

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

不要使用更改检测操作符

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

不修改工作点值

不支持修改连续时间图的工作点。金宝app如果加载连续时间图表的工作点,则不能修改状态活动或本地或输出图表数据的任何值。有关更多信息,请参见使用图表工作点的规则

相关的话题