学习目的:

使用simulink封装一个子系统,并将封装子系统放入到自定义的库中,可供建模时重复使用

功能:封装一个能够检测输入信号下降沿跳变的边沿检测模块,该模块可支持双击时修改内部参数。封装完成后,将封装好的模块添加到自定义的simulink库中,方便建模日常使用

Matlab版本:2018a

1、封装子系统的创建

1.1 功能模型的搭建

创建如上所示的模型,该模块实现了下降沿检测的逻辑功能,其中date store memory模块用于存储输入信号的上一次状态。当输入信号值为0,且保存的上一次的输入信号为1时,检测为下降沿,输出为1。由于需要先获取输入信号的上一次状态,所以应该先读取保存的上一次输入信号的状态,因此date store memroy模块的优先级必须设置为先读后写,也就是上面的读模块在执行时的优先级要比将当前状态保存到date store memory模块要高。

优先级的设置可以通过鼠标右击要修改的模块,选择弹出的选项栏的倒数第二行的Properties,弹出如下图所示的对话框,在Priority选项中进行设置,优先级值越小代表优先级最高。优先级的设置也可以通过后面讲述的方法进行设计。

(PS:模块的颜色可进行自定义设置,鼠标右击——》弹出栏的Format——》Background Color)

1.2 子系统创建Mask

创建Mask的好处有很多,比如在使用模块时可以通过鼠标双击封装的模块,在弹出的对话框中对内部的一些参数进行设置。就像现在要封装的下升沿检测模块,使用时我们想对里面的保存上一次输入信号状态的data store memory模块进行命名。此时,我们就可以在创建mask中新建一个输入栏,将这个输入栏获取的输入字符串和模块内部的date store memory名称联系到一起。在每次使用时,双击模块在弹出Mask窗口的输入栏中输入要给Data store memory起的名称,它会自动作用到子系统内部data store memory。

创建Mask前,须先将1.1中搭建的功能模型封装成子系统,通过Ctrl+G快捷键完成。创建子系统完成后,删除子系统外的输入输出端口,如下所示:

选中子系统,通过Ctrl+M快捷键创建Mask,弹出相应的mask设置对话框,下面对弹出对话框的内容进行设置

1)设置Icon&Ports选项

① Block frame:设置模块的边框是否可见

② Icon transparency:设置图标是否透明

③ Icon uinits:设置图标单位,这里选择的是归一化,即范围[0 1]

④ Icon画图命令设置,使用plot绘制了对话框左下角下降沿箭头图标。可支持绘制命令如下所示:

绘制命令

说明

语法示例

color

更改后续封装图标绘制命令的绘图颜色

color('red'); port_label('input',1,'In')

disp

在封装图标上显示文本

disp('Simulink')

dpoly

在封装图标上显示传递函数

dpoly([0 0 1], [1 2 1], 'z')

droots

在封装图标上显示传递函数

droots([-1], [-2 -3], 4)

fprinf

在封装图标上居中显示变量文本

fprintf('Sum = %d', 7)

image

在封装图标上显示 RGB 图像

image('xxx.jpg')

patch

在封装图标上绘制指定形状的彩色补片

patch([0 10 20 30 30 0], [10 30 20 25 10 10],[1 0 0])

plot

在封装图标上绘制由一系列点连接而成的图形

plot([10 20 30 40], [10 20 10 15])

port_label

在封装图标上绘制端口标签

port_label('output', 1, 'out')

text

在封装图标上的特定位置显示文本。

您必须在 Icon units 框中选择 Pixels。

text(5,10, 'Simulink')

block_icon

将包含在子系统中的模块的图标提升到子系统封装

block_icon(BlockName)

2)设置Parameters & Dialog选项

① 在Mask对话框中添加Edit

② 设置Edit对话框的提示语

③ 创建Edit对话框变量,输入Edit对话框内容将保存在该变量中

④ Edit对话框变量的初始值

⑤ 不进行勾选

⑥ Tunable:设置仿真时参数不能进行修改

