退出状态
当发生转出某状态的有效转移时,状态将被标记为 exit。当出现以下任一情况时,状态将被标记为 exit:
出向转移起始于状态边界。
出向转移跨越状态边界。
目标状态是激活状态的一个并行子状态。
退出状态的工作流
此流程图显示 Stateflow® 中退出某状态时执行的事件进程。在该流程图中,当前状态是指其中有决策正在进行或有进程正在发生的状态。
exit 动作
当某个状态被激活且存在从该状态起始的有效转移时,将执行该状态的 Exit
动作。状态在执行其 exit
动作后变为非激活。
exit 动作以前缀 exit
(或 ex
)开头,后跟必要的冒号 (:
) 以及一个或多个动作。使用回车符、分号 (;
) 或逗号 (,
) 分隔多个动作。
退出状态示例
在此示例中,Stateflow 图经过初始化并执行了 StateA
和 StateA1
的 entry
动作。对于此图,图中的 during
动作执行了两次。在一个新时间步,图被唤醒。
按照 Stateflow 图执行的工作流和计算转移的工作流,StateB
被标记为 entry。StateA
是转移的源状态。在此时间步,x = 5
、y = 2
且 z = 0
。
在按照状态 exit 动作的流程图直到图进入休眠状态的过程中,此图的执行步骤顺序如下:
StateA
不是StateB
的父状态。执行
StateA
的 exit 动作,并将StateA
标记为非激活。现在z = 1
。StateA
没有父状态。转至 entry 动作。
这些步骤完成了 StateA
的 exit
工作流。然而,图尚未处于休眠状态。
继续对 StateB
执行进入图或状态的工作流以完成该时间步。
通过使用超转移退出状态
超转移是图中不同层次之间的转移。超转移可以是顶层图中的状态与它的一个子状态中的状态之间的转移,也可以是位于不同子状态中的状态之间的转移。您可以创建跨图中任意层数的超转移。
当状态通过超转移退出时,在执行转移源的 exit 动作后,其父状态标记为非激活,并且执行父状态的 exit 动作。在此示例中,StateA2
被标记为 exit
,StateB1
被标记为 entry
。此时,x = 5
,y = 5
且 z = 0
。
在按照进入图或状态的工作流执行动作直至图进入休眠状态的过程中,退出状态 StateA2
的执行步骤顺序如下:
StateA2
不是目标状态 (StateB1
) 的父状态。对
StateA2
执行exit
动作,并将StateA2
标记为非激活。StateA2
有父状态StateA
。StateA
不是目标状态 (StateB1
) 的父状态。对
StateA
执行exit
动作,并将StateA
标记为非激活。StateA
没有父状态。
这些动作完成了 StateA2
和 StateA
的 exit
工作流。然而,图尚未处于休眠状态。
继续对 StateB
和 StateB1
执行进入图或状态的工作流以完成该时间步。