1、天津理工大学中环信息学院天津理工大学中环信息学院电气工程仿真与辅助设计电气工程仿真与辅助设计内容:内容:Simulink Simulink建模的基础知识建模的基础知识 Simulink Simulink建模与仿真建模与仿真 非线性系统分析与仿真非线性系统分析与仿真 子系统与模块封装技术子系统与模块封装技术 MATLAB下提供的Simulink环境是解决非线性系 统建模、分析的理想工具。Simulink作为面向系统框图的平台,其优势:以调用模块代替程序编写,以模块连成的框 图表示系统。系统的运行状态和结果可通过波形及曲线观 察,实现动态仿真。可以用来模拟线性和非线性、连续和离散或 者两者的混合系
2、统。以框图对控制系统进行仿真是Simulink的最 早功能,其后在此基础上开发了数字信号处 理、通信系统、电力系统等数10种模块库。5.1 5.1 SimulinkSimulink建模的基础知识建模的基础知识第第5 5章章Simulink模型库打开方式:在MATLAB的命令窗口直接键入Simulink工具栏上的Simulink模块库浏览命令按钮 在File菜单下选择New新建,选Model。模型“*.mdl”本章主要介绍常用的Simulink模型库、电力系统SimPowerSystems模型库(第八章介绍)一个典型的Simulink模型包括如下三种类型的元素:信号源模块 被模拟的系统模块 输出
3、显示模块 Simulink 把功能块分成9类,分别放置在9个库中:输入模块库(Sources)、输出显示库(Sinks)、离散模块库(Discrete)、连续模块库(Continuous)、非线性模块库(Discontinuities)、数学函数库(Math)、通用函数及列表库(Functions and Tables)、信号处理及系统类模块库(Signal and Systems)子系统模块库(Subsystems)。返回图图1 1 库的类型库的类型 图图2 Sources2 Sources库库返回图图3 Sinks3 Sinks库库 图图4 Discrete4 Discrete库库 图图5
4、 Continuous5 Continuous库库返回图图6 Math6 Math库库 图图7 Discontinuities7 Discontinuities库库 返回图图8 Signak&Systems8 Signak&Systems库库 返回图图9 Subsystems9 Subsystems库库 返回在Simulink中,各功能模块的参数描述都可以由用户通过该模块的模块属性对话框进行操作给出或修改。下图是积分模块的属性对话框,从图可见,它有9个可控参数。(1)External reset 为外部重置 选项。它用在当重置信号中发生 触发事件时,模块将按照初始条 件重置状态。(2)init
5、ial condition source 此项用来从初始条件参数或外部 模块中获取初始条件。(3)initial condition 此区域 用来设置初始条件。返回 (4)Limit output 如果此项被选中,则状态将被限制在饱和度下限和上限之间。(5)Upper saturation limit 此参数用来设置饱和度上限。(6)Lower saturation limit此参数用来设置饱和度下限。(7)Show saturation port 若此项被选中,则模块上将增加一个饱和度端口。(8)Show state port 若此项被选中,则模块上将增加一个状态端口。(9)Absolute
6、 tolerance 此参数用来设置模块状态的绝对误差。5.5.2 2 SimulinkSimulink建模与仿真建模与仿真第第5 5章章 利用Simulink建立物理系统和数学系统的仿真模型,关键是对Simulink提供的功能模块进行操作,即用适当的方式将各种模块连接在一起。本小节将介绍模块的基本操作,包括介绍模块操作、编辑信号线及标注模型等。在介绍操作之前先对建模过程提两点建议:对模块和信号线有一个整体、清晰和仔细的安排,以便能减少建模时间;及时对模块和信号线命名、及时对模型加标注,以增强模型的可读性。1、选取模块、选取模块 当选取单个模块时,只要用鼠标在模块上单击即可,这时模块的角上出现
7、黑色的小方块。选取多个模块时,在所有模块所占区域的一角按下鼠标左键不放,拖向该区域的对角,在此过程中会出现虚框,当虚框包住了要选的所有模块后,放开鼠标左键,这时在所有被选模块的角上都会出现小黑方块,表示模块被选中了。2 2、复制模块、复制模块(1)在不同的窗口之间复制 用鼠标左键点住要复制的模块,按住左键移动鼠标到相应窗口,然后释放,该模块就会被复制过来,而原模块不会被删除。使用Edit菜单的Copy和Paste命令来完成复制:先选定要复制的模块,选择Edit菜单下的Copy命令,到目标窗口的Edit菜单下选择Paste命令。(2)在同一个模型窗口内复制 用鼠标左键点住要复制的模块,按住左键移
8、动鼠标,同时按下Ctrl键,到适当位置释放鼠标,该模块就被复制到当前位置。按住鼠标右键(不按Ctrl键)移动鼠标。3 3、删除模块、删除模块选定模块,选择Edit菜单下的Cut(删除到剪贴板)或Clear(彻底删除)命令。或者在模块上单击鼠标右键,在弹出菜单上选择Cut或Clear命令。4 4、模块的参数与特性设置、模块的参数与特性设置 Simulink中几乎所有模块的参数(Parameter)都允许用户进行设置。只要双击要设置参数的模块就会弹出设置对话框。如图,这是正弦波模块的参数设置对话框,您可以设置它的幅值、频率、相位、采样时间等参数。5 5、模块外形的调整、模块外形的调整(1)改变模块
9、的大小n选定模块,用鼠标点住其周围的四个黑方块中的任意一个拖动,这时会出现虚线的矩形表示新模块的位置,到需要的位置后释放鼠标即可。(2)调整模块的方向n选定模块,选取菜单Format下的Rotate Block使模块旋转90,Flip Block使模块旋转180。(3)给模块加阴影n选定模块,选取菜单Format下的Show Drop Shadow使模块产生阴影效果。图7.3.7 模块的阴影效果 图7.3.6 调整模块的方向 6 6、模块名的处理、模块名的处理n(1)模块名的显示,选取菜单Format下的Hide Name,模块名就会被隐藏;选取Show Name就会使模块隐藏的名字显示出来.
10、n(2)修改模块名n用鼠标左键单击模块名的区域,这时会在此处出现编辑状态的光标,在这种状态下能够对模块名随意修改。n模块名和模块图标中的字体也可以更改,方法是选定模块,在Format下选取Font,这时会弹出对话框,选取想要的字体。(3)改变模块名的位置n模块名的位置,一般当模块的接口在左右两侧时,模块名只能位于模块的上下两侧,缺省在下侧:当模块的接口在上下两侧时,模块名只能位于模块的左右两侧,缺省在左侧。n因此模块名只能移动到相对位置。可以用鼠标拖动模块名到其相对的位置;也可以选定模块,用菜单Format下的Flip Name实现相同的移动。7 7、模块的连接、模块的连接介绍了对模块本身的各
11、种操作。我们还需要把它们按一定的顺序连接起来才能组成一个完整的系统模型。(1)连接两个模块n从一个模块的输出端到另一个模块的输入端。方法是移动鼠标到输出端,鼠标的箭头会变成十字形光标,点住鼠标左键,移动鼠标到另一模块的输入端,当十字光标出现“重影”时,释放左键就完成了连接。n如果两个模块不在同一水平线上,连线是一条折线。要用斜线表示,需要在连接时按住Shift键。两模块不在同一水平线上(2)在连线之间插入模块n把该模块用鼠标拖到连线上,然后释放鼠标即可。(3)连线的分支n一个信号输送到不同的模块,这时需要分支结构的连线。如图,要把正弦波信号实时显示出来,同时还要存到文件。步骤是:在先连好一条线
12、以后,把鼠标移到支线的起点位置,先按下左键,然后按住Ctrl鼠标拖到目标模块的输入端,释放鼠标和Ctrl键。图 连线的分支 8 8、在连线上反映信息、在连线上反映信息n(1)用粗线表示向量n为了能比较直观地区别各个模块之间传输的数据是数据还是矩阵(向量),可以选择模型文件菜单Format下的Wide vector Lines选项,这样传输向量的连线就会变粗。如果再选择Format 下的Vector Lines Widths选项,在传输矩阵的连线上方会显示出通过该连线的矩阵维数。如图7.3.12,模块State Space的输入为二维矩阵,在加粗的输入输出线的上方分别标出了相应矩阵的维数。图7.
13、3.12 用粗线表示向量 n(2)(2)显示数据类型显示数据类型n 在连线上可以显示一个模块输出的数据类型:选择菜单Format下的Port Data Types选项。结果如图所示。图 在连线上显示数据类型(3)信号标记为了使模型更加直观、可读性更强,我们可以为传输的信号作标记。建立信号标记的办法是:双击要做标记的线段,出现一个小文本编辑框,在里面输入标记的文本,这样就建立了一个信号标记。信号标记可以随信号的传输从一些模块中进行传递。支持这种传递的模块有Mux、Demux、Inport、From、Selector、Subsystem和Enable。n仿真步骤:仿真步骤:*选中相关模块并拖到仿真
14、平台 *进行系统连线 *各模块参数设置 *仿真参数设置,仿真开始R(s)C(s C(s)若输入为阶跃响应,用SIMULINK画仿真图,求系统的稳态误差及稳态值线性连续系统仿真模型例:输入模块:sources/step 输出模块:sinks/scope连续性模块:continuous/transfer fcnMath模块:math/sum math/gain非线性系统仿真模型例:P165 例5-1已知某非线性控制系统的控制框图如图所示,其中控制器为PI控制器,饱和非线性模块中饱和上、下界=2,死区非线性模块的死区起止值=0.1,求仿真系统的单位阶跃输出曲线.仿真框图如下:从图中看到,跟踪速度较慢
15、,如果改变Ki=10,仿真结果5s+6s +3s+72Transfer Fcn13s+10sTransfer FcnStepScopeSaturationDead Zone Simulink:Continuous/Transfer Fcn:传函模块 Math/Sum:相加点 Sink/Scope 显示模块、示波器 Sources/Step 单位阶跃输入信号 Math/slider gain 滑杆增益模块采样系统仿真模型例:已知伺服控制中采样系统的控制框图如图所示,求仿真系统的单位阶跃输出曲线.仿真框图如下:1Out1Zero-OrderHold16s +2s2Transfer FcnStepS
16、cope1.003Display Simulink:Continuous/Transfer Fcn:传函模块 Math/Sum:相加点 Sink/Scope 显示模块、示波器 Sources/Step 单位阶跃输入信号 Discrete/Zero-Order-Hold(离散)零阶保持器 Signals&Systems/out1(信号和系统)输出信号输出稳态值:1.003采样系统仿真模型 调用t,x,y=sim(模型名,仿真时间)进行仿真分析。例:P173 例5-4 其中,控制器模型是离散模型,采样周期T=0.2,ZOH为零阶保持器,受控对象为连续模型仿真框图如下:a=0.1;t=0.2;z1=
17、exp(-0.1*t);p1=exp(-t);k=(1-p1)/(1-z1);t,x,y=sim(a,50)plot(t,y)Simulink:Sources/Step 单位阶跃输入信号 Continuous/Transfer Fcn:传函模块 Math/Sum:相加点 Discrete/Zero-Order-Hold(离散)零阶保持器 Signals&Systems/out1(信号和系统)输出信号 Discrete/Discrete Zero-Pole(离散)零极点模型采样系统仿真模型例:P177 例5-6 多采样速率系统的仿真 双环电机控制系统中,内环为电流环,采样周期T1=0.001s,
18、控制器模型为D1=(0.0967z-0.0965)/(z-1),控制器外环的采样周期为T2=0.01s,控制器模型为D2=(5.2812z-5.2725)/(z-1)5.5.3 3 非线性系统分析非线性系统分析与仿真与仿真第第5 5章章 饱和非线性环节饱和环节在控制系统中较普遍,例如饱和放大器、限幅装置、伺服阀饱和特性等。饱和环节特性如图所示。对应表达式:图标为:死区非线性环节死区环节在控制系统中较普遍,死区特性图如图:对应表达式:图标为:单值非线性环节单值非线性模块可由一维查表模块构造出来。simulink/lookup tables/lookup table一维查表模块查表模块设置参数:x
19、=-2-1-1 2 2 3,y=-1-1 0 0 1 1 多值非线性环节Memory模块,记忆前一个计算步长上的信号值。逻辑变量,在上升时输出的值为1,下降时值为0.可控制开关模块。开关模块阀值(threshold)为0.5,当输入信号为上升时由开关上的通路计算输出,下降同理。下降设置x1=-4-3-2 1 2 3,y1=-1-1 0 0 1 1上升设置x2=-3-2-1 2 3 4,y2=-1-1 0 0 1 15.5.4 4 子系统与模块封装技术子系统与模块封装技术第第5 5章章随着模型越来越复杂,用这些基本操作创建的Simulink模变得越来越庞大而难于读懂。在接下来的章节中,将介绍一系
20、列的Simulink特殊处理技术来使得模型变得更加简捷易懂易用。本节先介绍一种类似于程序设计语言中的子程序的处理方法Simulink子系统,然后讲解一种更加好用的封装子系统技术。子模块的作用:1)将复杂的模型转变成结构明了的系统2)把反复使用的模块组压缩成子系统后重复使用。子模块建立的方法:1)对已存在的模型的某些部分或全部使用菜单命令【Edit/Create Subsystem】进行压缩转化,使之成为子系统;2)使用port&subsystems模块库中的Subsystem模块直接创建子系统。1、压缩子系统把已经存在的Simulink模型中的某个部分或全部压缩成子系统的操作如下:步骤一:首先
21、使用范围框将要压缩成子系统的部分选中,包括模块和信号线,如图所示。图 选中要压缩的模块注意:在这种情况下只能用范围框,而不能用Shift逐个选定。为了能使范围框框住所有需要的模块,重新安排模块的位置常常是必要的。步骤二:在模块窗口菜单选项中选择【EditCreat Subsystem】,Simulink将会用一个子系统模块代替被选中的模块组,如图所示。图 压缩后的模型图 步骤三:子系统模块将有一个默认输入端口和输出端口。输入端口和输出端口的默认名分别为In1和Out1。调整子系统和模型窗口的大小使之美观,如图所示。图 压缩后的模型图 若想查看子系统内容或对子系统进行再编辑,可以双击子系统模块,
22、则会出现一个显示子系统内容的新窗口。在窗口内,除了原始的模块外,Simulink自动添加了输入模块和输出模块,分别代表子系统的输入端口和输出端口。改变它们的标签会使子系统的输入输出端口的标签也随着变化。特别注意:菜单命令【Edit/Creat Subsystem】没有相反的操作命令。也就是说一旦将一组模块压缩成子系统,就没有直接还原的处理方法了(UNDO除外)。因此一个理想的处理方法是在压缩子系统之前先把模型保存一下,作为备份。2、子系统模块在创建模型的时候,如果需要一个子系统,也可以直接在子系统窗口中创建。这样就省去了上面的压缩子系统和重新安排窗口的步骤。子系统的封装封装技术是将Simuli
23、nk子系统“包装”成一个模块,并可以如同使用Simulink内部模块一样使用的技术。每个封装模块都可以有一个自定义的图标用来设定参数的对话框,参数设定方法也与Simulink模块库中的内部模块完全相同。双击子模块可以打开该模块属性的对话框。与封装前需打开每个模块去修改参数不同,这里可以直接在此对话框中输入参数。对话框的结构与形式都和“原装”的模型毫无两样。创建一个封装模块的主要步骤分为三步:创建一个子系统;选中子系统,选择模型窗口菜单中的【EditMask subsystem】选项生成封装模块;使用封装编辑器设置封装文本、对话框和图标。一、子系统到封装模块的转换当按照上节中介绍的方法创建子系统
24、模块之后,将其复制到一个新的窗口中。选中此模块,在窗口的菜单中执行【EditMask subsystem】指令,弹出如图所示的一个封装编辑对话框。该对话框有三个选项卡。下面分别讨论这三个选项卡的功能和使用。图 封装编辑对话框(1)图标页 Icon编辑器的图标页如上图所示,它是用来给封装模块设计自定义图标的。其中【Drawing commands】区是以MATLAB语句来绘制图标的编辑区。其余的4个区是用来指定图标的属性,理解了图标的这些属性再来分析图标的绘制命令是很容易的。Drawing commands编辑框允许给模块图标绘制图形,如用 plot()函数画出线状的图形,disp()函数在图标
25、上写字符串名,image()函数来绘制图像。Icon frame:为图标框选项,由一个下拉菜单组成,分别有可见、不可见选项。所谓的图标框即图标的边界线。Icon transparency:为图标的透明度选项,也是由一个下拉菜单组成,有两个选项,透明和不透明。Icon rotation:为图标旋转选项,其下拉菜单选项为固定和旋转。这个选项决定了当执行【FormatFlip block】或【FormalRotate Block】指令时的图标形状。Drawing cooedenates:图形坐标区,用来设置绘图的比例。它有三个选项:Pixed:用来设置绘图系为绝对坐标系,其效果为当模块图调整大小时,
26、图标不随其大小的改变而改变。此参数下的坐标系应为象素点坐标,图标的左下角为坐标系的原点。Autoscale:该选项使得图标图形恰好充满整个模块。Normalized:该选项是设置绘图比例在0和1之间的选项。图标的左下角的坐标定义为(0,0),模块的右上角坐标定义为(1,1)。当模块调整大小的时候,坐标系同样被调整。如,在drawing commands编辑框中输入plot(cos(0:.1:2*pi),sin(0:.1:2*pi),在画出圆的基础上,再添加disp(PIDnController)(其中n表示换行)(2)设置参数页 parameters用来设置封装模块参数项,能够建立起封装模块内
27、部变量和封装对话框之间的联系,如图所示。第一个图标,表示添加参数其中,prompt(提示)栏填写该变量的提示信息,在variable(变量)栏中填写关联的变量名,注意该变量名必须和框图中完全一致。Type(类型)中默认的为edit,编辑框接受数据,popup为列表框需输入几个可选的数值。第二个图标,表示删除参数第三、四个图标,表示向上向下调整参数位置(3)初始化页 Initialization选择Initialization标签对模块进行初始化处理(4)文本页 Documentation编辑器的文本页可对模块进行说明。二、查看封装和解封装对于一个已封装的子系统要想查看其封装前子系统的具体内容,
28、可以选着菜单命令【EditLook Under mask】。若要对已经封装的模块进行解封装操作,要先选中此模块,打开封装编辑器,按下Unmask按钮,则封装就被解开。若要再次封装此子系统,选着【EditMask subsystem】即可。封装子系统与非封装子系统的一个重要的区别在于模块对话框中变量的作用范围。非封装子系统模块中的变量可以直接在MATLAB工作间中赋值。而封装子系统的模块则不能。封装子系统有一个独立于MATLAB工作间及其它子系统的内部存储空间、这个特点可以防止模块变量与其它工作空间中无关变量的冲突。因此,在封装模块中用到的变量要在封装编辑器对话区或初始命令区中设置。单击此处添加段落文字内容本章小结单击此处添加段落文字内容熟悉熟悉MATLABMATLAB环境环境P4 P4 例例1-11-1P11 P11 习题习题3 3、5 5课堂练习