第7章:动态系统Simulink建模与仿真_第1页
第7章:动态系统Simulink建模与仿真_第2页
第7章:动态系统Simulink建模与仿真_第3页
第7章:动态系统Simulink建模与仿真_第4页
第7章:动态系统Simulink建模与仿真_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,第7章:动态系统Simulink建模与仿真,本章内容:Simulink工具箱简介Simulink建模与仿真基本方法动态系统Simulink仿真模型的建立Simulink子系统技术S-函数与Simulink仿真*模糊逻辑工具箱简介,.,7.1Simulink工具箱简介,7.1.1Simulink工具箱简介Simulink是Simulation(仿真)与link(连接)的简写形式,它提供一个动态系统建模、仿真和综合分析的集成环境,是MATLAB最重要的组件之一,也是其它仿真工具箱的可视化仿真平台。优点:建模方便灵活,适用面广,结构和流程清晰,效率高等。,.,1Simulink启动(1)在MATLAB命令窗口输入“simulink”命令。(2)单击MATLAB主窗口左下角的“Start”按钮,在弹出的快捷菜单中单击【Simulink】【LibraryBrowser】命令。(3)单击MATLAB主窗口工具栏里的工具。,7.1.2Simulink组成,图7-1Simulink窗口界面,.,CommonlyUsedBlocks(常用模块库)Continuous(连续系统模块库)Discontinuous(非连续系统模块库)Discrete(离散系统模块库)LogicandBitOperations(逻辑与位操作模块库)LookupTables(查询表模块库)MathOperations(数学操作模块库)ModelVerification(模型验证模块库),2Simulink模块库组件,Simulink7.1模块库共包含16个子模块库,它们是:,.,Model-WideUtility,Portscase1,sys=mdlDerivatives(t,x,u);case2,sys=mdlUpdate(t,x,u);case3,sys=mdlOutputs(t,x,u);case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,sys=mdlTerminate(t,x,u);otherwiseDAStudio.error(Simulink:blocks:unhandledFlag,num2str(flag);end,functionsys,x0,str,ts=mdlInitializeSizessizes=simsizes;sizes.NumContStates=0;sizes.NumDiscStates=0;sizes.NumOutputs=0;sizes.NumInputs=0;sizes.DirFeedthrough=1;sizes.NumSampleTimes=1;定义采用周期的个数sys=simsizes(sizes);x0=;str=;ts=00;functionsys=mdlDerivatives(t,x,u)sys=;functionsys=mdlUpdate(t,x,u)sys=;functionsys=mdlOutputs(t,x,u)sys=;functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;sys=t+sampleTime;functionsys=mdlTerminate(t,x,u)sys=;,ts是一个12的向量,ts(1)定义采样周期,ts(2)是偏移量。当ts(1)=0表示系统为连续系统,当ts(1)=-2表示系统采样时间由flag4的mdlGetTimeOfNextVarHit函数决定。,输入变量中,t是采样时间,x是状态变量,u是输入变量(从Simulink输入来的变量信息,当有多个输入时,u为一个行向量,flag是仿真过程中的状态标志或称之为控制变量,由它来判断当前将要调用的回调函数;输出变量sys根据flag的不同而返回不同的内容。),.,在本例题中,为了完成设定的函数功能y=3*u+2,可将上述S-函数的模板进行如下修改(这里只列出需要修改的部分):首先将S函数文件首行修改为:functionsys,x0,str,ts=Mysfun(t,x,u,flag),并将文件另存为Mysfun。其次,找到functionsys,x0,str,ts=mdlInitializeSizes,作如下修改:sizes.NumOutputs=1;sizes.NumInputs=1;然后,再找到functionsys=mdlOutputs(t,x,u),作如下修改:sys=3*u+2;最后,将该文件保存到当前目录下的Mysfun.m文件中。,.,(3)双击仿真模型中的S-function模块打开参数设置对话框,并修改S-function的名称为“Mysfun”。(4)修改仿真参数,完成仿真。这里仿真求解器参数取系统默认值,运行仿真,可得如图所示仿真结果。,.,【例】已知某系统状态方程为:,试用S-函数建立其仿真模型,并求其单位阶跃响应曲线。,解:首先打开S-函数模板文件。打开S-函数模板文件除了按照上述介绍的方法,也可以在CommandWindows中输入命令:opensfuntmpl或者editsfuntmpl执行命令后系统弹出M文件的S-函数编辑窗口。实现上述系统的S-函数程序代码如下所示:,.,functionsys,x0,str,ts=Mysfun01(t,x,u,flag)switchflag,case0,%初始化%sys,x0,str,ts=mdlInitializeSizes;case1,%求导数sys=mdlDerivatives(t,x,u);case2,%状态更新%sys=mdlUpdate(t,x,u);case3,%计算输出%sys=mdlOutputs(t,x,u);%计算下一个采样时刻%case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,%结束处理%sys=mdlTerminate(t,x,u);otherwise%错误处理%DAStudio.error(Simulink:blocks:unhandledFlag,num2str(flag);end,functionsys,x0,str,ts=mdlInitializeSizessizes=simsizes;sizes.NumContStates=3;%系统有三个连续状态变量sizes.NumDiscStates=0;sizes.NumOutputs=1;%系统有一个输出变量sizes.NumInputs=1;%系统有一个输入变量sizes.DirFeedthrough=0;%系统不存在直通环节sizes.NumSampleTimes=1;%只有一种采样时间sys=simsizes(sizes);x0=0;0;0;%str=;ts=00;functionsys=mdlDerivatives(t,x,u)x(1)=-1*x(1)+3*u;x(2)=-2*x(2)-22*u;x(3)=-3*x(3)+20*u;sys=x;,.,functionsys=mdlUpdate(t,x,u)sys=;functionsys=mdlOutputs(t,x,u)sys=-x(1)-x(2)-x(3);functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;%设置采样周期sys=t+sampleTime;functionsys=mdlTerminate(t,x,u)sys=;,将上述S-函数在当前目录下保存为M文件Mysfun01,再建立Simulink仿真模型如图所示,并设置S-function模块的参数为S-functionname,仿真参数取默认值,运行仿真可得仿真结果如图所示。,.,7.5.4添加用户参数的S-函数,当S-函数需要添加用户参数时,要注意两点。第一,在S-函数源代码中,用到该参数的各个子函数,在函数声明部分均应添加该参数,第二,在Simulink模型中设置“S-function”模块参数时,参数的名称和顺序必须与S-函数源代码中的参数名称和顺序完全一致。下面以建立一个三角波函数发生器为例来说明带参数项的S-函数的建立与使用。,【例】试建立Simulink下三角波函数发生器,且三角波频率幅值可调。解:首先编写生成三角波S-函数的M文件,打开M文件模板程序,做如下所改:,.,functionsys,x0,str,ts=sanjiaobo(t,x,u,flag,A,Freq)%输入参数A为三角波幅值,Freq为三角波频率switchflag,case0,sys,x0,str,ts=mdlInitializeSizes;case1,sys=mdlDerivatives(t,x,u);case2,sys=mdlUpdate(t,x,u);case3,sys=mdlOutputs(t,x,u,A,Freq);%注意在输出函数部分用到附加参数case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,sys=mdlTerminate(t,x,u);otherwiseerror(Unhandledflag=,num2str(flag);end,.,functionsys,x0,str,ts=mdlInitializeSizessizes=simsizes;sizes.NumContStates=0;sizes.NumDiscStates=0;sizes.NumOutputs=1;sizes.NumInputs=1;sizes.DirFeedthrough=1;sizes.NumSampleTimes=1;%只有一种采样时间sys=simsizes(sizes);x0=;str=;%initializethearrayofsampletimests=00;functionsys=mdlDerivatives(t,x,u)sys=;functionsys=mdlUpdate(t,x,u)sys=;,functionsys=mdlOutputs(t,x,u,A,Freq)T=1/Freq;%求三角波周期m=rem(u,T);%u为外部输入时间信息,rem为求余函数K=floor(u/T);%floor为向零取整r=4*A*Freq;c=T/2;if(m=0)%仿真结束,.,将上述M文件的S函数在当前目录下保存为sanjiaobo.m文件,建立Simulink仿真模型如图(a)所示。双击“S-function”模块,在弹出的参数设置对话框种,设置“S-functionname”为“saniaobo”,设置“S-functionParameter”为“1,1500”,如图(b)所示。Simulink求解器参数“Maxstepsize”设置为1e-5,“Stoptime”设置为0.2s,其它取系统默认值。,.,单击Simulink模型窗口工具,运行仿真得如图7-56所示结果(图中显示时间范围为07e-3s)。,.,7.5.5离散系统的S-函数,【例】已知离散PID表达式为:,u(k)=Kp*e(k)+Ki*T*,+Kd*e(k-1)-e(k-2)/T,试使用S-函数实现离散PID控制器,并建立Simulink仿真模型。,解:首先打开S-函数M-文件的模板程序,建立离散PID的S-函数源文件。结果如下:,.,functionsys,x0,str,ts=sfuntmpl(t,x,u,flag,Kp,Ki,Kd)switchflag,case0,sys,x0,str,ts=mdlInitializeSizes;case1,sys=mdlDerivatives(t,x,u);case2,sys=mdlUpdate(t,x,u,Kp,Ki,Kd);case3,sys=mdlOutputs(t,x,u);case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,sys=mdlTerminate(t,x,u);otherwiseDAStudio.error(Simulink:blocks:unhandledFlag,num2str(flag);end%endsfuntmpl,.,functionsys,x0,str,ts=mdlInitializeSizessizes=simsizes;sizes.NumContStates=0;sizes.NumDiscStates=4;sizes.NumOutputs=1;sizes.NumInputs=1;sizes.DirFeedthrough=0;sizes.NumSampleTimes=1;%只有一种采样时间sys=simsizes(sizes);x0=0;0;0;0;%在此定义系统状态变量的初始值str=;ts=-20;%ts(1)=-2,表示采样时间由flag4,mdlGetTimeOfNextVarHit(t,x,u)决定下一个采样时刻。,functionsys=mdlDerivatives(t,x,u)sys=;functionsys=mdlUpdate(t,x,u)x(3)=x(2);x(2)=x(1);x(1)=u;x(4)=u+x(4);sys=x;functionsys=mdlOutputs(t,x,u,Kp,Ki,Kd)sys=Kp*x(1)+Ki*0.01*x(4)+Kd*(x(2)-x(3)/0.01;functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=0.01;%设置采样周期sys=t+sampleTime;functionsys=mdlTerminate(t,x,u)sys=;,.,将上述M文件在当前目录下保存为“dPID.m”。建立simulink仿真模型如图所示。双击“S-function”模块,弹出其参数设置对话框,设置“S-functionname”为“dPID”,设置“S-functionParameters”为“6.0,5.0,0.5”。Simulink仿真参数取系统默认值,运行仿真可得如图所示的结果。,.,7.6模糊逻辑工具箱简介,MATLAB提供了建立模糊逻辑推理系统的仿真工具箱FuzzyLogicToolbox,建立模糊逻辑推理系统有两种基本方法,第一种方法是借助模糊推理系统编辑器(FuzzyLogicEditor)的图形界面工具建立模糊逻辑推理系统,第二种方法是利用命令建立模糊逻辑推理系统。第一种方法使用简单、建模方便,适合于初学模糊逻辑控制系统建模与仿真的读者。第二种方法稍难一些,但对深入了解模糊逻辑推理系统的MATLAB仿真知识大有帮助。本课程只讲述第一种建模方法。,.,10.1.1基本模糊推理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论