主要内容

评估转换

Stateflow®使用图表中的转换从一个排他(OR)状态移动到另一个排他(OR)状态。为条目而且执行Stateflow评估转换,以确定它们是否有效。有效的转换是其条件标签为真且路径结束于某个状态的转换。如果转换有效,statflow将从源状态退出并进入目标状态。以了解评估何时发生在执行而且条目工作流,看到状态流程图的执行而且输入图表或状态

评估转换的工作流

显示评估转换步骤的流程图。

过渡评估令

当多个转换起源于单个源时,例如状态或连接,Stateflow使用求值顺序来确定何时测试每个转换。根据图表使用的动作语言,您可以显式或隐式地创建转换的顺序。无论是显式排序还是隐式排序,转换都会在转换源附近显示一个数字,该数字指定转换顺序。

请注意

使用显式排序可避免在编辑图表时改变过渡顺序。

明确的要求

当您打开一个新的状态流图表时,所有来自源的传出转换都会按照您创建它们的顺序自动编号。一开始的顺序是1并继续到源的下一个可用号码。

若要更改转换的执行顺序,请右键单击转换,将光标放在转换上执行顺序,并选择要执行转换的顺序。当您更改一个转换编号时,状态流图会自动为源的其他传出转换重新编号,方法是保留它们的相对顺序。

隐式排序

对于隐式排序模式的C图,状态流图根据以下条件评估来自单个源的一组传出转换:

  • 层次结构。

    图表根据每个转换的父级的层次结构级别,按顺序评估一组传出转换。

  • 标签。

    图表根据标签评估一组具有相同层次优先级的传出转换,其优先级顺序如下:

    1. 带有事件和条件的标签

    2. 带有事件的标签

    3. 带条件标签

    4. 没有标签

    有关使用事件时图表行为的更多信息,请参见使用隐式事件控制图表行为

  • 转换源的角面位置。

    图表基于源对象表面上的角度位置,以相等的层次和标签优先级评估一组传出转换。时钟位置最小的过渡具有最高的优先级。例如,具有2点钟源位置的转换比具有4点钟源位置的转换具有更高的优先级。源位置为12点钟的转换优先级最低。

转换到父状态的内边缘

结束于父状态内边缘的转换是返回默认转换路径的快捷方式,并且在当前时间步骤期间计算默认路径。在本例中,从状态的转换B立即导致到默认状态的转换一个

显示过渡到状态内边缘的图表。

如果存在默认转换,则Stateflow立即执行这些路径。如果没有,也没有孩子,那么时间步骤就结束了。在这两种情况下,父进程保持活动状态,并且不执行父进程的退出和进入操作。

评估外部过渡

在本例中,状态流图已初始化,并且条目执行以下操作StateA.一个新的时间步长出现,图表被唤醒。请按照状态图执行的工作流,状态流从中找到多个外部转换路径StateA.在这个时间步X = 1Y = 1,Z = 1

状态流图,状态名为StateA、StateC、state和StateE。

请按照评估转换的工作流,计算此图表的转换的步骤如下:

  1. 过渡1从StateA标记为评估。

  2. 过渡1从StateA有一个条件。

  3. 这个条件是真的。

  4. 转换1的目的地StateA不是一个国家。

  5. 结确实有向外的跃迁。

  6. 从连接开始的过渡1被标记为求值。

  7. 从结点开始的过渡1有一个条件。

  8. 条件为假。

  9. 从交界处开始的过渡2被标记为求值。

  10. 从结点开始的过渡2没有条件。

  11. 从结开始的转换2的目的地是一个状态(所述)。

  12. 所述被标记为条目,StateA被标记为退出

若要完成时间步骤,请执行退出状态工作流StateA输入图表或状态的工作流StateE

用回溯评估外部转换

当来自源的所有传出转换都无效或没有以终止连接结束,但存在以前未计算的转换时,statflow返回到以前的状态或连接以计算所有可能的路径。

在本例中,状态流图已初始化,并且条目执行以下操作StateA.一个新的时间步长出现,图表被唤醒。请按照状态图执行的工作流,状态流从中找到多个外部转换路径StateA.在这个时间步X = 1Y = 1,Z = 1

