Main Content

退出状态

当发生转出某状态的有效转移时,状态将被标记为 exit。当出现以下任一情况时,状态将被标记为 exit:

  • 出向转移起始于状态边界。

  • 出向转移跨越状态边界。

  • 目标状态是激活状态的一个并行子状态。

退出状态的工作流

此流程图显示 Stateflow® 中退出某状态时执行的事件进程。在该流程图中,当前状态是指其中有决策正在进行或有进程正在发生的状态。

Flow chart that shows the steps for exiting a state.

exit 动作

当某个状态被激活且存在从该状态起始的有效转移时,将执行该状态的 Exit 动作。状态在执行其 exit 动作后变为非激活。

exit 动作以前缀 exit(或 ex)开头,后跟必要的冒号 (:) 以及一个或多个动作。使用回车符、分号 (;) 或逗号 (,) 分隔多个动作。

退出状态示例

在此示例中,Stateflow 图经过初始化并执行了 StateAStateA1entry 动作。对于此图,图中的 during 动作执行了两次。在一个新时间步,图被唤醒。

按照 Stateflow 图执行的工作流计算转移的工作流StateB 被标记为 entry。StateA 是转移的源状态。在此时间步,x = 5y = 2z = 0

Stateflow chart with top-level states called StateA and StateB. StateA has substates StateA1 and StateA2. StateB has substates StateB1 and StateB2.

在按照状态 exit 动作的流程图直到图进入休眠状态的过程中,此图的执行步骤顺序如下:

  1. StateA 不是 StateB 的父状态。

  2. 执行 StateA 的 exit 动作,并将 StateA 标记为非激活。现在 z = 1

  3. StateA 没有父状态。

  4. 转至 entry 动作

这些步骤完成了 StateAexit 工作流。然而,图尚未处于休眠状态。

继续对 StateB 执行进入图或状态的工作流以完成该时间步。

通过使用超转移退出状态

超转移是图中不同层次之间的转移。超转移可以是顶层图中的状态与它的一个子状态中的状态之间的转移,也可以是位于不同子状态中的状态之间的转移。您可以创建跨图中任意层数的超转移。

当状态通过超转移退出时,在执行转移源的 exit 动作后,其父状态标记为非激活,并且执行父状态的 exit 动作。在此示例中,StateA2 被标记为 exitStateB1 被标记为 entry。此时,x = 5y = 5z = 0

Stateflow chart with top-level states called StateA and StateB. StateA has substates StateA1 and StateA2. StateB has substates StateB1 and StateB2.

在按照进入图或状态的工作流执行动作直至图进入休眠状态的过程中,退出状态 StateA2 的执行步骤顺序如下:

  1. StateA2 不是目标状态 (StateB1) 的父状态。

  2. StateA2 执行 exit 动作,并将 StateA2 标记为非激活。

  3. StateA2 有父状态 StateA

  4. StateA 不是目标状态 (StateB1) 的父状态。

  5. StateA 执行 exit 动作,并将 StateA 标记为非激活。

  6. StateA 没有父状态。

这些动作完成了 StateA2StateAexit 工作流。然而,图尚未处于休眠状态。

继续对 StateBStateB1 执行进入图或状态的工作流以完成该时间步。

相关主题