文章目录
2.1 Simulink模块的组成要素
2.1.1 模块概述
模块是构成Simulink模型的元素。将各种模块信号相连,可通过相应的逻辑连接实现对应功能。
Simulink的强大之处就在于它提供了丰富的标准模块库,能够表征各种数学逻辑、物理对象及电气元件和电路等。
Simulink库提供的模块,能够使用户将常用的算法逻辑通过框图方式表现出来。每个模块有明确的输入/输出,配有Help文档能够说明自身功能,并提供参数编辑和选择功能。
2.1.2 Simulink 模块构成
Simulink模块作为模型的构成元素,本身包含了3个子元素:
① 输入/输出端口;
② 模块外观:通常为矩形或圆形,上面带有说明文字或图像并显示输入/输出端口名;
③ 对话框:双击模块外观后弹出的参数界面,可以在参数控件上进行参数设置。
2.1.3 Simulink模块的朝向
默认情况下,模块的方向左边是输入端口,右边是输出端口。当使用鼠标选中模块,按下ctrl+R组合键后,模块会顺时针旋转90°,连续旋转4次则恢复原来的朝向。
2.1.4 Simulink 模块的属性及参数
双击模块之后即可看到模块的GUI对话框,可以直接在GUI中编辑参数。
以Constant模块为例:
Constant模块对话框有两个标签页面,除了用作参数对话框的 Main之外,还有Signal Attributes。
Signal Attributes不是每个模块都具有的属性。常数模块、四则运算和增益模块及输入输出端口等都拥有 Signal Attributes信号属性配置页面。
2.1.5 Simulink 模块的注解
Simulink模块具有注解(Annotation)显示功能,在默认情况下没有使用。
以Integrator模块为例,右键单击模块图标,在弹出的右键菜单中选择Properties选项,弹出 Block Properties对话框。
选中对话框第二个标签页面 Block Annotation,左下方 Block property tokens 中提供了诸多以%<>标示的变量,表示模块的属性符号。
双击可以将选中的某一条导入到右边的编辑框中,从而以悬浮文字的方式显示到模型中去。
比如双击 Integrator 模块的初始值属性符号%< InitialCondition>后,%< InitialCondition>自动拷贝到了右侧的编辑框中。在 InitialCondition 栏输入Initval = %< InitialCondition>,模块上注解部分显示效果为
合理使用模块注解功能能够增强模块的可读性,便于同一项目的不同开发者之间协作。
2.1.6 Simulink 模块的虚拟性
Simulink基本模块按照仿真特性划分为两种类型:虚拟模块和非虚拟模块。
二者的区别在于:
非虚拟模块在仿真过程中起实际的作用,对其进行编辑或者增加删除操作,会影响到模型的运行和改变模型的结果;
虚拟模块在仿真的过程中不起实际作用,主要是为了从模型框图上改善视觉感受,明确模型结构的层次划分,以及保持模型图形界面的整洁性等作用。
还有一些模块在某些特定条件下为非虚拟模块,有些条件下为虚拟模块,可称之为条件虚拟模块。了解虚拟模块和非虚拟模块是非常必要的,这两者的区别在生成代码时可以直观地看到(虚拟模块不会按照用户设定生成函数)。
2.2 Simulink 常用模块库
Commonly Used Blocks是 Simulink Library Browser 中提供的一组模块库,这些模块库是用户在建模时最基本最常用的模块,包括输入/输出端口、常数与数据波形显示模块及基本数学运算模块,关系操作模块和逻辑操作模块,另外也包括积分、延时、子系统和数据类型转换模块等。
这些模块不仅存在于Commonly Used Blocks子库中,也分别存在于各自所属的类别库中。它们被集中在Commonly Used Blocks子库中是为了方便用户使用。
2.2.1 输入/输出模块
一、In模块
此模块为信号的输入端口。当它存放于子系统模型中时,为子系统模型增加一个输入端口,是连接上层模型与当前层次模型的接口,将父层模型的信号传递到当前层次模型中来。
In模块也可以存在于模型最顶层。这时由于没有父层,不用为父层提供信号接口,其功能类似一个默认输出值为0的常数模块。
另外,结合 Configuration Parameter 对话框中的数据导入功能,还可以预设In模块的输出值。
当同一层模型中存在多个In模块时, Simulink 会自动编号。
首个出现在模型中的In模块,其编号默认为1。当连续增加In模块时,新增加的模块编号会按照升序依次编号;当删除一个In模块时,编号大于被删除In模块编号的模块会自动将编号减1。
导入数据输入 In 模块直连示波器模型:
二、Out模块
此模块作为信号的输出端口,当它存放于子系统模型中时,为子系统模型增加一个输出端口,是连接上层模型与当前层次模型的桥梁,将当前层次模型的信号传递到父层模型中去。
Out模块也可以存在于模型最顶层。这时由于没有父层,不传递信号到父层,也不显示出波形,仅作为一个默认输出。必要时可以设置将接收的数据存储到工作空间的变量中。
2.2.2 常数模块
常数模块在仿真过程中通常输出恒定的数值。常数模块不仅支持scalar数据作为参数输人,也支持向量、矩阵等多维数据的信号输出。
2.2.3 波形显示模块
Scope模块顾名思义,是模型中的示波器,能够显示模型中的信号波形,方便观察和保存。如在仿真过程中的采样时间序列及对应时刻的仿真数据等。
模块默认有一个输入,可以连接任何类型的实数信号线(不支持复数)。
界面主要包括两个部分:Scope工具栏,波形显示区域。波形显示界面默认是黑色背景,当有单个信号输入时,信号线是黄色的。
常见问题和解决方案:
需要输入多个信号分别观察时,必须使用多个Scope模块吗?
黑色背景和黄色信号线印刷出来视觉上难以分辨,可以更换背景色吗?
如果仿真需要经过很长时间得到的波形,能否将图像保存到硬盘,以免每次观察都先花这么长的时间去跑模型?
通过Scope工具栏的设置按钮处下拉菜单,style页面可对波形显示界面的颜色和字体等进行设置。
2.2.4 四则运算模块
Simulink Library Browser提供的四则运算模块包括Sum, Product和Gain模块,分别能实现加减,乘除和增益运算。
一、Sum模块
Sum模块是加减法运算模块,默认为一个圆形图标,具有两个输入端口,进行两个输入数据的加法运算,并将其值输出。
参数页面:
Main标签中提供了2个参数:Icon shape ,List of sign。
Icon shape 中可以选择是圆形还是矩形外观。
List of signs则通过|、+、-这3个符号进行输入端口的位置和符号配置。
二、product模块
Product模块是乘除法运算模块,默认为一个矩形图标,具有两个输入端口一个输出端口,进行两个输入数据的乘法运算,并将其值输出。
Number of inputs:设置Product的输入端口个数,默认为⒉,可以接受其他正整数。
Multiplication:提供了两种乘法,Element-wise表示点乘(.* ),Matrix表示矩阵乘法。当选择点乘时模块上显示“×”,当选择矩阵乘法时,模块图标上显示”Matrix Multipy”的字样。
Display模块虽然不在Commonly Used Block 中,但也是一个常用模块。它与Scope 不同,不记录整个过程的波形,只是将当前时刻的信号值显示到界面上。
由于一般模型仿真过程短短一瞬就结束了,这时 Display 上观察到的就是仿真最后一个采样时刻的结果值。
显示模块名称:
将鼠标箭头放在模块处,单击鼠标右键;
将光标移动至“Format”处,看到右边弹出来的“Show Block Name”。
模块的默认选择是Auto,效果是当鼠标光标不在模块上时,模块下面的名字会自动隐藏,当鼠标光标在模块上时,其名字则会自动显示出来,非常方便。
当然如果需要使它一直处于显示状态的话,只需要选择“ON”即可。
三、Divide模块
Divide模块虽然不属于Commonly Used Block ,但是可实现两个或多个信号的乘除法运算,并且跟Sum模块一样可以通过输入*/来实现端口个数和乘除数功能的定义。
Number of inputs:输入个数不是直接输入数字,而是输入乘号(*)和除号(/),个数由*/自动决定,端口的乘除法运算则根据*/的顺序从上到下依次排布,如输入*//,则 Divide模块拥有3个输入端口,第1个是乘法,第2个第3个都是除法。
Multiplication:提供两种乘法方式——点乘Element-wise(.* )或矩阵乘法 Matrix( * )。
四、Gain模块
Gain模块是具有一个输入一个输出的增益模块。
Gain:增益数值,支持标量、向量或矩阵形式的输入。
Multiplication:下拉框提供了4种乘法模式,
Element-wise表示的点乘(.*),另外3种为矩阵相乘Matrix(K* u)、Matrix(u * K)和Matrix(K* u)( u vector)。K表示增益Gain的参数值,u表示输入端口的数值。
当选择点乘时模块上显示Gain 的数值,当选择矩阵乘法时,模块图标上显示所选择的矩阵乘法形式。
2.2.5延时模块
延时模块与前述模块都不同,其输出信号与输入信号之间具有间接的关系,输出不直接反应输入信号的变化,而是延迟一个或多个采样时间再将输入信号输出到输出端口。对于当前采样时刻的输出,则是一个或几个采样时刻之前获取的输入。
一、Delay模块
Commonly Used Blocks提供的延时模块是Delay,具有一个输入端口和一个输出端口。
Delay模块的输入信号为标量、向量或矩阵。
Delay的 Main页面分为Data区域、Algorithm区域,Control区域及采样时间。
Data区域中包括两个参数 Delay length 和 Intial condition,分别表示延时的采样点数和输出的初始值。模块的总延时时间长度由Delay length 的数值和模块采样时间乘积决定。
例如,Delay length中填入3, Sample time中设置为0.6,Delay模块的输出将在1.8 s时开始更新,在0~1.8 s之间, Delay模块的输出值由Initial condition中初始值决定。
二、Unit Delay模块
跟 Delay模块同样实现延时的模块还有 Unite Delay模块,它不是Commonly Used Block里的模块,是 Delay模块的一种特例,即只延时一个采样时间。其参数对话框相对较简单,不需要设置 Delay lentgh。根据应用场景不同,建模时可选择使用 Delay或者Unit Delay模块。
图示模型为使用Delay模块实现的一个累加计数器,计数到10之后自动复位,复位之后重新计时,周而复始。
模型中 Delay初始值为0,采用rising复位方式,复位端口输人非零值时计数器复位。在无复位信号时每个采样时刻加1并将值缓存为内部状态值。复位信号由常数9与累加器的输出比较得到,当计数值大于9时,比较运算模块实现“大于”的比较功能,上面的输入端口信号值大于下面的输入端口信号值时,输出1到 Delay 的复位端口使Delay模块状态值复位。
2.2.6 关系运算模块
关系运算模块(Relational Operator模块)集合了各种关系比较功能于一体。
关系操作符共9种,前6种是比较大小等于关系的组合,需2个输入信号;后3个是判断操作符,仅需1个输入信号。
根据所选择的符号,模块的图标会显示对应的关系操作,并自动调整输入端口的个数。
Enable zero - crossing detection
此参数以勾选框(check-box)形式给出,当勾选时启用
★过零检测
变步长解算方法动态地评估计算下一个采样时刻所使用的步长,当前后两个采样点的状态值变化大时,则缩小采样步长;当前后两个采样点的值变化小时则增大步长。这种做法使得解算器在计算不连续临近区域时使用较小的步长,因为不连续点临近区域值的变化幅度大。能保证计算的精确度,但却有可能因采样过于密集,步长过小而导致仿真时间太长。Simulink使用过零检测技术精确定位不连续点,防止仿真时间太长,一般情况下能够提高仿真速度,但有可能使得仿真到达规定时间长度之前就停止。
2.2.7 逻辑运算模块
Logical Operator模块集合了常用逻辑操作功能于一体,根据用户选择的逻辑关系不同会显示为一个或多个输入端口,输出端口总是一个。
Operator:逻辑关系操作符选择。
Number of input ports:输入端口个数
lcon Shape:此选项用于选择模块图标的形状。选择rectangular时,模块形状不变,只是在框图中央显示当前所选择的逻辑操作,选择distinctive时,模块会以IEEE图像符号标准所规定的形式。
有了逻辑运算模块,Simulink就可以进行数字门电路的逻辑仿真。
2.2.8 Switch模块
Switch模块是一个选择开关模块,可根据判断条件选择多个输入中的某个进行输出。
在Commonly Used Blocks中是有3输入端口,1输出端口的Switch模块图标。
模块的3个输入端口中,第1个和第3个输入端口为输出端口提供输出值;
第2个输入端口的值和条件关系共同决定输出端口输出第1个输入口还是第3个输入口的值。
对第2个端口进行条件判断,如果判断为True,则输出口输出第1个端口的信号;判断为False输出第3个输入端口的信号。
对第2个端口进行判断的条件关系有3种选择:
①第2个端口大于或等于某个阈值。
②第2个端口大于某个阈值。
③第2个端口不等于0。
阈值(Threshold)在Switch参数对话框的参数中设置。当用户选择条件关系后,该判断条件会显示到模块框图上。
用Switch模块仿真符号函数功能,获取输入信号的正负号:
Switch模块能够解决分段函数仿真的问题。
多个Switch模块的级联使用能够对分段多的函数进行仿真。
这个分段函数的自变量t被2、3、6这3个点分隔为4段区间,可以通过3个级联的Switch模块实现此分段函数的建模。以1∶10递增信号作为输入便于验证模型计算结果。
仿真结果如图所示。横轴表示输人数据0∶10,纵轴表示分段函数的输出值﹐能够完全反映分段函数的4个分支情况。
除Commonly Used Block 中的Switch模块外,Simulink还提供一个多端口 switch模块Multiport Switch。
很久没用NATLAB了,在草稿箱里发现了这篇文章,发表出来吧。