状态流图,状态名为StateA、StateC、state和StateE。

请按照评估转换的工作流,计算此图表的转换的步骤如下:

  1. 过渡1从StateA标记为评估。

  2. 过渡1从StateA有一个条件。

  3. 这个条件是真的。

  4. 转换1的目的地StateA不是一个国家。

  5. 结确实有向外的跃迁。

  6. 从连接开始的过渡1被标记为求值。

  7. 从结点开始的过渡1有一个条件。

  8. 条件为假。

  9. 从交界处开始的过渡2被标记为求值。

  10. 从结点开始的过渡2有一个条件。

  11. 条件为假。

  12. 过渡2从StateA标记为评估。

  13. 过渡2从StateA没有条件。

  14. 转换2的目的地StateA是一个状态(StateE)。

  15. StateE被标记为条目,StateA被标记为退出

若要完成时间步骤,请执行退出状态工作流StateA输入图表或状态的工作流StateE

防止回溯

在本例中,终端连接防止回溯。状态流图被初始化,并且条目执行以下操作StateA.一个新的时间步长出现,图表被唤醒。请按照状态图执行的工作流,状态流从中找到多个外部转换路径StateA.在这个时间步X = 1Y = 1,Z = 1

状态流图,状态名为StateA、StateC、state和StateE。

请按照评估转换的工作流,计算此图表的转换的步骤如下:

  1. 过渡1从StateA标记为评估。

  2. 过渡1从StateA有一个条件。

  3. 这个条件是真的。

  4. 转换1的目的地StateA不是一个国家。

  5. 结确实有向外的跃迁。

  6. 从连接开始的过渡1被标记为求值。

  7. 从结点开始的过渡1有一个条件。

  8. 条件为假。

  9. 从交界处开始的过渡2被标记为求值。

  10. 从结点开始的过渡2有一个条件。

  11. 条件为假。

  12. 从交界处开始的过渡3被标记为计算。

  13. 从结点开始的过渡3没有条件。

  14. 目的地不是状态,也没有任何传出转换。

  15. 回到状态图执行的工作流

若要完成时间步骤,请执行状态图执行的工作流StateA,从你离开的地方开始。

使用条件和转换操作评估外部转换

这个例子包含了条件动作和转换动作:

  • 在转换标签语法中,条件操作紧跟在转换条件之后,并用花括号括起来({})。当条件被计算为真时,但在确定转换路径有效之前,将执行条件操作。

  • 在转换标签语法中,转换操作前面有一个正斜杠(/),并用大括号括起来({})。仅在确定转换路径有效之后才执行转换操作。

状态流图被初始化,并且条目执行以下操作StateA.一个新的时间步长出现,图表被唤醒。有多个外部转换路径StateA.在这个时间步X = 1Y = 1,Z = 1

状态流图,状态名为StateA、StateC、state和StateE。

请按照评估转换的工作流,计算此图表的转换的步骤如下:

  1. 过渡1从StateA标记为评估。

  2. 过渡1从StateA有一个条件([y >= 1])。

  3. 这个条件是真的。

  4. 没有条件动作。

  5. 转换1的目的地StateA不是一个国家。

  6. 结确实有向外的跃迁。

  7. 从连接开始的过渡1被标记为求值。

  8. 从结点开始的过渡1有一个条件([x > 2])。

  9. 条件为假。

  10. 从交界处开始的过渡2被标记为求值。

  11. 从结点出发的过渡2有一个条件([x >= 1])。

  12. 这个条件是真的。

  13. 有一个条件动作({y = 0;})。现在Y = 0

  14. 结确实有向外的跃迁。

  15. 从结的过渡被标记为计算。

  16. 从结点开始的过渡1有一个条件([z >= 5])。

  17. 条件为假。

  18. 过渡2从StateA标记为评估。

  19. 过渡2从StateA没有条件。

  20. 转换2的目的地StateA是一个状态(所述)。

  21. 所述被标记为条目,StateA被标记为退出.执行此有效路径的转换操作(/{z = 5})。现在Z = 5

若要完成时间步骤,请执行退出状态工作流StateA输入图表或状态的工作流StateE

相关的话题