并行状态的执行顺序
尽管并行 (AND) 状态会同时执行,但 Stateflow® 图必须确定在仿真期间激活每个状态的时间。此排序决定每个并行状态在执行的所有阶段何时执行动作。
并行状态的排序
图为每个并行状态分配一个优先级编号。编号越小,状态执行越快。优先级编号显示在每个状态的右上角。
当您打开一个新的图或目前尚不包含任何并行状态的图时,图会按照并行状态的创建顺序自动为其分配优先级编号。编号从父容器中的下一个可用数字开始。
要更改某并行状态的执行顺序,请执行以下操作:
右键点击该并行状态。
点击执行顺序,并选择新优先级编号。
当您更改某并行状态的优先级编号时,图会自动对其他并行状态重新编号,以保留它们的相对优先级。
在从包含并行状态的图生成的代码中,每个状态按照其优先级执行。
保持并行状态顺序
当您删除、重新编号或添加并行状态时,图会重新调整并行状态的优先级,以便:
填补顺序中的空缺,确保排序连续。
确保没有两个状态具有相同优先级。
保留原定的相对优先级。
请参考如下示例:
默认情况下,状态和子状态按照您创建它们的顺序进行编号。例如,如果您对图进行以下更改:
将顶层状态
b
的优先级更改为 3。添加顶层状态
g
。删除子状态
e
。
该图会保留您为顶层状态 b
显式设定的优先级,但是会对所有其他并行状态重新编号,以保留它们之前的相对顺序。
还原后状态的执行优先级
有些情况下,您可能需要还原之前从 Stateflow 图中删除的并行状态。但是,Stateflow 图不一定能为还原后的状态恢复原始执行优先级。这取决于您如何还原该状态。
移除状态的方式 | 还原状态的方式 | 优先级情况 |
---|---|---|
删除、剪切或拖动到父状态边界之外,或者拖动到其边界与父状态重叠 | 使用撤消命令 | 此时会还原到原始优先级。 |
拖动到父状态边界之外,或拖动到其边界与父状态重叠,且松开鼠标按键 | 将其拖回父状态内 | 原始优先级会丢失。Stateflow 图会将还原后的状态视为最后创建的状态,从而为其分配最低执行优先级。 |
拖动到父状态边界外,或拖动到其边界与父状态重叠,但不松开鼠标按键 | 将其拖回父状态内 | 此时会还原到原始优先级。 |
拖动到其边界与一个或多个同级状态重叠 | 将其拖动到同一父级状态内没有重叠边界的位置 | 此时会还原到原始优先级。 |
剪切 | 粘贴 | 原始优先级会丢失。Stateflow 图会将还原后的状态视为最后创建的状态,从而为其分配最低执行优先级。 |
图框内和子图中并行状态的执行顺序
将并行状态组合到图框内时,这些状态会保持其相对执行顺序。此外,Stateflow 图基于默认排序规则为图框分配其自身的优先级。该优先级决定 Stateflow 图何时激活该图框内的并行状态。
当您将带有并行分解的状态转换为子图时,其子状态会保留其相对执行顺序。