⑦ 设置Edit的回调函数,EF_DataStore_cbFn(gcb),gcb代表当前的block句柄

创建一个EF_DataStore_cbFn.m文件,Edit回调函数的内容如下:

function EF_DataStore_cbFn(currentBlock)

maskDSName = get_param(currentBlock,'dsName');

set_param([currentBlock '/Data Store Read'], 'DataStoreName',maskDSName);

set_param([currentBlock '/Data Store Read'], 'Priority','1');

set_param([currentBlock '/Data Store Write'],'DataStoreName',maskDSName);

set_param([currentBlock '/Data Store Write'],'Priority','2');

end

回调函数在对话框中的参数改变时被调用,在回调函数中获取Edit输入的名称,将该名称赋值给Data Store memory的读写模块,并设置了读写优先级,如在前面手动设置优先级后,此次没必要再进行设置。

⑧ Edit提示语的位置,选择在Edit的上面

3)设置Documentation选项

Documentation选项中是对封装模块功能的一些描述,当双击封装模块,填充的mask对话框中会显示这些描述信息内容。help中的编辑内容只在查看封装模块的help选项时,才能被看到

4)创建Mask完成后效果

2、将封装模块添加到自定义库中

1)新建一个simulink Lib,将封装的模块拷贝到新建库里2)重新修改mask参数

勾选Mask的Initialization选项中的allow library block to modify its contents

勾选上该选项后,建模时使用到该库中的这个模块时,可以通过Mask中创建的Edit给下降沿里保存信号的Data Store memory重新命名

注:如果是在simulink库中直接创建封装模块,而不是用上述的先在model里创建模块,然后再拷贝封装模块到库里,这时可以创建mask时可直接勾选上该项

3)修改封装模块显示名称

建模时,模型中可能会使用多个下降沿检测模块,为便于观察是否有不同的下降沿检测模块使用相同名的Data Store Memory,从而造成不必要的错误。可以设置使用Edit输入名称作为模块显示名称,通过以下两步进行设置:

3)-1 鼠标右击封装模块,选择Format——》Show Block Name——》off

3)-2 鼠标右击封装模块,选择Properties——》Block Annotation——》%dSName

修改后的显示如下图所示:

3)添加自定义库到Simulink Library

创建slblocks.m文件

function blkStruct =slblocks

blkStruct.Browser(1).Library = 'LogicLib';------------------>①

blkStruct.Browser(1).Name = 'ucLogicLib';---------------->②

end

Matlab搜索添加目录下名为slblocks的m文件,利用该文件中的信息在Simulink Library Browser面板中添加自定义库

① 代码自定义库文件的名称

② 自定义库在Simulink Library Browser面板中显示名称

4)自定义库文件内容存放形式

为了更好的管理自定义的库,我们一般将自定义库存放到一个特点文件夹中,可将上述内容按照这种结构进行存放

MyLib|------slblocks.m|------Lib|------LogicLib.slx|------mask|------EF_DataStore_cbFn.m

注意,一定要将上述路径添加到Matlab的Path路径中,否则将出现找不到路径情况

4)添加完成效果

① Simulink Library Browser中出现了自定义库名称

② 自定义库包含我们创建的Edge_Fall模块

3、使用库,建模生成代码验证

使用自定义库,搭建一个简单模型,用于验证库封装的准确性

3.1 简单模型搭建

模拟按键按下过程检测:当按键按下,连接按键的GPIO从高电平被拉为低电平,产生下降沿,检测到这种状态代表按键按下。

2)代码生成

经代码生成配置后,生成如下代码:

经检验生成代码逻辑正确,封装的子系统符合我们所要实现的逻辑功能,达到了可重复利用封装子功能的目的

关于代码生成配置,可参考前面两篇介绍代码自动生成文章:

