Simulink学习笔记:Matlab官方示例 sf_cdplayer 用Stateflow搭建CD播放器控制程序

发布于:2022-11-09 ⋅ 阅读:(6) ⋅ 点赞:(0) ⋅ 评论:(0)

1. 示例模型

在这里插入图片描述
在这里插入图片描述

1.1. 功能描述

CD 播放器控制程序,可以选择CD播放、FM/AM收音机功能。
播放CD是需要先插入光盘,然后选择功能 PLAY/REW/FF/STOP。播放中如果弹出光盘则停止播放。

1.2. 模型组成

除了stateflow模型以外,还包括一个图形用户界面,还需要CdRequestMode.m、RadioRequestMode.m、sfcdplayerhelper.m等文件。
Stateflow 模型中包含三个chart : User Request, Media Player Mode Manager 和CD Player
Behavior Model
User Request 用于调用外部GUI传来的枚举类型
Media Player Mode Manager 基于枚举类型的变化选择不同的State
CD Player Behavior Model 控制转换命令时的行为

2. 知识点

2.1. 定义枚举类

模型中用到了classdef类定义关键字的enumeration定义枚举类。
定义枚举型变量的优点是:显示模块可以直接显示信号的含义而不是数字。
定义方式:例如,Bearing 类派生自 uint32 内置类:

classdef Bearing < uint32
   enumeration
      North (0)
      East  (90)
      South (180)
      West  (270)
   end
end

在这里插入图片描述
其中,RadioRequestMode和CdRequestMode是自定义的枚举类型。
RadioRequestMode类型定义在RadioRequestMode.m文件中,定义了四种功能:OFF、CD、FM、AM。
CdRequestMode类型定义在CdRequestMode.m文件中,定义了CD的不同状态。

这些文件都位于:\toolbox\stateflow\sfdemos。

取值的方法是,调用matlab的sfcdplayerhelper脚本。这个脚本作为GUI和Stateflow的桥梁,用于传递用户的操作信息到仿真模型中,并保存这些状态。

function result = sfcdplayerhelper(method,varargin)

在这里插入图片描述

同样的,用户操作界面后传值的方法也是调用这个脚本。比如,播放碟片(InsertDisc)的回调函数为:

function InsertDisc_Callback(hObject, eventdata, handles)
sfcdplayerhelper('set_insert_disc');

2.2. 动作语言改为C

因为GUI与stateflow传递信号是用到了ml.sfcdplayerhelper .m文件 必须要将chart的动作语言改为C,否做报错 未定义函数或变量。
在这里插入图片描述

2.3. symbol panel

旧版本matlab 在stateflow 中打开 symbol panel的方法(快速定义多个变量)
勾选菜单栏-display-symbol

2.4. 子chart subchart

Stateflow 的chart 如果内部chart过多,可以将chart封装为subchart。
在这里插入图片描述

2.5. 回调函数

  1. PreLoadFcn
defaultRadioRequestMode = RadioRequestMode.OFF;
defaultCdRequestMode = CdRequestMode.EMPTY;
  1. StartFcn
clear sfcdplayerhelper;
sfcdplayergui;
  1. StopFcn
delete(sfcdplayergui);

2.6. HasChanged() 功能

tf = hasChanged(data_name)
如果当前时间步开始时 data_name 的值不同于前一时间步开始时 data_name 的值,则 tf = hasChanged(data_name) 返回 1 (true)。否则,运算符返回 0 (false)。
在这里插入图片描述
在这里插入图片描述

2.7. in()功能

判断是否在状态内
in(state_name)
如果状态 state_name 处于激活状态,则 in(state_name) 返回 1 (true)。否则,运算符返回 0 (false)。

2.8. after(1/Ts,tick)

如果chart自关联状态激活以来至少唤醒了1/Ts次,则 after(1/Ts,tick) 返回 true。否则,运算符返回 false。

2.9. 可以输出状态的活动

状态是否运行这一判断可直接作为变量输出
在这里插入图片描述

2.10. Data Storage 功能

Data Storage和From Goto的区别

  1. From/Goto 不可以跨系统,Data Storage可以跨系统使用
  2. From/Goto是直通的,相当于把线直接连接起来,而Data Store则是有缓冲,也就是说,从Data Store Read读取的数据可能并非当前步,而是多个仿真步长之前的数据。
  3. From/Goto可以传递变维数的信号,而Data Store的数据类型和维数在仿真过程中是确定的(由Data Store Memory的初始值决定)。
  4. 一个From模块只能对应一个Goto来源(反过来则不,Goto当然可以连接到多个From);而Data Store不是这样,可以有多个Data Store Write模块修改同一个Data Store Memory的值——如果多个Write模块在同一个步长修改同一个Memory模块,则结果难以预知)。

网站公告

欢迎关注微信公众号

今日签到

点亮你在社区的每一天
签到