Main Content

并行状态的执行顺序

尽管并行 (AND) 状态会同时执行,但 Stateflow® 图必须确定在仿真期间激活每个状态的时间。此排序决定每个并行状态在执行的所有阶段何时执行动作。

并行状态的排序

图为每个并行状态分配一个优先级编号。编号越小,状态执行越快。优先级编号显示在每个状态的右上角。

当您打开一个新的图或目前尚不包含任何并行状态的图时,图会按照并行状态的创建顺序自动为其分配优先级编号。编号从父容器中的下一个可用数字开始。

要更改某并行状态的执行顺序,请执行以下操作:

  1. 右键点击该并行状态。

  2. 点击执行顺序,并选择新优先级编号。

当您更改某并行状态的优先级编号时,图会自动对其他并行状态重新编号,以保留它们的相对优先级。

在从包含并行状态的图生成的代码中,每个状态按照其优先级执行。

保持并行状态顺序

当您删除、重新编号或添加并行状态时,图会重新调整并行状态的优先级,以便:

  • 填补顺序中的空缺,确保排序连续。

  • 确保没有两个状态具有相同优先级。

  • 保留原定的相对优先级。

请参考如下示例:

Stateflow chart with three top-level parallel states called a, b, and c. State a has three parallel substates called d, e, and f.

默认情况下,状态和子状态按照您创建它们的顺序进行编号。例如,如果您对图进行以下更改:

  1. 将顶层状态 b 的优先级更改为 3

  2. 添加顶层状态 g

  3. 删除子状态 e

Stateflow chart with four top-level parallel states called a, b, c, and g. State a has two parallel substates called d and f.

该图会保留您为顶层状态 b 显式设定的优先级,但是会对所有其他并行状态重新编号,以保留它们之前的相对顺序。

还原后状态的执行优先级

有些情况下,您可能需要还原之前从 Stateflow 图中删除的并行状态。但是,Stateflow 图不一定能为还原后的状态恢复原始执行优先级。这取决于您如何还原该状态。

移除状态的方式还原状态的方式优先级情况
删除、剪切或拖动到父状态边界之外,或者拖动到其边界与父状态重叠使用撤消命令此时会还原到原始优先级。
拖动到父状态边界之外,或拖动到其边界与父状态重叠,且松开鼠标按键将其拖回父状态内原始优先级会丢失。Stateflow 图会将还原后的状态视为最后创建的状态,从而为其分配最低执行优先级。
拖动到父状态边界外,或拖动到其边界与父状态重叠,但不松开鼠标按键将其拖回父状态内此时会还原到原始优先级。
拖动到其边界与一个或多个同级状态重叠将其拖动到同一父级状态内没有重叠边界的位置此时会还原到原始优先级。
剪切粘贴原始优先级会丢失。Stateflow 图会将还原后的状态视为最后创建的状态,从而为其分配最低执行优先级。

图框内和子图中并行状态的执行顺序

将并行状态组合到图框内时,这些状态会保持其相对执行顺序。此外,Stateflow 图基于默认排序规则为图框分配其自身的优先级。该优先级决定 Stateflow 图何时激活该图框内的并行状态。

当您将带有并行分解的状态转换为子图时,其子状态会保留其相对执行顺序。

相关主题