simulink中mask设置_Simulink中封装子系统相关推荐

  1. img标签默认有外边距吗_下面选项中,( )可以设置网页中某个标签的右外边距为10像素。_学小易找答案...

    [单选题]阅读下面HTML代码,如果期望tabs位于box容器的右下角,则需要添加的CSS样式是( ) . [单选题]β一环糊精是由几个葡萄糖分子环合的 [多选题]身份权包括? [单选题]Why do ...

  2. matlab2014示波器怎么调横轴范围,SIMULINK示波器参数设置_matlab中对示波器进行设置...

    描述 SIMULINK示波器参数设置 在SIMULINK中,示波器常用来作为输出工具,将模型的运行结果展现在人们面前.它把信号按照时间的顺序在二维坐标轴上显示出来.示波器的横坐标表示时间轴,纵坐标表示 ...

  3. matlab6.5字体调整,matlab6.5中如何设置下图中字体的大小?

    使用Matlab有好几年了,一直以为command windows等窗口中的字体或者.m文件中的字体... 1.在MATLAB 2017中打开预设对话框,一般在工具栏中都有预设的图标.2.或者在命令窗 ...

  4. simulink中mask设置_Mask Editor 概述

    Options 左窗格中可用的 Options 是一个控制项列表,允许您指定封装图标的属性.这些选项包括: Block frame.模块边框是围绕模块的矩形.您可以通过将 Block Frame 参数 ...

  5. simulink中mask设置_(实现BPSK学习Verilog)1. Simulink仿真实现

    欢迎关注BUG记录知乎专栏和BUG记录公众号,关注BUG记录公众号回复101获取本文使用的Simulink仿真文件 微信号:BugRec 由于最近研究某个高速接口没什么实质性的突破,实在写不出太好的东 ...

  6. matlab tek示波器,SIMULINK示波器参数设置_matlab中对示波器进行设置

    在SIMULINK中,示波器常用来作为输出工具,将模型的运行结果展现在人们面前.它把信号按照时间的顺序在二维坐标轴上显示出来.示波器的横坐标表示时间轴,纵坐标表示信号的强度.仿真过程中我们可以按照需要 ...

  7. WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  8. OOALV中字段设置ALV中下拉列表列的实现

    有时候我们可以把一些字段设置为下拉,比如一些类型,一些字段的值是比拟定固的一些值,如性别等.设置为下拉,和设置超级链接是类似的,也是使用了一个内表存放了柄句和对应的值,这个表类型为"LVC_ ...

  9. html中链接设置,html中怎么设置超链接

    html中设置超链接的方法:首先在html的body部分中,添加"超链接文本"语句来设置链接节点:然后在a标签中使用href属性规定链接指向的页面的URL即可:具体语法" ...

最新文章

  1. Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】
  2. 题目1204:农夫、羊、菜和狼的故事
  3. linux中如何撤销上次命令,使用git reset命令撤销上次Git提交
  4. iOS之深入解析Objective-C和Swift初始化
  5. V8 之旅: 垃圾回收器
  6. Linux+varnish安装配置
  7. 私人定制-代码生成器3
  8. openssh升级sftp_linux搭建sftp(openssh)
  9. Linux内核入门(六)—— __attribute_ 机制
  10. android 数组赋值字符串_给字符数组赋值的方法
  11. lingo17.0软件工具
  12. catia 快捷键 激活零件_CATIA快捷键大全
  13. GOM引擎 mirserver服务端各文件夹注解
  14. 纯php实现中秋博饼游戏(1):绘制骰子图案
  15. 时间序列预测的机器学习方法
  16. NOIP2016排名(919~1419)
  17. VNC远程控制软件,五款用了都说好的VNC远程控制软件
  18. JS学习笔记——APIS
  19. golang后台管理系统Iris+Layui框架搭建教程
  20. 程序员讲装修——平台选择

热门文章

  1. 微软 FoxPro 15年回忆录 之:细数微软 Visual FoxPro 的战略
  2. 表格 列与列之间的间距
  3. JS C26 RegExp
  4. 安装mongodb数据库
  5. 福冈中文离线地图App上线
  6. Cxcore绘图函数
  7. 从 hybrid开发----》微前端
  8. 微信小程序引入高德地图Demo 快速上手
  9. PMP 1-3章,学习小结
  10. 频谱分析仪的工作原理