Main Content

创建层次结构来管理复杂系统

构建模型时,以一次添加一个子组件的方式创建一个包含嵌套状态的层次结构。这样,您便可以控制 Stateflow® 图中复杂系统的各个层级。有关详细信息,请参阅对有限状态机建模

状态层次结构

要创建状态层次结构,请将一个或多个状态置于另一个状态的边界内。内部状态是外部状态的子级状态(或子状态)。外部状态是内部状态的父级(或父状态)。

Stateflow chart with a hierarchy of states. The outer state is called Parent. It contains two inner states called Child1 and Child2.

父状态的内容在行为上与较小的图类似。当父状态被激活时,其子状态之一也被激活。当父状态变为非激活时,其所有子状态都变为非激活。

层次结构的示例

此示例对一个由 AM 无线电、FM 无线电和 CD 播放器组成的立体声音响系统进行建模。在仿真过程中,您可以通过点击 Media Player Helper 用户界面上的按钮来控制立体声音响系统。

立体声音响最初处于待机模式 (OFF)。当您选择一个 Radio Request 按钮时,立体声音响将打开对应的子组件。如果您选择 CD 播放器,则可以点击其中一个 CD Request 按钮以选择 Play、Rewind、Fast-Forward 或 Stop。您可以在仿真过程中的任何时刻插入或弹出光盘。

通过使用状态层次结构实现行为

最初,此立体声音响系统的完整实现看起来相当复杂。但是,通过一次只关注一个层面的活动,您可以逐步完成整个系统设计。例如,下列是 CD 播放器进入快进播放模式是必要条件:

  1. 打开了立体声。

  2. 打开了 CD 播放器。

  3. 播放了光盘。

  4. 您在用户界面中点击 FF 按钮。

您可以每次考虑其中一个条件,逐步构建一个层次结构模型。例如,最外层可以定义立体声音响打开和关闭之间的转移。中间各层定义不同立体声音响子组件之间的转移,以及 CD 播放器的停止和播放模式之间的转移。最底层定义当满足播放光盘的所有其他条件时对 CD Request 按钮的响应。

为实现立体声音响系统的行为,sf_mediaplayer 使用模型资源管理器在 Mode Manager 图下方列出的嵌套状态层次结构。要打开模型资源管理器,请在建模选项卡中,选择模型资源管理器

Hierarchy of nested states, as listed by the Model Explorer.

下表列出了层次结构中每个状态的角色。

层级状态描述
顶层(Mode Manager 图)Eject光盘弹出模式(中断所有其他立体声音响功能)
NormalOperation立体声音响系统的正常工作模式

立体声音响系统活动(NormalOperation 的子状态)

Standby立体声音响系统处于待机模式 (OFF)
ON立体声音响系统被激活 (ON)

立体声音响子组件(On 的子状态)

CDModeCD 播放器子组件被激活
AMModeAM 无线电子组件被激活
FMModeFM 无线电子组件被激活

CD 播放器活动(CDMode 的子状态)

StopCD 播放器停止
PlayCD 播放器正在播放光盘

光盘播放模式(Play 的子状态)

Normal正常播放模式
Rewind反向播放模式
FastForward快进播放模式

下图显示了图中状态的完整布局。

Arrangement of states in the Mode Manager chart.

在弹出光盘或关闭系统之前,NormalOperationON 状态中的历史结点 会记录工作模式(Standby 或 ON)和媒体播放器的激活子组件(CD Player、AM Radio 或 FM Radio)。

探索示例

示例 sf_mediaplayer 包含另外两个 Stateflow 图:

  • App Interface 管理与 UI 的接口,并将输入传递给 Mode ManagerCD Player 图。

  • CD Player 接收 App InterfaceMode Manager 图的输出,并模拟 CD 播放器的机械行为。

Simulink model that simulates a media player. The model contains the chart Media Player Mode Manager and two additional charts, User Request and CD Player Behavior Model.

在仿真过程中,您可以研究每个图如何响应与 Media Player Helper 的交互。要在各图之间快速切换,请使用 Stateflow 编辑器顶部的选项卡。

相关主题