付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第5章 Simulink在系统仿真中的应用,2,5.1 SIMULINK建模的基础知识,SIMULINK是MATLAB软件的扩展,它是实现动态系统建模和仿真的一个软件包,它与MATLAB语言的主要区别在于,其与用户交互接口是基于Windows的模型化图形输入,其结果是使得用户可以把更多的精力投入到系统模型的构建,而非语言的编程上。 所谓模型化图形输入是指SIMULINK提供了一些按功能分类的基本的系统模块,用户只需要知道这些模块的输入输出及模块的功能,而不必考察模块内部是如何实现的,通过对这些基本模块的调用,再将它们连接起来就可以构成所需要的系统模型(以.mdl文件进行存取),进而进行仿真
2、与分析。,5.1.1 SIMULINK简介,3,1. SIMULINK的启动,在MATLAB命令窗口中输入simulink 结果是在桌面上出现一个称为Simulink Library Browser的窗口,在这个窗口中列出了按功能分类的各种模块的名称。 也可以通过MATLAB主窗口的快捷按钮来打开Simulink Library Browser窗口。,4,5,在MATLAB命令窗口中输入simulink3 结果是在桌面上出现一个用图标形式显示的Library :simulink3的Simulink模块库窗口。 两种模块库窗口界面只是不同的显示形式,用户可以根据各人喜好进行选用,一般说来第二种窗
3、口直观、形象,易于初学者,但使用时会打开太多的子窗口。,6,2. 模型的建立 在MATLAB主窗口File菜单中选择New菜单项下的Model命令,在出现Simulink模块库浏览器的同时,还会出现一个名字为untitled的模型编辑窗口。在启动Simulink模块库浏览器后再单击其工具栏中的Create a new model命令按钮,也会弹出模型编辑窗口。利用模型编辑窗口,可以通过鼠标的拖放操作创建一个模型。 模型创建完成后,从模型编辑窗口的File菜单项中选择Save或Save As命令,可以将模型以模型文件的格式(扩展名为.mdl)存入磁盘。,7,8,9,10,如果要对一个已经存在的模
4、型文件进行编辑修改,需要打开该模型文件,其方法是: 在MATLAB命令窗口直接输入模型文件名(不要加扩展名.mdl)。 在模块库浏览器窗口或模型编辑窗口的File菜单中选择Open命令,然后选择或输入欲编辑模型的名字。 单击模块库浏览器窗口工具栏上的Open a model命令按钮或模型编辑窗口工具栏上的Open model命令按钮。 3Simulink的退出 为了退出Simulink,只要关闭所有模型编辑窗口和Simulink模块库浏览器窗口即可。,11,5.1.2 SIMULINK的模块库介绍,SIMILINK模块库按功能进行分为以下10类常用子库: Continuous(连续模块) Di
5、screte(离散模块) Look-up Tables(查表模块) Math Operations(数学函数模块) Discontinuities(非线性模块) Signal Routing(信号模块) Signal Attributes(信号属性模块) Sinks(接收器模块) Sources(输入源模块) User-defined Functions(用户自定义函数模块),12,13,1、连续系统模块(Continuous) Integrator:输入信号积分器。连续动态系统最常用的元件,该模块将输入端信息信号经过数值积分,在输出端直接反映出来。在将常微分转换为图形表示时也必须使用此模块。
6、 Derivative:数值微分器。该模块的作用是将其输入端的信息经过一价数值微分,在输出端输出出来。在PID校正装置设计过程中,非常方便。,14,State-Space:线性系统的状态方程模型,该元件可将系统的状态空间模型与方框图结合起来,其参数设置格式也是矩阵的形式。 Transfer-Fcn:线性传递函数模型。 Zero-Pole:以零极点表示的传递函数模型。,15,Transport Delay:输入信号延时一个固定的时间再输出。 Variable Transport Delay:输入信号延时一个可变时间再输出。 两个模块的区别在于:前者在模块内部参数中设置延迟时间,而后者将采用输入信
7、号来定义延迟时间。 注:上述模块都是假设初始条件为零的,在Simulink Extras模块组中的Additional Linear模块允许非零初始条件的定义,该模块还提供了PID控制器模块。,16,2、离散模块(Discrete): 主要用于建立离散采样系统的模型。 Discrete-time Integrator:离散时间积分器 Discrete Filter:IIR (Infinite Impulse Response,“无限冲击响应” )与FIR (Finite Impulse Response,“有限冲击响应” )滤波器 Discrete State-Space:离散状态空间系统模型
8、,双击该元件可以设置状态空间描述系数矩阵。 Discrete Transfer-Fcn:离散传递函数模型,双击该元件可以设置传递函数的系数,其格式也是分子、分母多项式形式。 Discrete Zero-Pole:以零极点表示的离散传递函数模型 First-Order Hold:一阶采样保持器,17,Zero-Order Hold:零阶采样保持器 Unit Delay:单位时间延迟模块,其作用是将该单元的输入量延迟一个单位时间再输出。 Memory: 返回上一个时刻的信号值。,注:与连续系统模块组类似,这些模块也都是假设初始条件为零的,对非零初始条件的模块,可以借助Simulink Extras
9、模块组中的Additional Discrete(附近离散)模块。如图5.1所示,图5.1,18,3、 User-defined Functions(用户自定义函数模块组) Fcn (函数计算模块):(用自定义的函数(表达式)进行运算,)可以将输入信号进行指定的函数运算,该模块可以对输入信号实现很复杂的函数运算、插值运算,计算出模块的输出值。 MATLAB函数模块(MATLAB Fcn): (利用matlab的现有函数进行运算)可以将用户自己按照规定模式格式编写的Matlab函数嵌入到Simulink模型中,这样就可以对输入进行运算,计算生成输出信号。 S-函数模块(S-Function):按
10、照Simulink规定的标准,允许用户编写自己的S-函数,可以将MATLAB语句、C/C+语句、Fortran语句或Ada语句等编写的函数在Simulink模块中执行,最后计算出模块的输出值。,19,4、 Math Operations(数学函数模块组) 数学函数模块组实现了各种各样的数学函数模块。 Sum(求和模块):将输入的多路信号进行求和或求差,则可以计算出输出信号。在组建反馈系统框图时必须采用该模块。 Product:乘运算 Dot Product:点乘运算 增益函数(Gain):输出信号等于输入信号乘以增益模块中指定的数值。更一般地说,还有对矩阵进行乘法的矩阵增益模块(Matrix
11、Gain) Math Function:包括指数函数、对数函数、求平方、开根号等常用数学函数,20,Trigonometric Function:三角函数,包括正弦、余弦、正切等 MinMax:最值运算 Abs:取绝对值 Sign:符号函数 Logical Operator:逻辑运算 Relational Operator:关系运算 Complex to Magnitude-Angle:由复数输入转为幅值和相角输出 Magnitude-Angle to Complex:由幅值和相角输入合成复数输出 Complex to Real-Imag:由复数输入转为实部和虚部输出 Real-Imag to
12、 Complex:由实部和虚部输入合成复数输出,21,该模块主要包含常见的分段线性非线性静态模块。 Saturation:饱和非线性输出,让输出超过某一值时能够饱和。 Dead Zone:死区非线性模块 Relay:继电非线性模块,限制输出值在某一范围内变化。 Rate Limiter:变化率限幅器模块 Backlash:磁滞回环模块 Quantizer:量化器模块,5、 Discontinuities(非线性模块组),22,6、Signal Routing(信号通路模块组) Mux:多路开关元件,将多个单一输入转化为一个复合输出。 Demux:多路解耦元件,将单路的输入向量以某种方式解耦后多
13、路输出。 Switch:开关选择,当第二个输入端大于临界值时,输出由第一个输入端而来,否则输出由第三个输入端而来。 Manual Switch:手动选择开关 转移模块Goto和From Select:选路模块 Multiport Switch:多路开关模块,23,7、Sinks(输出模块组) Scope (示波器模块):将输入信号在示波器中显示出来。 X-Y Graph (X-Y示波器):将两路输入信号分别作为示波器的两个坐标轴,将信号的相轨迹显示出来。 To Workspace(工作空间写入模块):将输入信号直接写到MATLAB的工作空间中,该模块默认的写法是结构体型的数据,可以通过设置将之
14、设置成矩阵型的。 To File(.mat)(写文件模块):将输入的信号写到数据文件中。,24,Out1(输出端口模块):用来反映整个系统的输出端子,这样的设置在模型线性化与命令行仿真时是必需的,另外,系统直接仿真时这样的输出将自动在MATLAB工作空间中生成变量。 Terminator:连接到没有连接到的输出端。如果一个模块的输出端子没有接任何其它模块,在Simulink仿真中经常经出错误信息,这样可以将该模块接到该输出端子即可避免错误信息。 Stop Simulation:允许用户在仿真过程中终止仿真进程。,25,8、Sources(输入源模块组) 常数输入模块(Constant):此模块
15、以常数作为输入,可以在很多模型中使用该模块。 时间信号模块(Clock):生成当前仿真时钟,系统仿真时打开该元件即可看到实时的仿真时间,对于定时仿真系统来说,这个功能比较有用。 From Workspace:从MATLAB的工作空间输入。该元件从workspace输入已有的函数作为仿真的激励信号。首先要在MATLAB环境下建立起一个时间向量和相应的函数值向量,然后双击该图标将时间向量和函数值向量名称填入指定的对话框即可。,26,From File(.mat):来自数据文件。 Pulse Generator:脉冲发生器。 Repeating Sequence:周期信号发生器。 Signal Ge
16、nerator:信号发生器,可以产生给定频率和幅值的正弦(sine wave)、方波(square wave)、锯齿波(saw tooth wave)及随意波。 Sine Wave:正弦波信号。 Step:阶跃波信号。 Ramp:斜坡信号。 In1(输入端口模块):用来反映整个系统的输入端子,这样的设置在模型线性化与命令行仿真时是必需的。,27,接地线模块(Ground):一般用于表示零输入模块,如果一个模块的输入端子没有接任何其它模块,在Simulink仿真中经常经出错误信息,这样可以将该模块接入该输入端子即可避免错误信息。 Band-limited White Noise:连续白噪声信号发
17、生器 Signal Builder:允许用户用图形化的方式编辑输入信号。,28,9、 Look-Up Tables(查表模块组): 任意分段线性的非线性环节均可以由查表模块搭建起来,从而可以容易地对非线性控制系统进行仿真分析。 Look-Up Table (一维查表模块):建立输入信号的查询表(线性峰值匹配).给出一组横坐标和纵坐标的参考值,则输入量经过查表和线性插值计算出输出值返回。 Look-Up Table 2-D(二维查表模块):建立两个输入信号的查询表(线性峰值匹配).给出二维平面网络网格上高度值,则输入的两个变量经过查表、插值运算,最后计算出模块的输出值。 Look-Up Tabl
18、e n-D(n维查表模块),29,10、信号属性模块组(Signal Attributes) Data Type Covention(信号类型转换模块) Rate Transition(采样周期转换模块) IC(初始条件设置模块) Width(信号宽度检测模块),30,5.2 SIMULINK建模及仿真,5.2.1 Simulink建模方法简介 1、简单模型的建立 (1)建立模型窗口 (2)将功能模块由模块库窗口复制到模型窗口 (3)对模块进行连接,从而构成需要的系统模型,31,2、模型的特点 在SIMULINK里提供了许多如Scope的接收器模块,这使得用SIMULNK进行仿真具有像做实验一
19、般的图形化显示效果。 SIMULINK的模型具有层次性,通过底层子系统可以构建上层母系统。 SIMULINK提供了对子系统进行封装的功能,用户可以自定义子系统的图标和设置参数对话框。,32,3、构建脉冲输出模型,步骤1: Library窗口中,新建一个New Model文件 步骤2:右击Library窗口中的Sources模块函数库,打开一个名为Source 的窗口,右图所示,其中有一些常用的信号源,如正弦信号、脉冲信号等等。,33,步骤3:将鼠标移到脉冲发生器(Pulse Generator)上,按隹左键不放,将脉冲发生器拖拉到窗体内;放开鼠标左键,就可以将Source窗体内的脉冲发生器控制
20、模块构建在窗口内。 步骤4:采用同样的方法,将Library窗口中的Sinks函数库打开,将函数库中的Scope模块拖拉到窗口中。,34,4、控制模块的连接,先仔细观察这两个模块,在Pulse Generator模块的右侧(前方)有一个方向向外的三角形箭头,我们称之为输出端。在Scope模块的左侧(后方),也有一个方向向内的箭头,我们称之为输入端。将模块连起来,就是将输出输入端连接起来。步骤如下: 步骤1:将鼠标移到对象的输出或输入端,鼠标指针将变为十字状; 步骤2:此时,按住鼠标左健,拖拉到另一对象的输入或输出端,鼠标指针变为十字状。 步骤3:放开鼠左键,完成连结,就会产生连接线,如图。,3
21、5,5、调整控制模块的参数,将鼠标移到窗口内的Pulse Generator模块上,双击鼠标左键,会出现一个调整Pulse Generator参数的Block Parameters窗口。在这个窗口中,我们可以设定Pulse 的相关参数,如下图所示。,36,6、启动模型并观察系统输出 单击工具栏中的 Simulation/ Start 菜单,或 就可以启动对系统的仿真了。 启动后将会在Scope模块中看到输出的波形如下图所示。 这是一个脉冲发生器把信号输出到示波器(Scope)上的模型,方波大小为1KHZ,振幅为1且周期为1秒。我们在Simulink中成功地仿真了这个模型。,37,Simulin
22、k建模实例,由图5.2给出的非线性系统框图,其中控制器为PI控制器,其模型为,饱和非线性中=2,死区非线性的死区宽度为0.1,由于系统中含有非线性环节,所以不能用以前的知识作精确仿真,下面用Simulink来搭建系统的仿真模型。,图5.2,38,步骤1:建立新的模型编辑窗口; 步骤2:将下图所示的元件托入模型编辑窗口;,步骤3:由于许多模块的参数与题目要求不一致,故需修改其参数;,如图5.2所示,将加法器中的list of signs选项改为 |+- 实现负反馈,39,图5.2,40,将传递函数元件的分子和分母作相应修改(多项式系数仍遵循降幂排列);,41,步骤4:将所有元件按框图所示结构连接
23、起来,得图5.3所示框图。 (若需对元件进行翻转,则可右击该元件,选择快捷菜单Format中的Rotate block项。),图5.3,步骤5:仿真,单击启动仿真按钮 或选择simulation/start菜单项。,42,双击示波器元件,可显示图5.4所示仿真结果。,图5.4,43,以上控制器跟踪速度较慢,为改善其性能,将Ki调整为10,则其仿真结果为下图。,另:Simulink还提供了Slider Gain(滑杆增益模块)使参数调节更为容易。,44,5.2.2 仿真算法与控制参数选择 在Simulink模型窗口中,Simulation/Simulation Parameters菜单项,允许用
24、户设置仿真的控制参数。 Start time和Stop time栏,分别允许用户填写仿真的起始时间和结束时间。 Slover options的Type栏允许用户选择定步长和变步长算法。其后面的列表框列出了各种算法,如ode45(Domand-Prince)算法,ode15s(stiff / NDF)算法等。一般情况下,连续系统选变步长算法,离散系统选择定步长算法。 Relative Tolerance(相对误差)和Absolute Tolerance项,控制仿真精度。 Max step size和Min step size项,确定仿真的最大和最小步长。,45,Diagnostics标签下的对话
25、框可设置警告信息。 仿真结束后,Simulink会自动生成一个tout向量,存放各个仿真时刻的时间值,若使用了Outport模块,则其输出信号会自动赋给yout变量,用户可使用plot (tout, yout)命令绘制仿真结果。,46,除了直接在SIMULINK环境下启动仿真外,还可以在MATLAB命令窗口中通过函数进行仿真分析,格式如下: t,x,y=sim(模型文件名,to tf, options) 其中to为仿真起始时间,tf为仿真终止时间。t,x,y为返回值,t为返回的时间向量值,x为返回的状态矩阵,y为返回的输出向量值。 options= simset(参数1,参数值1,参数2,参数
26、值2, ) simset定义了仿真参数,用help simset命令可以显示出所有的控制参数名。如,若想将仿真参数相对误差RelTol的默认值10-3改为10-7,则可使用 options=simset(RelTol, 1e-7),47,5.2.3 Simulink在控制系统仿真中的应用,例5.1 考虑Lorenz方程,其初值为x1(0)=x2(0)=0,x3(0)=10-3。 将上述方程在Simulink中进行仿真,仿真时需对每个微分量引入一个积分器,积分器的输出就是该状态变量,积分器的输入端就是该变量的一阶微分。将三个积分器的初值分别设置为0,0,1e-3。 令仿真时间为30,相对误差为1
27、e-7,启动仿真后,在MATLAB的工作空间返回两个变量tout和yout。,48,其中,tout为时刻,yout为三列矩阵,分别对应三个状态变量x1x3。,由plot绘制各状态变量的时间响应曲线 plot(tout,yout),49,50,例5.2,多变量系统,试分析其用Pade近似方法求得的阶跃响应的精度。,51,g11=tf(0.1134,1.78,4.48,1,ioDelay,0.72); g12=tf(0.924,2.07,1); g21=tf(0.3378,0.361,1.09,1,ioDelay,0.3); g22=tf(-0.318,2.93,1,ioDelay,1.29);
28、G=g11,g12;g21,g22; n1,d1=paderm(0.72,0,2);g11.ioDelay=0;g11=tf(n1,d1)*g11; n1,d1=paderm(0.3,0,2);g21.ioDelay=0;g21=tf(n1,d1)*g21; n1,d1=paderm(1.29,0,2);g22.ioDelay=0;g22=tf(n1,d1)*g22; G1=g11,g12;g21,g22; kp=0.1134,0.924;0.3378,-0.318;G2=ss(G1*kp); y1,x1,t1=step(G2.a,G2.b,G2.c,G2.d,1,15); y2,x2,t2=
29、step(G2.a,G2.b,G2.c,G2.d,2,15); u1=1;u2=0;tt1,x1,yy1=sim(exp53,15); subplot(221),plot(t1,y1(:,1),:,tt1,yy1(:,1) subplot(222),plot(t1,y1(:,2),:,tt1,yy1(:,2),52,实线表示精确的仿真结果,虚线表示近似结果。,53,5.3 非线性系统分析与仿真,这一节中,我们将介绍分段线性的非线性静态环节在Simulink下的表示方法,极限环的精确分析、描述函数法,以及非线性模型线性化方法等。,5.3.1 分段线性的非线性环节 利用Simulink提供的模块可
30、以搭建任意的非线性静态模块。,1. 单值非线性模块 如左图所示的分段函数可以通过Look-Up Table元件实现。即 首先确定非线性特性的转折点(x1,y1), (x2,y2) , (xn,yn);,54,然后在x1点之前,和xn点之后,分别确定x0点和xn+1点,其中x0 xn ; 根据线形确定y0, yn+1的值; 构造向量xx=x0, x1, , xn, xn+1, yy=y0, y1, , yn, yn+1;,双击Look-Up Table元件,将xx和yy分别写入”Vector of input values”和”Vector of output values”栏,如下图所示。,5
31、5,2. 多值非线性模块,图5.5所示的回环模块,当输入增加时走一条折线,减小时走另一条折线,于是可以将这个非线性函数分解成两条单值函数,但必须区分输入信号是上升还是下降。,图5.5,56,其步骤如下: 利用Memory模块和比较符号确定输入信号是上升还是下降; 比较器输出的是一个逻辑量,当上升时输出1,下降时输出值为0; 由该信号控制后面的开关模块,设开关模块的阈值为0.5。当输入信号为上升时,由开关上面的通路计算系统的输出,而下降时由下面的通路计算输出(如下图所示)。,57,两个查表模块的输入和输出分别可设置为: x1=-3,-1 -1+eps,2 2+eps,3,y1=-1,-1,0,0
32、,1,1 x2=-3,-2 -2+eps,1,1+eps,3,y2=-1,-1,0,0,1,1 修改两个查表函数,还可生成不同的回环结构,如 x1=-3,-2 -1,2 3,4,y1=-1,-1,0,0,1,1 x2=-3,-2 -1,1,2,3,y2=-1,-1,0,0,1,1 生成回环如下图所示。,图5.6,58,例5.3 试观察正弦信号经过图5.6所示的非线性环节后的波形。,如上图所示,搭建的非线性系统,正弦波经过变换后为,(其正弦信号的幅值分别为2、4、8。),59,5.3.2 非线性系统的极限环研究,考虑如图5.7所示的系统,其中非线性回环如图5.5,在仿真模型中,将积分器的初始值设
33、置为1,观察系统的输出。,图5.7,60,t,x,y=sim(c5flcyc1,40); plot(t,y) 可以看出,系统的x1和x2信号在初始振荡结束后,表现为等幅振荡运动。,由 plot(y(:,1),y(:,2) 绘制出系统的相平面曲线,可以看出系统的相轨迹最终稳定在一个封闭的曲线上,这一曲线就是极限环,极限环是非线性系统的特有性质。,61,5.3.3 非线性系统的线性化,非线性系统的局部特性,可以通过将某一工作点附近的邻域近似线性化来获得。,1、平衡点的确定 系统状态变量导数为0时, 系统处于平衡点。MATLAB使用trim函数确定平衡点。它的调用格式为: x,u,y,dx=trim
34、(sfun,x0,u0) 其中sfun为模型文件名,x0、u0为数值算法所需要的起始搜索点。MATLAB通过寻优的方式寻找最佳平衡点,因此,多次使用不同的初值寻找平衡点是有必要的。,62,2、模型线性化 函数linmod、dlinmod进行模型的线性化。 a,b,c,d=linmod( 模型名,x0,u0) %连续系统线性化 a,b,c,d=dlinmod( 模型名,x0,u0) %含有离散环节的系统线性化 如:a,b,c,d=linmod(sfun,x0, u0) 注意:1)函数的sfun参数必不可少,它是SIMULINK模型的名字; 2)可使用x0、u0来设定系统的状态和输入工作点,缺省值
35、全为零;,63,3)MATLAB还提供了一个linmod2函数,它比linmod要精确一些,但运行时间更长。 一旦得到了系统状态空间形式描述的模型,就可以进一步的进行系统分析,如画Bode图,做阶跃响应,判断稳定性,还可以进行控制系统设计。,64,例5.4,多变量系统,对其进行线性化。 将其进行线性化前,先将时间延迟进行Pade近似,即在延迟环节处,将Pade order项设置为2(采用2阶Pade近似)。,65,A,B,C,D=linmod(exp512);step(ss(A,B,C,D),66,5.4 子系统与模块封装技术 为简化系统模型,有时需要将一些复杂的系统变换为一些模块的组合。另外
36、,用户会希望自己定义一些模块,来搭建系统。Simulink提供的模块封装技术,可满足这些需要。 5.4.1 子系统概念及构成方法 子系统的内部由用户定义,而输入端用In,输出端采用Out元件。 例5.5 下面是PID控制器的数学模型为,试将其建立为子模块。,67,步骤: 将所有需要的元件托入模型编辑窗口(如图5.8所示); 选中所有元件; 在Edit菜单选择Create Subsystem项,得到子系统框图(如图5.9所示),图5.8,图5.9,68,5.4.2 模块的封装方法 在Simulink环境中,所谓封装(masking),就是将其对应的子系统内部结构隐含起来,以便访问该模块时只出现一
37、个参数设置对话框,将模块中所需要的参数用这个对话框来输入。 封装用户自定义模块的步骤: 选中该子系统模块的图标,然后选择Edit/Mask Subsystem菜单项,则出现模块封装编辑界面(如图5.10); 填写封装参数 1)Icon标签页 此页最重要的部分是Drawing commands,在该区域内可以用disp指令设定功能模块的文字名称,用plot指令画线,用dpoly指令画传递函数。,69,图5.10,70,如在Drawing commands中分别输入plot(cos(0:.1:2*pi),sin(0:.1:2*pi) disp(PIDnController) 则封装模块的图标会显示
38、为入图5.11所示。,图5.11,注意,尽管这些命令在名字上和以前讲的MATLAB函数相同,但它们在功能上却不完全相同,因此不能随便套用以前所讲的格式。,71,disp(text)可以在功能模块上显示设定的文字内容。 disp(text1ntext2)分行显示文字text1和text2 plot(x1 x2 xn,y1 y2 yn)指令会在功能模块上画出由x1 y1经x2 y2经x3 y3 直到xn,yn为止的直线。功能模块的左下角会根据目前的坐标刻度被正规化为0,0,右上角则会依据目前的坐标刻度被正规化为1,1。 dpoly(num,den):按s次数的降幂排序,在功能模块上显示连续的传递函
39、数。 dpoly(num,den,z):按z次数的降幂排序,在功能模块上显示离散的传递函数。 用户还可以设置一些参数来控制图标的属性。 Frame:Visible 显示外框线;Invisible:隐藏外框线。 Transparency:Opaque 隐藏输入输出的标签; Transparent:显示输入输出的标签。,72,Rotation:旋转模块,Rotates选项在旋转模块时,同时旋转模块的图标。 2)Parameters标签页 在prompt编辑框中输入变量的含义,其内容会显示在输入提示中。在variable列表中输入变量名称,则prompt中的文字对应该变量的说明。而variable是
40、仿真要用到的变量,该变量的值一直存于mask workspace中。如果要增加新的项目,可以点击边上的 键。Up和Down按钮用于执行项目间的位置调整。 注意: variable变量名必须与框图中的完全一致。 type列表给用户提供选择设计的编辑区,选择Edit会出现供输入的空白区域,所输入的值代表对应的variable;Popup则为用户提供可选择的列表框,所选的值代表variable,此时在下面会出现Popup输入框,用来设计选择,73,74,的内容,各值之间用逻辑或符号“|”隔开;如选择Checkbox则用于on与off的选择设定。 3)Initialization标签页 Initial
41、ization标签页对模块进行初始化处理 4)Documentation标签页 此页主要用来针对完成的功能模块来编写相应的说明文字和Help。 在Mask description中输入的文字,会出现在参数窗口的说明部分。 在Mask help中输入的文字则会显示在单击参数窗口中的help按钮后浏览器所加载的HTML文件中。 Mask type:在此处输入的文字作为封装模块的标注性说明,在模型窗口下,将鼠标指向模块,则会显示该文字。当然必须先在View菜单中选择Block Data Tips。,75,例5.6 例5.3所示系统将其进行封装。 封装前先将两路非线性查表模块的参数分别设置为(xu,
42、yu)和(xd, yd)。 选中所有元件, 单击Create Subsystem菜单项,得到子系统框图。,选中子系统框图,单击Edit/Mask Subsystem菜单项,并设置子系统参数(如图5.12、5.13、5.14所示)。,图5.12,76,图5.13,77,图5.14,模块封装完后,可在模块的输入和输出端分别接正弦信号和示波器,检验模块效果。,78,5.5 s-函数及其应用,5.5.2 s-function的基本结构 s-function是一个动态系统的计算机语言描述,在MATLAB里,用户可以选择用m文件编写,也可以用c或Fortran语言编写,在这里只给大家介绍如何用m文件编写s
43、-function。 S-function提供了扩展Simulink模块库的有力工具,它采用一种特定的调用语法,使函数和Simulink解法器进行交互。,Simulink为用户提供了许多内置的基本库模块,通过这些模块进行连接而构成系统的模型。对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块,但它依然是基于Simulink原来提供的内置模块。 而Simulink s-function是一种强大的对模块库进行扩展的新工具,其用途是定制用户自己的Simulink模块。,79,二、建立m文件s-function 1、使用模板文件:sfunmen.m 该模板文件位于MATLAB根目录下to
44、olbox/simulink/blocks目录下。 模板文件里s-function的结构十分简单,它只为不同的flag的值指定要相应调用的m文件子函数。比如当flag=3时,即模块处于计算输出这个仿真阶段时,相应调用的子函数为sys=mdloutputs(t,x,u)。,80,模板文件使用switch语句来完成这种指定,当然这种结构并不唯一,用户也可以使用if语句来完成同样的功能。而且在实际运用时,可以根据实际需要来去掉某些值,因为并不是每个模块都需要经过所有的子函数调用。 模板文件只是Simulink为方便用户而提供的一种参考格式,并不是编写s-function的语法要求,用户完全可以改变子
45、函数的名称,或者直接把代码写在主函数里,但使用模板文件的好处是,比较方便,而且条理清晰。,81,function sys,x0,str,ts = sfunmem(t,x,u,flag) switch flag case 0, sys,x0,str,ts = mdlInitializeSizes; case 2, sys = mdlUpdate(t,x,u); case 3, sys = mdlOutputs(t,x,u); case 9, sys = ; % do nothing otherwise, error(unhandled flag = ,num2str(flag); end,82,
46、使用模板编写s-function,用户只需把s-函数名换成期望的函数名称,如果需要额外的输入参量,还需在输入参数列表的后面增加这些参数,因为前面的4个参数是simulink调用s-function时自动传入的。对于输出参数,最好不做修改。接下去的工作就是根据所编s-function要完成的任务,用相应的代码去替代模板里各个子函数的代码即可。,83,Simulink在每个仿真阶段都会对s-function进行调用,在调用时,Simulink会根据所处的仿真阶段为flag传入不同的值,而且还会为sys这个返回参数指定不同的角色,也就是说尽管是相同的sys变量,但在不同的仿真阶段其意义却不相同,这种
47、变化由simulink自动完成。,84,m文件s-function可用的子函数说明如下: mdlInitializeSizes:定义s-function模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。 mdlDerivatives:计算连续状态变量的更新,状态变量由sys变量返回。 mdlUpdate:计算离散状态变量的更新。,85,mdlOutputs:计算s-function的输出信号。 mdlGetTimeOfNextVarHit:计算下一个采样点的绝对时间,这个方法仅用于用户在mdlInitializeSizes 里说明了一个可变的离散采样时间。 mdlTer
48、minate:实现仿真任务结束,这一过程不返回任何变量。,86,2、定义s-function的初始信息 为了让Simulink识别出一个m文件s-function,用户必须在s-函数里提供有关s-函数的说明信息,包括采样时间、连续或者离散状态个数等初始条件。这一部分主要是在mdlInitializeSizes子函数里完成。 Sizes数组是s-function函数信息的载体,它内部的字段意义为: NumContStates:连续状态的个数(状态向量连续部分的宽度);,87,NumDiscStates:离散状态的个数(状态向量离散部分的宽度); NumOutputs和NumInputs : 分别
49、是输出和输入变量的个数(输出/输入向量的宽度); DirFeedthrough:输入信号是否直接在输出端出现的标识,它的取值只有0和1两种,0表示没有直接馈入,此时用户在编写mdlOutputs子函数时就要确保子函数的代码里不出现输入变量u;1表示有直接馈入; NumSampleTimes:采样时间的个数,也就是ts变量的行数,与用户对ts的定义有关。,88,另外: 如果字段代表的向量宽度为动态可变,则可以将它们赋值为1。 需要指出的是,由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块将多个单一输入合成一个复合输入向量或将一个复合输出向
50、量分解为多个单一输出。,89,3、输入和输出参量说明 S-function默认的4个输入参数为t、x、u和flag,它们的次序不能变动,代表的意义分别为: t:代表当前的仿真时间,这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。 x: 表示状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。 u:表示输入向量。 flag:是一个控制在每一个仿真阶段调用哪一个子函数的参数,由Simulink在调用时自动取值。,90,S-function默认的4个返回参数为sys、x0、str和ts,它们的次序不能变动,
51、代表的意义分别为: sys:是一个通用的返回参数,它所返回值的意义取决于flag的值。 x0: 是初始的状态值(没有状态时是一个空矩阵),这个返回参数只在flag值为0时才有效,其他时候都会被忽略。 str:这个参数没有什么意义,是MathWorks公司为将来的应用保留的,m文件s-function必须把它设为空矩阵。 ts:是一个m2的矩阵,它的两列分别表示采样时间间隔和偏移。,91,5.5.2 用MATLAB编写S-函数举例,例5.6 微分-跟踪器的离散形式为,其中,T为采样周期,u(k)为第k时刻的输入信号,r为决定跟踪快慢的参数,而h为输入信号被噪声污染时,决定滤波效果的参数。Fst函数可以由下列公式计算,92,function sys,x0,str,ts = han_td(t,x,u,flag,r,h,T) switch flag case 0, sys,x0,str,ts = mdlInitializeSizes(T); case 2, sys = mdlUpdate(x,u,r,h,T); cas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西南宁市良庆区住房和城乡建设局招聘1人笔试备考试题及答案详解
- 2026年贵州省仁怀市高一数学下册期末考试模拟试卷附完整答案(各地真题)
- 2026年山东省青州市高一数学下册期末考试模拟卷附答案(轻巧夺冠)
- 2026年广东省吴川市高一数学下册期末考试模拟卷含答案(模拟题)
- 2026年湖北省赤壁市高一数学下册期末考试模拟测试卷【典型题】附答案
- 2026年云南省瑞丽市高一数学下册期末考试模拟卷及答案【有一套】
- 别墅建筑结构课程设计
- 爬虫数据加密实现课程设计
- TLS缓存优化实验设计课程设计
- 2026年一级建造师建设工程项目管理试题及答案
- 六升七 英语综合能力提升课|备战初中入学考试
- 成华区猛追湾街道办事处2026年面向社会公开招聘社区工作人员(4人)笔试备考题库及答案详解
- 初中八年级道德与法治《担当复兴重任:劳动·实干·在场》项目化跨学科教学设计
- 河南省乡村振兴村级协理员专项计划笔试真题2025
- GB/T 34010-2026建筑物气密性测定方法风扇压力法
- (完整)2026年全国高校辅导员素质能力大赛基础知识试题+参考答案
- 人力国企笔试题及答案
- 2026-2030中国间苯二甲酰氯(ICL)(CAS-99-63-8)行业市场发展趋势与前景展望战略分析研究报告
- 2026年7月自考06049心理学导论押题及答案
- 2026年C1驾照科目一考试试题及详细答案解析
- 汽车维修汽车故障诊断手册
评论
0/150
提交评论