并行状态的执行顺序
并行状态排序
尽管同一个图中的多种并行 (AND) 状态是同时执行的,但 Stateflow® 图必须确定在仿真期间激活各状态的时间。此排序决定每个并行状态在执行的所有阶段何时执行动作。
与互斥 (OR) 状态不同,并行状态一般不使用转移。此时,执行顺序取决于:
系统会根据执行顺序为并行状态分配优先级编号。数字越低,优先级越高。每个状态的优先级编号会出现在右上角。
由于执行顺序是图的一个属性,图中的所有并行状态都会继承该属性设置。不能在同一个 Stateflow 图中混合使用显式排序和隐式排序。但是,您可以在同一 Simulink® 模型中混合使用采用不同排序模式的图。
在从包含并行状态的 Stateflow 图生成的代码中,每个状态按照其顺序执行。
并行状态的显式排序
默认情况下,Stateflow 图根据您所设定的执行优先级对并行状态进行显式排序。
显式排序的工作方式
当您打开一个新的 Stateflow 图或目前尚不包含任何并行状态的图时,图会按照并行状态的创建顺序自动为其分配优先级编号。编号从父级容器内的下一可用数字开始。
当您在包含隐式排序的并行状态的图中启用显式排序时,现有并行状态的隐式优先级会保留。当您添加新并行状态时,会按照新的 Stateflow 图采用的同样方式分配执行顺序 - 即按创建顺序。
您可以随时为状态逐个重设分配的执行顺序,如为并行状态逐个设置执行顺序所述。更改某个并行状态的执行顺序时,Stateflow 图会对其他并行状态自动重新编号,以保留它们的相对执行顺序。有关详细信息,请参阅保持并行状态顺序。
并行状态显式排序
要对并行状态使用显式排序,请执行以下任务:
在全图层级启用显式排序. 要为并行状态启用显式排序,请执行以下步骤:
在图的顶层内右键点击,然后从上下文菜单选择属性。
将显示图属性对话框。
选中用户指定的状态/转移执行顺序复选框。
点击确定。
如果您的图已包含隐式排序的并行状态,则将保留现有优先级,直到您显式改变它们。当您在显式模式下添加新并行状态时,Stateflow 图会基于创建顺序自动分配优先级(请参阅显式排序的工作方式)。不过,您现在可以逐个显式更改状态的执行顺序,如为并行状态逐个设置执行顺序中所述。
为并行状态逐个设置执行顺序. 在显式排序模式下,可以更改各个并行状态的执行顺序。右键点击相关并行状态,然后从执行顺序菜单中选择新优先级。
并行状态隐式排序
并行状态的隐式排序规则
在隐式排序模式下,Stateflow 图会基于位置对并行状态隐式排序。优先级为先上后下,然后再先左后右,具体规则如下:
并行状态在图中纵向位置越高,则该状态的执行优先级越高。
对于同一纵向位置的多个并行状态,最左边的状态优先级最高。
下例显示了这些规则如何应用到顶层并行状态和并行子状态。
注意
在隐式排序模式中,设计布局与执行优先级之间存在依赖关系。当您对图中的并行状态重新排列时,可能会无意中改变执行顺序并影响仿真结果。为了更好地控制您的设计,请使用默认的显式排序模式设置执行优先级。
并行状态隐式排序
要对并行状态使用隐式排序,请执行以下步骤:
在图的顶层内右键点击,然后从上下文菜单选择属性。
在“图属性”对话框中,清除用户指定的状态/转移执行顺序复选框。
点击确定。
保持并行状态顺序
无论是使用显式排序还是隐式排序,当您删除、重新编号或添加并行状态时,Stateflow 图都会尝试调整执行优先级。在这些情况中,Stateflow 图会重新设定并行状态的优先级,以达到以下目的:
填补顺序中的空缺,确保排序连续
确保没有两个状态具有相同优先级
保留原定的相对执行优先级
Stateflow 图如何在显式模式下保留相对优先级
对于显式排序,Stateflow 图会保留用户指定的优先级。在下面的显式排序示例中:
由于使用了显式排序,每个状态和子状态的优先级与在图中的创建顺序一致。当您执行以下动作时,该图会重新设定并行状态及其子状态的优先级:
将顶层状态
b
的优先级更改为 3。添加顶层状态
g
。删除子状态
e
。
该图会保留为顶层状态 b
显式设定的优先级,但是会对所有其他并行状态重新编号,以保留它们之前的相对顺序。
Stateflow 图如何在隐式模式下保留相对优先级
对于隐式排序,Stateflow 图会基于几何结构保留原定的相对优先级。在下面的隐式排序示例中:
如果删除顶层状态 b
和子状态 e
,该图会自动重新设定剩余并行状态和子状态的优先级,以保留隐式几何布局顺序:
还原后状态的执行优先级
有些情况下,您可能需要还原之前从 Stateflow 图中删除的并行状态。在隐式排序模式下,Stateflow 图会基于该状态的还原位置为其重新分配优先级。如果将该状态还原到它在图中的原始位置,则可还原其原始优先级。
但是,在显式排序模式下,Stateflow 图不一定能为还原后的状态恢复原始执行优先级。这取决于您如何还原该状态。
移除状态的方式 | 还原状态的方式 | 优先级情况 |
---|---|---|
删除、剪切或拖动到父状态边界之外,或者拖动到其边界与父状态重叠 | 使用撤消命令 | 此时会还原到原始优先级。 |
拖动到父状态边界之外,或拖动到其边界与父状态重叠,且松开鼠标按键 | 将其拖回父状态内 | 原始优先级会丢失。Stateflow 图会将还原后的状态视为最后创建的状态,从而为其分配最低执行优先级。 |
拖动到父状态边界外,或拖动到其边界与父状态重叠,但不松开鼠标按键 | 将其拖回父状态内 | 此时会还原到原始优先级。 |
拖动到其边界与一个或多个同级状态重叠 | 将其拖动到同一父级状态内没有重叠边界的位置 | 此时会还原到原始优先级。 |
剪切 | 粘贴 | 原始优先级会丢失。Stateflow 图会将还原后的状态视为最后创建的状态,从而为其分配最低执行优先级。 |
在显式排序和隐式排序之间切换
如果对并行状态显式排序后切换到隐式模式,Stateflow 图会重置执行顺序以遵循隐式的几何结构规则。但是,如果从隐式模式切换到显式模式,该图并不会恢复原始显式执行顺序。
图框内和子图中并行状态的执行顺序
将并行状态组合到图框内时,这些状态会保持其相对执行顺序。此外,Stateflow 图会基于所应用的显式或隐式排序规则为图框分配其自身的优先级。该优先级决定 Stateflow 图何时激活该图框内的并行状态。
当您将带有并行分解的状态转换为子图时,其子状态会基于优先使用的显式或隐式规则保留其相对执行顺序。