评估转换
Stateflow®使用图表中的转换从一个排他(OR)状态移动到另一个排他(OR)状态。为条目
而且执行
Stateflow评估转换,以确定它们是否有效。有效的转换是其条件标签为真且路径结束于某个状态的转换。如果转换有效,statflow将从源状态退出并进入目标状态。以了解评估何时发生在执行
而且条目
工作流,看到状态流程图的执行而且输入图表或状态.
评估转换的工作流
过渡评估令
当多个转换起源于单个源时,例如状态或连接,Stateflow使用求值顺序来确定何时测试每个转换。根据图表使用的动作语言,您可以显式或隐式地创建转换的顺序。无论是显式排序还是隐式排序,转换都会在转换源附近显示一个数字,该数字指定转换顺序。
请注意
使用显式排序可避免在编辑图表时改变过渡顺序。
明确的要求
当您打开一个新的状态流图表时,所有来自源的传出转换都会按照您创建它们的顺序自动编号。一开始的顺序是1
并继续到源的下一个可用号码。
若要更改转换的执行顺序,请右键单击转换,将光标放在转换上执行顺序
,并选择要执行转换的顺序。当您更改一个转换编号时,状态流图会自动为源的其他传出转换重新编号,方法是保留它们的相对顺序。
隐式排序
对于隐式排序模式的C图,状态流图根据以下条件评估来自单个源的一组传出转换:
层次结构。
图表根据每个转换的父级的层次结构级别,按顺序评估一组传出转换。
标签。
图表根据标签评估一组具有相同层次优先级的传出转换,其优先级顺序如下:
带有事件和条件的标签
带有事件的标签
带条件标签
没有标签
有关使用事件时图表行为的更多信息,请参见使用隐式事件控制图表行为.
转换源的角面位置。
图表基于源对象表面上的角度位置,以相等的层次和标签优先级评估一组传出转换。时钟位置最小的过渡具有最高的优先级。例如,具有2点钟源位置的转换比具有4点钟源位置的转换具有更高的优先级。源位置为12点钟的转换优先级最低。
转换到父状态的内边缘
结束于父状态内边缘的转换是返回默认转换路径的快捷方式,并且在当前时间步骤期间计算默认路径。在本例中,从状态的转换B
立即导致到默认状态的转换一个
.
如果存在默认转换,则Stateflow立即执行这些路径。如果没有,也没有孩子,那么时间步骤就结束了。在这两种情况下,父进程保持活动状态,并且不执行父进程的退出和进入操作。
评估外部过渡
在本例中,状态流图已初始化,并且条目
执行以下操作StateA
.一个新的时间步长出现,图表被唤醒。请按照状态图执行的工作流,状态流从中找到多个外部转换路径StateA
.在这个时间步X = 1
,Y = 1
,Z = 1
.
请按照评估转换的工作流,计算此图表的转换的步骤如下:
过渡1从
StateA
标记为评估。过渡1从
StateA
有一个条件。这个条件是真的。
转换1的目的地
StateA
不是一个国家。结确实有向外的跃迁。
从连接开始的过渡1被标记为求值。
从结点开始的过渡1有一个条件。
条件为假。
从交界处开始的过渡2被标记为求值。
从结点开始的过渡2没有条件。
从结开始的转换2的目的地是一个状态(
所述
)。所述
被标记为条目
,StateA
被标记为退出
.
若要完成时间步骤,请执行退出状态工作流为StateA
和输入图表或状态的工作流为StateE
.
用回溯评估外部转换
当来自源的所有传出转换都无效或没有以终止连接结束,但存在以前未计算的转换时,statflow返回到以前的状态或连接以计算所有可能的路径。
在本例中,状态流图已初始化,并且条目
执行以下操作StateA
.一个新的时间步长出现,图表被唤醒。请按照状态图执行的工作流,状态流从中找到多个外部转换路径StateA
.在这个时间步X = 1
,Y = 1
,Z = 1
.
请按照评估转换的工作流,计算此图表的转换的步骤如下:
过渡1从
StateA
标记为评估。过渡1从
StateA
有一个条件。这个条件是真的。
转换1的目的地
StateA
不是一个国家。结确实有向外的跃迁。
从连接开始的过渡1被标记为求值。
从结点开始的过渡1有一个条件。
条件为假。
从交界处开始的过渡2被标记为求值。
从结点开始的过渡2有一个条件。
条件为假。
过渡2从
StateA
标记为评估。过渡2从
StateA
没有条件。转换2的目的地
StateA
是一个状态(StateE
)。StateE
被标记为条目
,StateA
被标记为退出
.
若要完成时间步骤,请执行退出状态工作流为StateA
和输入图表或状态的工作流为StateE
.
防止回溯
在本例中,终端连接防止回溯。状态流图被初始化,并且条目
执行以下操作StateA
.一个新的时间步长出现,图表被唤醒。请按照状态图执行的工作流,状态流从中找到多个外部转换路径StateA
.在这个时间步X = 1
,Y = 1
,Z = 1
.
请按照评估转换的工作流,计算此图表的转换的步骤如下:
过渡1从
StateA
标记为评估。过渡1从
StateA
有一个条件。这个条件是真的。
转换1的目的地
StateA
不是一个国家。结确实有向外的跃迁。
从连接开始的过渡1被标记为求值。
从结点开始的过渡1有一个条件。
条件为假。
从交界处开始的过渡2被标记为求值。
从结点开始的过渡2有一个条件。
条件为假。
从交界处开始的过渡3被标记为计算。
从结点开始的过渡3没有条件。
目的地不是状态,也没有任何传出转换。
回到状态图执行的工作流.
若要完成时间步骤,请执行状态图执行的工作流为StateA
,从你离开的地方开始。
使用条件和转换操作评估外部转换
这个例子包含了条件动作和转换动作:
在转换标签语法中,条件操作紧跟在转换条件之后,并用花括号括起来(
{}
)。当条件被计算为真时,但在确定转换路径有效之前,将执行条件操作。在转换标签语法中,转换操作前面有一个正斜杠(
/
),并用大括号括起来({}
)。仅在确定转换路径有效之后才执行转换操作。
状态流图被初始化,并且条目
执行以下操作StateA
.一个新的时间步长出现,图表被唤醒。有多个外部转换路径StateA
.在这个时间步X = 1
,Y = 1
,Z = 1
.
请按照评估转换的工作流,计算此图表的转换的步骤如下:
过渡1从
StateA
标记为评估。过渡1从
StateA
有一个条件([y >= 1]
)。这个条件是真的。
没有条件动作。
转换1的目的地
StateA
不是一个国家。结确实有向外的跃迁。
从连接开始的过渡1被标记为求值。
从结点开始的过渡1有一个条件(
[x > 2]
)。条件为假。
从交界处开始的过渡2被标记为求值。
从结点出发的过渡2有一个条件(
[x >= 1]
)。这个条件是真的。
有一个条件动作(
{y = 0;}
)。现在Y = 0
.结确实有向外的跃迁。
从结的过渡被标记为计算。
从结点开始的过渡1有一个条件(
[z >= 5]
)。条件为假。
过渡2从
StateA
标记为评估。过渡2从
StateA
没有条件。转换2的目的地
StateA
是一个状态(所述
)。所述
被标记为条目
,StateA
被标记为退出
.执行此有效路径的转换操作(/{z = 5}
)。现在Z = 5
.
若要完成时间步骤,请执行退出状态工作流为StateA
和输入图表或状态的工作流为StateE
.