Stateflow 图的执行
当 Stateflow® 图唤醒时,图将按照一个工作流来执行动作。在下列情况下,Stateflow 图会唤醒:
在每个时间步
当 Stateflow 图收到事件时
当图第一次唤醒时,图将初始化并变为激活状态,如进入图或状态的工作流中所述。当不再执行任何动作时,图将进入休眠状态,直到有新的时间步或事件将图唤醒。
Stateflow 图执行的工作流
此流程图显示 Stateflow 在执行图或状态时相应的事件进程。在该流程图中,当前状态是指其中有决策正在进行或有进程正在发生的状态。
默认转移
默认转移是一种没有源的转移。在不包含任何状态的 Stateflow 图中,默认转移标记流程图的开始。有关详细信息,请参阅在 Stateflow 中创建流程图。
如果 Stateflow 图不包含任何状态,则图会在每次唤醒时计算默认转移路径。在标记待计算的默认转移后,图将按照 计算转移的工作流 中所示的步骤操作。
注意
图仅在进入状态时计算状态内的默认转移路径,而不是在图每次唤醒时计算。
外部转移
外部转移是一种退出源状态的转移。Stateflow 图将标记待计算的外部转移作为执行状态的第一步。在标记待计算的外部转移后,图按照 计算转移的工作流 中所示的步骤操作。
during 动作
during
动作是使用前缀 during
或 du
在状态标签动作中定义的动作。有关详细信息,请参阅定义状态中的动作。
当图被唤醒,状态为激活状态时,如果没有有效的外部转移,则状态会执行 during
动作。
内部转移
内部转移是一种不退出源状态的转移。有关详细信息,请参阅Control Chart Execution by Using Inner Transitions。
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
没有任何激活子状态。图进入休眠状态。