Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

并行状态的执行顺序

并行状态排序

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

与互斥 (OR) 状态不同,并行状态一般不使用转移。此时,执行顺序取决于:

系统会根据执行顺序为并行状态分配优先级编号。数字越低,优先级越高。每个状态的优先级编号会出现在右上角。

由于执行顺序是图的一个属性,图中的所有并行状态都会继承该属性设置。不能在同一个 Stateflow 图中混合使用显式排序和隐式排序。但是,您可以在同一 Simulink® 模型中混合使用采用不同排序模式的图。

在从包含并行状态的 Stateflow 图生成的代码中,每个状态按照其顺序执行。

并行状态的显式排序

默认情况下,Stateflow 图根据您所设定的执行优先级对并行状态进行显式排序。

显式排序的工作方式

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

当您在包含隐式排序的并行状态的图中启用显式排序时,现有并行状态的隐式优先级会保留。当您添加新并行状态时,会按照新的 Stateflow 图采用的同样方式分配执行顺序 - 即按创建顺序。

您可以随时为状态逐个重设分配的执行顺序,如为并行状态逐个设置执行顺序所述。更改某个并行状态的执行顺序时,Stateflow 图会对其他并行状态自动重新编号,以保留它们的相对执行顺序。有关详细信息,请参阅保持并行状态顺序

并行状态显式排序

要对并行状态使用显式排序,请执行以下任务:

在全图层级启用显式排序.  要为并行状态启用显式排序,请执行以下步骤:

  1. 在图的顶层内右键点击,然后从上下文菜单选择属性

    将显示图属性对话框。

  2. 选中用户指定的状态/转移执行顺序复选框。

  3. 点击确定

    如果您的图已包含隐式排序的并行状态,则将保留现有优先级,直到您显式改变它们。当您在显式模式下添加新并行状态时,Stateflow 图会基于创建顺序自动分配优先级(请参阅显式排序的工作方式)。不过,您现在可以逐个显式更改状态的执行顺序,如为并行状态逐个设置执行顺序中所述。

为并行状态逐个设置执行顺序.  在显式排序模式下,可以更改各个并行状态的执行顺序。右键点击相关并行状态,然后从执行顺序菜单中选择新优先级。

并行状态隐式排序

并行状态的隐式排序规则

在隐式排序模式下,Stateflow 图会基于位置对并行状态隐式排序。优先级为先上后下,然后再先左后右,具体规则如下:

  • 并行状态在图中纵向位置越高,则该状态的执行优先级越高。

  • 对于同一纵向位置的多个并行状态,最左边的状态优先级最高。

下例显示了这些规则如何应用到顶层并行状态和并行子状态。

Stateflow chart with five top-level parallel states called a, b, c, f, and g. State c has two parallel substates called d and e. State g has three parallel substates called h, i, and j.

注意

在隐式排序模式中,设计布局与执行优先级之间存在依赖关系。当您对图中的并行状态重新排列时,可能会无意中改变执行顺序并影响仿真结果。为了更好地控制您的设计,请使用默认的显式排序模式设置执行优先级。

并行状态隐式排序

要对并行状态使用隐式排序,请执行以下步骤:

  1. 在图的顶层内右键点击,然后从上下文菜单选择属性

  2. 在“图属性”对话框中,清除用户指定的状态/转移执行顺序复选框。

  3. 点击确定

保持并行状态顺序

无论是使用显式排序还是隐式排序,当您删除、重新编号或添加并行状态时,Stateflow 图都会尝试调整执行优先级。在这些情况中,Stateflow 图会重新设定并行状态的优先级,以达到以下目的:

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

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

  • 保留原定的相对执行优先级

Stateflow 图如何在显式模式下保留相对优先级

对于显式排序,Stateflow 图会保留用户指定的优先级。在下面的显式排序示例中:

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 chart with three top-level parallel states called a, b, and c. State a has three parallel substates called d, e, and f.

如果删除顶层状态 b 和子状态 e,该图会自动重新设定剩余并行状态和子状态的优先级,以保留隐式几何布局顺序:

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

还原后状态的执行优先级

有些情况下,您可能需要还原之前从 Stateflow 图中删除的并行状态。在隐式排序模式下,Stateflow 图会基于该状态的还原位置为其重新分配优先级。如果将该状态还原到它在图中的原始位置,则可还原其原始优先级。

但是,在显式排序模式下,Stateflow 图不一定能为还原后的状态恢复原始执行优先级。这取决于您如何还原该状态。

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

在显式排序和隐式排序之间切换

如果对并行状态显式排序后切换到隐式模式,Stateflow 图会重置执行顺序以遵循隐式的几何结构规则。但是,如果从隐式模式切换到显式模式,该图并不会恢复原始显式执行顺序。

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

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

当您将带有并行分解的状态转换为子图时,其子状态会基于优先使用的显式或隐式规则保留其相对执行顺序。