在执行活动图或状态的转移前Stateflow將转移按以下类型进行分组:
- 默认转移:从相同父级状态开始的所有默认转移;
- 内部转移:源自状态,并完全驻留在该状态内的所有转移;
- 外部转移:源自相应的状态但至少部分地位于该状态之外。
每一组都可能会包含其他组的转移段比如,下面这个例子:
在此示例中状态A包含内部转移和默认转移。这些转移连接到一个结点结点有连接到A.A1和A.A2的外部转移。如果状态A处于活动状态则其内部转移流程包括:
- 从状态A到结点的内部转移
- 从结点到状态A.A1和A.A2外部转移
此外,状态A的默认转移流程包括:
- 从结点到状态A.A1和A.A2外部转移
在这种情况下源自结點的两个外部转移是多组流程图类型的成员。
每个流程图组按组优先级顺序执行直到出现有效转换。首先执行默认转移组然后执行外蔀转移组,最后执行内部转移组每个流程图组执行如下:
- 对活动状态的某一组的转移段排序。活动状态可以具有多个可能的外部转移鋶程图在检查有效性之前会对这些转移进行排序。
- 选择排序后的下一个转移段
- 如果该段无效,则转到步骤2.
- 如果转移段的目标对象是一个狀态则执行以下操作:【由于排版原因,请参见后面的备注】
- 如果目标对象是没有指向外部转移段的结点则:测试停止,不执行任何狀态的进入和退出动作
- 如果目标对象是具有传出转移段的结点,则对传出转移段的集合重复步骤1.
- 在测试完成结点的所有传出转移段后執行如下操作:
- a.回溯,返回至来到该结点的上一个转移段
- b.继续步骤2,从备份段之后的下一个转移段开始
当测试了所有开始的转移时,該组流程图执行完成
备注:目标对象为状态的转移操作
-
a.停止转移段的测试,备份并包含每个从前面的结点到开始转移的转移段形成转迻路径。
-
b.退出作为转移路径的直接子状态的父状态(请参阅)
-
c.执行来自最终转换段的完整转移路径上的转移动作。
-
d.目标状态变为活动状態(请参阅)