5.3.1子系统的建立
随着所需建立的模型的规模和复杂性的增加,再采用平面的结构建立模型将面临困难,如果把整个模型按功能划分为几个子系统,就会使系统结构和层次简洁而清楚,下面介绍建立子系统的两种方法。
1. 在已建立的模型中创建子系统
在已建立的模型中,选中要建立子系统的全部模块,执行“Createsubsystem”即可创建子系统,并可以修改子系统名,输入输出端口名。
[例5-3] 在已建立的模型中创建子系统,该子系统实现y=2x+3。
在已建立实现y=2x+b的模型中,选中要创建子系统的模块范围,将出现如图5-16所示浅蓝性矩形框,单击鼠标右键在弹出的菜单中选择“CreateSubsystem from Selection”,或单击图中浅蓝矩形框右下角图标,选择“Create subsystem”,建立子系统。

图5-16实现y=2x+3的模型
将子系统Subsystem名称改为y=2x+3,双击进入子系统中,将输入端口名In1改为x,将输出端口名Out1改为y,子系统内部模型如图5-17所示,返回调整子系统的大小,搭建完成的模型如图5-18所示,本例选取Ramp做输入信号,选用Scope显示输出。

图5-17实现y=2x+3子系统的内部模型

图5-18 含y=2x+3子系统的模型
2. 通过子系统模块创建子系统
首先,在打开或新建模型文件,从Simulink库下的Ports & Subsystem子库内选择Subsystem模块(或其它子系统模块)添加到模型文件中,双击该模块,即将打开子系统编辑窗口,其中,系统已经自动添加了一个输入端口In1和一个输出端口Out1,用户继续添加需要的模块,包括更多的输入或输出端口,进行仿真模形搭建,输入端口接收外部输入信号,输出端口将信号输出到外部,同样可完成子系统的创建。
5.3.2条件执行子系统
条件执行子系统是指存在一个或多个控制输入端的子系统,这些控制端决定了所在子系统的工作状态,这类子系统包括:使能子系统、触发子系统和使能触发子系统。其模块如图5-19所示。

1. 使能子系统
一个使能子系统是指存在一个使能端,子系统通过该使能端接收一个使能信号,子系统只有当该信号为正时才会激活,为负时则不作响应。
2. 触发子系统
触发子系统存在一个触发端,通过触发事件是否发生来控制子系统是否执行。触发事件主要有两种:
(1)上升沿触发:当控制信号上升且过零点时子系统执行。
(2)下降沿触发:当控制信号下降且过零点时子系统执行。
触发信号可以是一个向量信号,此时其中任一分量满足触发条件时子系统均会被执行。
3. 触发使能子系统
子系统中既有触发模块,又有使能模块,就构成了触发使能子系统,在使能信号为负时,触发信号将被忽略,在使能信号为正时,子系统按触发子系统方式工作。
5.3.3子系统的封装
1. 封装子系统的好处
对一个子系统进行封装,使子系统从外在看象一个模块,有以下几点好处:
(1)将子系统内众多的模块参数对话框集成为一个单独的对话框,用户可以在该对话框中进行参数设定。
(2)可以将子系统内的模块描述或者帮助集成在一起,帮助用户了解子系统的功能与使用。
(3)使用定制的参数对话框,可以避免由于不小心修改了不可改变的参数。
(4)利用封装子系统构建自己的模块库。
2. 封装子系统的主要步骤
创建子系统后,选中该模块(子系统),单击鼠标右键,在菜单中选“Mask\CreateMask”,弹出封装编辑窗如图5-20所示,进行封装参数设置。

图5-20Icon & Ports选项卡
封装编辑对话窗有4个选项卡:
(1)Icon & Ports
“Icon & Ports”选项卡如图5-20所示,可以定制封装模块的图标。系统提供了设置封装图标特性的下拉式菜单和进行个性化设置的窗口“Icon Drawing commands”。在文本框“Icon drawing commands”中输入命令,可建立用户个性化的图标,可以在其中显示文本、图形、图像和传递函数值。
在“Options”设置区,Block frame:用于设置图标的边框是否可见;Icon transparency:用于设置图标是否透明;Icon units:用于选择使用画图命令时的系统坐标,有3种方式:Autoscale、Normalized和Pixel。Icon rotaion:用于设置当模块被旋转或翻转时图标和方向是否发生变化。
(2)Parameters & Dialog
“Parameters& Dialog”选项卡如下图5-21所示,可建立封装模块内部变量与封装对话框之间的联系。

图5-21Parameters& Dialog选项卡
在该界面中,共三部分,左侧是“Controls”区,主要选择封装时添加的控件类型,如Edit代表编辑框,Check box是复选框,Popup是下拉列表。中间“Dialog box”区,用于参数编辑,右侧“Property editor”区用于属性编辑。
(3)Initialzation初始化设置
“Initialzation”选项卡窗口如图5-22所示,分两部分,其中右侧的“Initialzation command”文本框中输入初始化命令,这些命令将在开始仿真、更新模块框图、载入模型和重新绘制封装子系统的图标时被重新执行,适当的设置有十分重要的作用。左侧的“Dialog variables”文本框中列出了与子系统封装参数进行了关联的变量,可在右侧的“Initialization commands”中进行编辑初始化。

图5-22Initialzation选项卡
(4)Documentation帮助文本设置
单击“Documentation”选项卡将弹出文档编辑对话窗如图5-23所示,该窗口包括封装类型区(Mask type)、封装描述区(Mask description)和封装帮助区(Mask help)。封装类型区中的内容将作为模块的类型显示在封装模块的对话框中;封装描述区中的内容包括描述模块功能用的简短的语句和其他关于使用此模块的注意事项等,此区中内容将显示在封装模块对话框的上部;封装帮助区的内容包括使用此模块的详细说明等,当选择help命令时,Matlab的帮助系统将显示此区中的内容。
[例5-4] 在例5-3基础上,实现子系统y=ax+b的封装,其中,x是输入,y为输出,a,b是子系统参数。
(1)在子系统内,将模块slope中输入值改为a,将模块intercept中输入值改为b,将子系统名改为y=ax+b。
(2)封装设置,在“Icon& Ports”选项卡中,在“IconDrawing commands”中输入:plot(x,y),在“Options”设置区中,“Icon transparency”项选择“tranparent”设置图标透明;“Icon units”选中“Pixel”像素形式;“Icon rotaion”设置为“Fixed”固定图标图形。
(3)封装设置,在“Parameters& Dialog”中,设置如图5-24所示,“Name”栏输入了变量a和b,在“Prompt”栏可以输入变量的提示信息。
图5-24封装编辑器编辑变量a、b
(4)封装设置,在“Initialzation”中,输入:
pos=get_param(gcb,'position')
width=pos(3)-pos(1)
height=pos(4)-pos(2)
x=[0,width];
if (a>=0),y=[0,(a*width)];end
if (a<0),y=[height,(height+(a*width))];end
设置完成后,含封装子系统y=ax+b的模型如图5-25所示,子系统模块上显示根据可随斜率a值变化的直线。

对模块参数进行设置,双击y=ax+b模块,将弹出如图5-26所示对话框,显示变量a、b初始值均为1,可在编辑框中对变量a、b进行编辑。

图5-26y=ax+b模块的参数设置对话框
style='font-size:12px'>
3. 建立自己的模块库
在模型编辑窗中,执行菜单“File/New library”命令,可以建立一个模块库,用户可以把自己建立的封装模块复制到模块库中,为模块库命名并保存。
如果用户要用到该模块库的模块时,只需在Command Window(命令窗口)的提示符后输入库名回车,就可以打开该模块库。