使用状态层次结构设计多级状态复杂性
要管理多级状态复杂性,可以在 Stateflow® 图中使用层次结构。借助层次结构,可以表示系统中多个层级的子组件。
状态层次结构示例
例如,下图有三个层级。在一个状态的边界内绘制另一个状态表示内部状态是外部状态(或父状态)的子状态(或子级)。外部状态是内部状态的父级。
在本例中,图是状态 Car_done
的父级。状态 Car_done
是 Car_made
和 Car_shipped
状态的父状态。状态 Car_made
也是 Parts_assembled
和 Painted
状态的父状态。也可以说状态 Parts_assembled
和 Painted
是 Car_made
状态的子级。
要以文本形式表示 Stateflow 层次结构,可以使用斜杠字符 (/)
表示图,使用句点 (.)
分隔状态层次结构中的每一级。下表提供了上例中对象层次结构的文本表示:
/Car_done
/Car_done
.Car_made
/Car_done
.Car_shipped
/Car_done
.Car_made
.Parts_assembled
/Car_done
.Car_made
.Painted
创建子状态和父状态
子状态是仅在其父状态激活时才能激活的状态。具有子状态的状态称为父状态。要创建子状态,请点击状态工具,将新状态拖到要作为其父状态的状态中。Stateflow 图在指定的父状态中创建子状态。您可以通过这种方式将状态嵌套到任何深度。要更改子状态的父级,请将其从图中的当前父级拖放到新父级中。
注意
父状态的图形必须足够大以容纳其所有子状态。在将新的子状态拖到父状态中之前,您可能需要调整父状态的大小。如果将父状态声明为一个子图,则不用创建一个大尺寸的状态图。有关详细信息,请参阅Encapsulate Modal Logic by Using Subcharts。
状态可以包含的对象
状态可以包含所有其他 Stateflow 对象。Stateflow 图表示法支持在存在包含关系的 Stateflow 图中表示图形对象层次结构。如果某个状态包含其他状态,则该状态为父状态。如果某个状态包含在另一状态中,则该状态为子状态。如果某状态既不是另一状态的父状态也不是另一状态的子状态,其父级是 Stateflow 图本身。
状态还可以包含非图形数据、事件和消息对象。此包含关系的层次结构会显示在模型资源管理器中。通过指定父对象来定义数据、事件和消息包含关系。