Main Content

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

要控制系统中多层级的复杂度,可在 Stateflow® 图中创建嵌套状态的层次结构,方法是将一个或多个状态置于另一个状态的边界内。

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

媒体播放器建模

此示例创建了一个由 FM 广播和网络流媒体播放器组成的媒体系统模型。在仿真期间,您可以通过与 Media Player 用户界面上的按钮和旋钮交互来控制该媒体播放器。

要运行媒体播放器,请执行以下操作:

  1. 打开 Simulink 模型,然后点击运行。Media Player 将打开。媒体播放器最初处于关闭状态。在 App 的顶部,Media Player Status 框显示消息 Standby (Off)

  2. 将 Component Selection 旋钮转至 Stream。状态消息会短暂显示 Connecting to Handel's Greatest Hits。短暂停顿后,状态消息变为 Playing: Handel's Greatest Hits,音乐开始播放。

  3. 点击 Fast-Forward 按钮。音乐停止,开始发出啁啾声。状态消息更改为 Forward >> Handel's Greatest Hits。流媒体的名称在显示画面上向前滚动。要继续正常播放模式,请点击 Play 按钮。

  4. 点击 Reverse 按钮。将播放啁啾声,状态消息变为 Reverse >> Handel's Greatest Hits。流媒体的名称在显示画面上向后滚动。要继续正常播放模式,请点击 Play 按钮。

  5. 在 Stream Name 框中,输入新流媒体的名称,然后点击 Connect。例如,尝试连接到流媒体 Training Deep NetworksFun With State Machines

  6. 将 Component Selection 旋钮转至 Radio。状态消息显示 Playing: 99.5 FM。要选择另一个电台,请旋转 FM Radio Station 旋钮。

  7. 要停止仿真,请关闭 Media Player。

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

此示例通过一次只关注单个活动层级来实现媒体播放器。例如,流媒体播放器进入快进播放模式需要满足以下条件:

  1. 您打开媒体播放器。

  2. 您选择流媒体播放器。

  3. 您开始播放流媒体。

  4. 您点击 Fast-Forward 按钮。

该模型使用嵌套状态的层次结构来单独考虑每个条件。例如,模型资源管理器在 Mode Manager 图中显示状态的层次结构。要打开模型资源管理器,请在建模选项卡中,选择模型资源管理器

在层次结构的顶层或最外层,Mode Manager 图有两个用于控制媒体播放器活动的状态:

  • 当您关闭媒体播放器时,Off 被激活。

  • 当您将媒体播放器设置为流媒体或广播模式时,On 被激活。

On 的子状态控制媒体播放器组件:

  • 当您选择流媒体播放器时,Stream 被激活。

  • 当您选择 FM 广播时,Radio 被激活。

Stream 的子状态控制流媒体播放器的活动:

  • 当您播放流媒体时,Play 被激活。

  • 当您暂停流媒体播放器时,Pause 被激活。

Play 的子状态控制流媒体播放器的播放模式:

  • Normal:在正常播放模式下,该状态被激活。

  • 当您点击 Reverse 按钮时,Reverse 被激活。

  • 当您点击 Fast-Forward 按钮时,FastForward 被激活。

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

探索示例

此示例中的模型包含另外两个 Stateflow 图:

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

  • Stream Player 接收来自 App InterfaceMode Manager 图的输出,并仿真流媒体播放器的内部行为。

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

相关主题