Main Content

使用状态层次结构设计多级状态复杂性

要管理多级状态复杂性,可以在 Stateflow® 图中使用层次结构。借助层次结构,可以表示系统中多个层级的子组件。

状态层次结构示例

例如,下图有三个层级。在一个状态的边界内绘制另一个状态表示内部状态是外部状态(或父状态)的子状态(或子级)。外部状态是内部状态的父级。

Chart the contains three levels of hierarchy.

在本例中,图是状态 Car_done 的父级。状态 Car_doneCar_madeCar_shipped 状态的父状态。状态 Car_made 也是 Parts_assembledPainted 状态的父状态。也可以说状态 Parts_assembledPaintedCar_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 图本身。

状态还可以包含非图形数据、事件和消息对象。此包含关系的层次结构会显示在模型资源管理器中。通过指定父对象来定义数据、事件和消息包含关系。