创建层次结构来管理复杂系统
要控制系统中多层级的复杂度,可在 Stateflow® 图中创建嵌套状态的层次结构,方法是将一个或多个状态置于另一个状态的边界内。
外部状态是内部状态的父级(或父状态)。内部状态是外部状态的子级(或子状态)。父状态的内容在行为上与较小的图类似。当父状态被激活时,子状态之一也被激活。当父状态变为非激活时,所有子状态都变为非激活。
媒体播放器建模
此示例创建了一个由 FM 广播和网络流媒体播放器组成的媒体系统模型。在仿真期间,您可以通过与 Media Player 用户界面上的按钮和旋钮交互来控制该媒体播放器。
要运行媒体播放器,请执行以下操作:
打开 Simulink 模型,然后点击运行。Media Player 将打开。媒体播放器最初处于关闭状态。在 App 的顶部,Media Player Status 框显示消息
Standby (Off)
。将 Component Selection 旋钮转至 Stream。状态消息会短暂显示
Connecting to Handel's Greatest Hits
。短暂停顿后,状态消息变为Playing: Handel's Greatest Hits
,音乐开始播放。点击 Fast-Forward 按钮。音乐停止,开始发出啁啾声。状态消息更改为
Forward >> Handel's Greatest Hits
。流媒体的名称在显示画面上向前滚动。要继续正常播放模式,请点击 Play 按钮。点击 Reverse 按钮。将播放啁啾声,状态消息变为
Reverse >> Handel's Greatest Hits
。流媒体的名称在显示画面上向后滚动。要继续正常播放模式,请点击 Play 按钮。在 Stream Name 框中,输入新流媒体的名称,然后点击 Connect。例如,尝试连接到流媒体
Training Deep Networks
或Fun With State Machines
。将 Component Selection 旋钮转至 Radio。状态消息显示
Playing: 99.5 FM
。要选择另一个电台,请旋转 FM Radio Station 旋钮。要停止仿真,请关闭 Media Player。
通过使用状态层次结构实现行为
此示例通过一次只关注单个活动层级来实现媒体播放器。例如,流媒体播放器进入快进播放模式需要满足以下条件:
您打开媒体播放器。
您选择流媒体播放器。
您开始播放流媒体。
您点击 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 Manager
和Stream Player
图。Stream Player
接收来自App Interface
和Mode Manager
图的输出,并仿真流媒体播放器的内部行为。
在仿真过程中,您可以研究每个图如何响应与 Media Player 的交互。要在各图之间快速切换,请使用 Stateflow 编辑器顶部的选项卡。