创建matlab子模块.doc
文本预览下载声明
把你想要封装的部分用鼠标框选,选中后点右键里面有create subsystem,就可以建立子模块了simulink如何构建及封装子系统
今天在用DSP-Builder做FIR滤波器的时候遇到一些难题。下图所示的是在simulink中设计的一个个位阶数FIR模型
?
这里可以看到一个问题,如果设计的滤波器的阶数比较大的时候,就不好全部方便的显示所有部分。其实只要把相关部分打包一下就可以了。以下是网上搜到的一篇很有指导意义的文章。
?
??? 绝大多数的程序设计语言都有使用子程序的功能。在FORTRAN里有subroutine子程序和function子程序;C语言中的子程序被称为“函数”;Matlab的子程序称为函数式M文件。Sinlulilnk也提供了类似的功能——子程序。
??? 随着模型越来越大、越来越复杂,人们很难轻易的读懂它们。在这种情况下,子系统通过把大的模型分割成几个小的模型系统以使得整个系统模型更简捷、可读性更高,而且这种操作并不复杂。举一个简单的例子,考虑在例1中提到的汽车模型,其Simulink模型图见图7.5.1。
?
????????????????????????????????????? 图7.5.1 比例速度控制的汽车模型
??? 整个模型包括两个主要部分:发动机动力系统和控制系统。但是在模型图中哪些模块代表发动机动力系统,那些模块代表控制系统并不明确。在图7.5.2中,将模型的这两个部分转化为子系统。经过转化后,主模型图中的结构就变得很明了了,只是两个子系统的具体结构被隐藏起来了,双击子系统模块,则会在一个新的窗口中显示子系统的模块图。如图7.5.3所示。
?
???????????????????????????????????? 图7.5.2 子模块化了的汽车模型
??? 子系统的另外一个重要的功能是把反复使用的模块组压缩成子系统后重复使用。在本例中,如果要比较在同一控制系统控制下不同发动机的工作效率,只需要替换新的发动机子系统而不是重建一个新的系统。这样的控制系统就可以反复利用。
??? 注意:这种做法不仅节省了建模时间,而且可以保证在多次建模中不会因失误而在控制子系统中出现差错,这在大型的复杂系统建模中是非常重要的。
创建Simulink子系统共有两种方法:
·一种办法是对已存在的模型的某些部分或全部使用菜单命令【Edit/Create Subsystem】进行压缩转化,使之成为子系统;
·另一种方法是使用Connections模块库中的Subsystem模块直接创建子系统。
?下面分别介绍这两种方法。
?
?????? (a) 控制子系统???????????????????????????????? (b) 发动机动力子系统
???????????????????????????? 图7.5.3 子系统分解?
一、压缩子系统
把已经存在的Simulink模型中的某个部分或全部压缩成子系统的操作如下:
步骤一:
首先使用范围框将要压缩成子系统的部分选中,包括模块和信号线,如图7.5.4所示。
????????
?????????????????????????? 图7.5.4 选中要压缩的模块
注意:在这种情况下只能用范围框,而不能用Shift逐个选定。
为了能使范围框框住所有需要的模块,重新安排模块的位置常常似乎是必要的。
步骤二:
在模块窗口菜单选项中选择【EditCreat Subsystem】,Simulink将会用一个子系统模块代替被选中的模块组,如图7.5.5所示。
?????????
??????????????????????????? ?图7.5.5 压缩后的模型图
步骤三:
??? 子系统模块将有一个默认输入端口和输出端口。输入端口和输出端口的默认名分别为In1和Out1。调整子系统和模型窗口的大小使之美观,如图7.5.6所示。
?????????? ??
??????? ???????????????????? ?图7.5.6 压缩后的模型图
??? 若想查看子系统内容或对子系统进行再编辑,可以双击子系统模块,则会出现一个显示子系统内容的新窗口。在窗口内,除了原始的模块外,Simulink自动添加了输入模块和输出模块,分别代表子系统的输入端口和输出端口。改变它们的标签会使子系统的输入输出端口的标签也随着变化。
??? 特别注意:菜单命令【Edit/Creat Subsystem】没有相反的操作命令。也就是说一旦将一组模块压缩成子系统,就没有直接还原的处理方法了(UNDO除外)。因此一个理想的处理方法是在压缩子系统之前先把模型保存一下,作为备份。
二、子系统模块
??? 在创建模型的时候,如果需要一个子系统,也可以直接在子系统窗口中创建。这样就省去了上面的
显示全部