stateflow 图的执行
当 stateflow® 图唤醒时,图将按照一个工作流来执行动作。在下列情况下,stateflow 图会唤醒:
在每个时间步
当 stateflow 图收到事件时
当图第一次唤醒时,图将初始化并变为激活状态,如中所述。当不再执行任何动作时,图将进入休眠状态,直到有新的时间步或事件将图唤醒。
stateflow 图执行的工作流
此流程图显示 stateflow 在执行图或状态时相应的事件进程。在该流程图中,当前状态是指其中有决策正在进行或有进程正在发生的状态。
默认转移
默认转移是一种没有源的转移。在不包含任何状态的 stateflow 图中,默认转移标记流程图的开始。有关详细信息,请参阅在 stateflow 中创建流程图。
如果 stateflow 图不包含任何状态,则图会在每次唤醒时计算默认转移路径。在标记待计算的默认转移后,图将按照 中所示的步骤操作。
注意
图仅在进入状态时计算状态内的默认转移路径,而不是在图每次唤醒时计算。
外部转移
外部转移是一种退出源状态的转移。stateflow 图将标记待计算的外部转移作为执行状态的第一步。在标记待计算的外部转移后,图按照 中所示的步骤操作。
during 动作
during
动作是使用前缀 during
或 du
在状态标签动作中定义的动作。有关详细信息,请参阅定义状态中的动作。
当图被唤醒,状态为激活状态时,如果没有有效的外部转移,则状态会执行 during
动作。
内部转移
内部转移是一种不退出源状态的转移。有关详细信息,请参阅。
stateflow 图在状态执行 during
动作后,会标记待计算的内部转移。在标记待计算的内部转移后,图按照 中所示的步骤操作。
具有有效转移的图执行
在此示例中,stateflow 图已经过初始化并执行了 statea
和 statea1
的 entry
动作。在一个新时间步,图被唤醒。
在此时间步,x = 5
、y = 2
且 z = 0
。
图执行以下步骤:
图有一个激活子状态
statea
。statea
有一个指向stateb
的外部转移。图确定转移有效。图将
stateb
标记为待进入,将statea
标记为待退出。要退出
statea
,图按照 中所示的步骤操作。要进入
stateb
,图按照 中所示的步骤操作。
没有有效转移的图执行
在此示例中,stateflow 图已经过初始化并执行了 statea
和 statea1
的 entry
动作。在一个新时间步,图被唤醒。
在此时间步,x = 3
、y = 0
且 z = 0
。
图执行以下步骤:
图有一个激活子状态
statea
。statea
有一个指向stateb
的外部转移。图确定转移无效。图为
statea
执行during
动作。现在y = 1
。statea
没有任何内部转移。statea
的激活子状态是statea1
。statea1
有一个指向statea2
的外部转移。图确定转移无效。图为
statea1
执行during
动作。现在x = 4
。statea1
没有任何激活子状态。图进入休眠状态。