子系统封装技术可以让一个子系统有自己的特点。封装后的子系统可以有自己的图标、自己的参数和具有功能描述的控制对话框,甚至自己的help文档,同时参数的修改更为方便(不用深入子系统,只需在对话框中修改便可),内部结构也不易被修改。
封装是在Mask Editor中进行的。要打开Mask Editor,需要两步:①选中要封装的子系统;②选择菜单Edit->Edit Mask或者右键菜单中的Edit Mask。Mask Editor的样子如下:
图一
可见,Mask Editor中共有如下四个选项页:
注意:左下角的Unmask按钮可以取消对subsystem的封装。
下面对这四个选项页进行详细阐述,由于Icon&Port和Documentation对subsystem的功能影响不是很大,故只做简要介绍,详细内容参考help文档。
如图一所示,该选项页有三部分:Options、Icon Drawing Commands和Examples of drawing commands。其中Icon Drawing Commands中可以编辑相应的绘图命令,所有支持的命令的简单语法可在Examples of drawing commands中查看,具体用见相应的help文档。
该选项页布局如下图所示:
图二
如上图所示,该选项页有两个设置栏Dialog Parameters和Options for selected parameter。在Dialog Parameters左侧有四个按钮,功能分别是增加参数、删除参数、上移和下移。
在Dialog Parameters面板中,每个参数有如下几个属性:
控件类型:edit、checkbox和popup。
edit允许用户在一定区域输入参数的值;
checkbox允许用户在check box的选中与不选中之间做出选择;
popup允许用户在一系列的可能值之中做出选择。
图三
edit类型的参数的值依赖于Evaluate的选择,具体关系如下表:
Evaluate是否选中 |
Edit控件参数值 |
是 | 输入表达式做evaluation后的结果 |
否 | 输入内容的文本字符串 |
举个例子:假如输入是2*5,则若选中Evaluate,参数值为2×5=10;若为选中Evaluate,则参数值为字符串"2*5"。
checkbox类型参数的值依赖于Evaluate的选择,具体关系如下表:
是否选中Evaluate |
是否选中check box |
Check box参数值 |
---|---|---|
是 | 是 | 1 |
否 | 0 | |
否 | 是 | 'on' |
否 | 'off' |
然而help文档中的表是这样的,我感到是错误的:
Evaluation | Check Box Parameter State | Check Box Parameter Value |
---|---|---|
On | Selected | 1 |
Cleared | 'on' | |
Off | Selected | 0 |
Cleared | 'off' |
popup控件允许用户从一组可能的值中做出选择。可选择的可能值列表需要用户在Dialog Parameters中选中该参数,然后再Options for selected parameter中的popups标签中编辑可选择值的列表(但是要注意一个可选择值必须占单独的一行)。具体的例子可见图一。具有popup类型控件变量的值依赖于pop-up list中选中的item和Evaluate是否被选中,具体见下表:
是否选中Evaluate |
popup参数值 |
是 | 被选择项的索引值,第一项的索引值为1。例如如果选择了popup框中的第3个选项,则参数值为3 |
否 | popup选项框中所选中的字符串,例如若果选中了popup框中的 red 项,则参数值为 'red' |
Options for selected parameter允许对Dialog Parameters中选定的参数设置其他的options。
注意:在callback中不要试图改变subsystem中的内容,否则可能在模型update或者simulation时出错。改变subsystem中的内容可以再Initialization中进行。
该选项卡的界面如下:
图四
当打开model时,所有可视的masked模块的Initialization中的语句执行。初始不可视的模块的Initialization的语句只有在打开包含它们的model或者subsystem时菜执行。
当你没有使用图示的方法加载模块进内存时,Initialization语句不会执行。
在下面的情况下,模型中所有masked模块的Initialization语句都执行:
在下面的情况下,单个模块的Initialization语句会执行:
在界面的左侧有dialog variables的列表,在右侧的Initialization commands可以使用双击dialog variables中的变量,可以重新编辑变量的名称。
在Initialization commands中可以使用有效地matlab表达式、matlab函数、脚本、运算符和dialog variables列表中的变量。这些代码是在mask workspace中运行的,而不是在base workspace。在语句的末尾加分号(;)可以防止在Command Window中输出结果。
在界面的下面有一个Allow library block to modify its contents的checkbox。该参数只有在库(library,而非model)中subsystem封装时才有效(图四中该选项是disable的)。选中该选项允许Initialization commands中的语句增加或删除subsystem中的内容(模块等东西),设置参数。否则,无论用何种方式,当一个masked library block改变其内容时都会报错。
注意:Initialization commands也有如下限制:
Documentation的界面如下:
图五
Mask type:出现在对话框的block classification。当出现在对话框时,后面总是有"(mask)"后缀。该区域可以输入任意合法的matlab字符,但不能输入line break;
Mask description:此处文本出现在对话框中描述模块功能。这里可以输入line break(使用enter或return键);
Mask help:此处的内容将在点击help按钮时起作用,可以在其中输入下面三种内容:
三者的对应关系如下图所示:
图六
《Simulink通信仿真教程》
matlab r2010的help文档—Simulink/User's Guide/Simulink Graphical User Interface/Simulink Mask Editor