概述
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的不同状态。
这些文件都位于:toolboxstateflowsfdemos。
取值的方法是,调用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. 回调函数
- PreLoadFcn
defaultRadioRequestMode = RadioRequestMode.OFF;
defaultCdRequestMode = CdRequestMode.EMPTY;
- StartFcn
clear sfcdplayerhelper;
sfcdplayergui;
- 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的区别
- From/Goto 不可以跨系统,Data Storage可以跨系统使用
- From/Goto是直通的,相当于把线直接连接起来,而Data Store则是有缓冲,也就是说,从Data Store Read读取的数据可能并非当前步,而是多个仿真步长之前的数据。
- From/Goto可以传递变维数的信号,而Data Store的数据类型和维数在仿真过程中是确定的(由Data Store Memory的初始值决定)。
- 一个From模块只能对应一个Goto来源(反过来则不,Goto当然可以连接到多个From);而Data Store不是这样,可以有多个Data Store Write模块修改同一个Data Store Memory的值——如果多个Write模块在同一个步长修改同一个Memory模块,则结果难以预知)。
最后
以上就是单薄诺言为你收集整理的Simulink学习笔记:Matlab示例 sf_cdplayer 用Stateflow搭建CD播放器控制程序1. 示例模型2. 知识点的全部内容,希望文章能够帮你解决Simulink学习笔记:Matlab示例 sf_cdplayer 用Stateflow搭建CD播放器控制程序1. 示例模型2. 知识点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复