子系统的封装的意义
子系统封装技术可以让一个子系统有自己的特点。封装后的子系统可以有自己的图标、自己的参数和具有功能描述的控制对话框,甚至自己的help文档,同时参数的修改更为方便(不用深入子系统,只需在对话框中修改便可),内部结构也不易被修改。
封装技术的简要介绍
封装是在Mask Editor中进行的。要打开Mask Editor,需要两步:①选中要封装的子系统;②选择菜单Edit->Edit
Mask或者右键菜单中的Edit Mask。Mask Editor的样子如下:
图一
可见,Mask Editor中共有如下四个选项页:
Icon&Port,主要是对子系统的外观图标进行设置;
Parameters,主要对封装子系统的参数进行设置。如果子系统中有一个或多个模块需要手动设置参数,那么在仿真之前需要进入到子系统里面去对这些模块分别进行参数设计,很麻烦。而用Mask
Editor中的Parameters设置参数,使这些参数能够将参数值传入到subsystem的模块中去。这样就可以直接对subsystem进行参数设计,既明了又方便;
Initialization,提供了一个Matlab语言命令框,可以在其中写入一些程序,当子系统有被载入、改变参数或初始化等情况发生时,Simulink会自动执行这些程序。所以可以将一些仿真前需要对subsystem做的设置,以程序的形式写入到编辑框内来实现;
Documentation,编辑子系统的描述和生成help文档。
注意:左下角的Unmask按钮可以取消对subsystem的封装。
详细阐述
下面对这四个选项页进行详细阐述,由于Icon&Port和Documentation对subsystem的功能影响不是很大,故只做简要介绍,详细内容参考help文档。
Icon&port
如图一所示,该选项页有三部分:Options、Icon Drawing
Commands和Examples of drawing commands。其中Icon Drawing
Commands中可以编辑相应的绘图命令,所有支持的命令的简单语法可在Examples of drawing
commands中查看,具体用见相应的help文档。
Parameters
该选项页布局如下图所示:
图二
如上图所示,该选项页有两个设置栏Dialog Parameters和Options
for selected parameter。在Dialog Parameters左侧有四个按钮,功能分别是增加参数、删除参数、上移和下移。
在Dialog Parameters面板中,每个参数有如下几个属性:
prompt,其实封装后subsystem对话框中显示的文本,起到一种提示作用;
Variable,在mask's workspace中存储参数值的变量名称。在封装的subsy内,可以把该variable当做参数的值来使用,所以允许用户通过对话框设置参数
。由于这是变量名,所以要遵守matlab关于变量命名的规则;
Type,编辑参数的空间的类型。在封装好的subsystem的对话框中,控件紧随参数的prompt显示。主要有三种类型Edit、Checkbox和Popup;
Evaluate,Simulink可以使用用户输入作为参数值,也可以把用户输入做个evaluation,使用其结果当做参数的值(默认情况下如此)。选中Evaluate,则会对用户输入做evaluation,然后将evaluation的结果赋值给variable;不选中则不会evaluation,将会把表达式本身作为字符串值赋值给variable。选中Evaluate的效果依控件Type的不同而不同,后面会详细阐述;
tunable,选中tunable则参数在仿真时可以被修改,未选中则仿真时参数不能修改;
tab name,标签名字。不输入tab name,那么封装好的subsystem的对话框是在一个面板上的(没有标签),如果输入了文本,则对话框中参数会显示在不同的标签下;
控件类型:edit、checkbox和popup。
edit允许用户在一定区域输入参数的值;
checkbox允许用户在check box的选中与不选中之间做出选择;
popup允许用户在一系列的可能值之中做出选择。
图三
edit类型的参数的值依赖于Evaluate的选择,具体关系如下表:
举个例子:假如输入是2*5,则若选中Evaluate,参数值为2×5=10;若为选中Evaluate,则参数值为字符串"2*5"。
checkbox类型参数的值依赖于Evaluate的选择,具体关系如下表:
然而help文档中的表是这样的,我感到是错误的:
popup控件允许用户从一组可能的值中做出选择。可选择的可能值列表需要用户在Dialog
Parameters中选中该参数,然后再Options for selected parameter中的popups标签中编辑可选择值的列表(但是要注意一个可选择值必须占单独的一行)。具体的例子可见图一。具有popup类型控件变量的值依赖于pop-up
list中选中的item和Evaluate是否被选中,具体见下表:
Options for selected parameter允许对Dialog Parameters中选定的参数设置其他的options。
Show parameter:只有选中该项,此参数才会显示在已封装模块的对话框中。如果不想改参数出现在对话框中(比如此参数是由其他参数设定的),则需要取消该项;
Enable parameter:选中该项,参数可以编辑,否则,参数将不能由用户编辑;
Popups:只有当Dialog Parameters中选中的参数是popup类型时,才有此项。此处编辑popup的可能值列表,每行一项;
Callback:在此处编辑想让Simulink在改变参数时执行的matlab代码(例如一选中某个checkbox,就激活一个edit
field)。
注意:在callback中不要试图改变subsystem中的内容,否则可能在模型update或者simulation时出错。改变subsystem中的内容可以再Initialization中进行。
Initialization
该选项卡的界面如下:
图四
当打开model时,所有可视的masked模块的Initialization中的语句执行。初始不可视的模块的Initialization的语句只有在打开包含它们的model或者subsystem时菜执行。
当你没有使用图示的方法加载模块进内存时,Initialization语句不会执行。
在下面的情况下,模型中所有masked模块的Initialization语句都执行:
Update the diagram(不知道这个是个什么情况);
Start simulation;
Start code generation。
在下面的情况下,单个模块的Initialization语句会执行:
使用Mask Editor或者set_param改变mask的任何一个参数(例如MaskDisplay
和 MaskInitialization );
改变masked block的外观,例如旋转模块或改变模块大小;
通过对话框或set_param改变模块的mask参数值;
在不同的model或同一个model内复制masked block。
在界面的左侧有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也有如下限制:
不要用initialization command创建其显示依赖于其他控件设置的mask
dialog(例如一选中某个checkbox,就激活一个edit field)。这种功能用callback实现;
在initialization commands中的变量不要以L_和M_开头,以防出现意外结果。由于此种前缀的变量名是内部使用的,所以要保留;
Avoid using set_param commands to set parameters of
blocks residing in masked subsystems that reside in
the masked subsystem being initialized。我觉得就是不要用set_param命令给嵌套在深层的subsystem参数设置参数。
Documentation
Documentation的界面如下:
图五
Mask type:出现在对话框的block classification。当出现在对话框时,后面总是有"(mask)"后缀。该区域可以输入任意合法的matlab字符,但不能输入line
break;
Mask description:此处文本出现在对话框中描述模块功能。这里可以输入line break(使用enter或return键);
Mask help:此处的内容将在点击help按钮时起作用,可以在其中输入下面三种内容:
URL specification;
web或eval命令;
文本或者html文本。
三者的对应关系如下图所示:
图六
|