您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第9章MATLAB环境下的仿真.
第9章MATLAB环境下的仿真软件Simulink9.1Simulink的基本操作9.2Simulink的几类基本模块9.3仿真模型参数的设置9.4子系统的建立与封装9.5在命令窗口中创建模型9.6S-函数的设计和应用9.7仿真系统的线性化分析9.1Simulink的基本操作9.1.1Simulink的启动与退出1.Simulink的启动启动Simulink的方法有3种:(1)在MATLAB的命令窗口直接键入simulink。(2)单击MATLAB命令窗口工具栏上的Simulink模块库浏览器命令按钮。(3)在MATLAB命令窗口File菜单中选择New菜单项下的Model命令。2.Simulink的退出为了退出Simulink,只要关闭所有模型窗口和Simulink模块库窗口即可。9.1.2Simulink模块的操作1.选取模块2.复制与删除模块3.模块的参数和属性设置4.模块外形的调整5.模块名的处理6.模块的连接7.在连线上反映信息。9.2Simulink的几类基本模块9.3仿真模型参数的设置9.3.1通过菜单命令设置仿真模型参数选择模型窗口Simulation菜单中的Parameter命令,将出现仿真参数对话框。对话框分四个选项卡:Solver(算法)、WorkspaceI/O(工作空间输入输出)、Diagnostics(诊断)和Real-TimeWorkshop(实时工作间)。9.3.2在命令窗口调用函数设置仿真模型参数1.sim函数其调用格式为:[t,x,y]=sim(modname,timespan,options,data);2.simset函数它有如下4种用法:(1)options=simset(property,value,…)(2)options=simset(old_opstruct,property,value,…)(3)options=simset(old_opstruct,new_opstruct)(4)simset例9.1以图9.15所示的仿真模型为例,说明simset函数的用法。(1)在命令窗口输入命令:option=simset('OutputVariables','x','OutputPoints','all','FinalstateName','date');[t,x,y]=sim('mode1',[1,10],option)(2)在命令窗口中输命令:optionl=simset('OutputVariables','xy','OutputPoints','all');[t,x,y]=sim('Simul',[2,4,6,8],option1);3.simget函数该函数有如下3种用法:(1)struct=simget(model)(2)value=simget(model,property)(3)value=simget(Option,Structure,property)4.set_param函数(1)设置仿真参数调用格式为:set_param(mode,property,value,…)(2)控制仿真进程调用格式为:set_param(mode,'SimulationCommand','cmd')例9.2假设从实际应用领域(力学、电学、生态或社会)中,抽象出有初始状态为0的二阶微分方程x+0.2x'+0.4x=0.2u(t),u(t)是单位阶跃函数。用积分器直接构造求解微分方程的模型exm1.mdl。步骤如下:(1)改写微分方程。把原方程改写为:x=0.2u(t)-0.2x'-0.4x(2)利用Simulink模块库中的标准模块构作模型。(3)仿真操作。(4)保存在MATLAB工作空间中的数据。例9.3利用传递函数模块建模。步骤如下:(1)根据系统传递函数构造系统模型(2)仿真操作。例9.4利用状态方程模块建模。(1)利用构造仿真模型(2)仿真9.4子系统的建立与封装9.4.1子系统的建立1.通过Subsystem模块建立子系统操作步骤为:(1)先打开Simulink模块库浏览器,新建一个仿真模型。(2)打开Simulink模块库中的Signals&Systems模块库,复制Subsystem模块到新的模型窗口中。(3)用鼠标左键双击Subsystem模块打开一个空白的Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要复制一个或多个Input和Output模块,表示子系统的输入和输出端口。这样,一个子系统就建好了。2.通过已有的模块建立子系统操作步骤为:(1)先选择要建立子系统的模块,不包括输入端口和输出端口。(2)选择模型窗口Edit菜单中的CreateSubsystem命令,这样,子系统就建好了。在这种情况下,系统会自动把Input模块和Output模块添加到子系统中,并把原来的模块变为子系统的图标。9.4.2子系统的条件执行1.使能子系统建立使能子系统的方法是:打开Simulink模块库中的Signals&Systems模块库,将Enable模块复制到子系统模型中,则系统的图标发生了变化。例9.5利用使能原理构成一个正弦半波整流器。操作步骤如下:(1)打开Simulink模块库浏览器以及新建一个模型窗口。(2)双击空子系统模块Subsystem,打开其结构模型窗。(3)将Simulink浏览库中的In输入口模块、Out输出口模块、Enable使能模块拖至子系统的结构模型窗;把In模块的输出直接送到Out模块的输入端;Enable模块无须进行任何连接,且采用它的缺省设置实现题目所需使能子系统。(4)完成新建模型窗口中各模块间的连接并存盘。(5)双击示波器模块,打开显示窗。然后选择Simulink菜单中的Start命令,就可看到半波整流波形。2.触发子系统触发子系统是指当触发事件发生时开始执行子系统。与使能子系统相类似,触发子系统的建立要把Signals&Systems模块库中的Trigger模块拷贝到子系统中。例9.6利用触发子系统原理将一锯齿波转换成方波。操作步骤如下:(1)用SignalGenerator、Subsystem和Scope模块构成一子系统,双击SignalGenerator模块图标在Wavefrom的下拉列表框中选择sawtooth,即锯齿波。(2)将上例中的Enable模块换成Trigger触发模块。双击该模块并选Triggertype触发事件形式为either,即上跳沿或下跳没触发。(3)完成新建模型窗口中各模块间的连接,并存盘。(4)双击示波器模块,然后选择Simulink菜单中的start命令,就可看到方波。3.使能加触发子系统所谓使能加触发子系统就是把Enable和Tirgger模块都加到子系统中,使能控制信号和触发控制信号共同作用子系统的执行,也就是前两种子系统的综合。该系统的行为方式与触发子系统相似,但只有当使能信号为正时,触发事件才起作用。9.4.3子系统的封装子系统的封装过程很简单:先选中所要封装的子系统,再选择模型窗口Edit菜单中的MaskSubsystem命令,这时将出现MaskEditor对话框。MaskEditor对话框中共包括3个选项卡:Icon、Initialization和Documentation。子系统的封装主要就是对这3页参数进行设置。9.5在命令窗口中创建模型9.5.1构造模型的命令9.5.2设置参数9.6S-函数的设计和应用9.6.1S-函数概述9.6.2用M文件编写S-函数(1)MATLAB5.3为用户提供了一个模板,只要在必要的子程序里编写代码并输入参数就可以了。(2)从Function&Tables子库里把S-Function系统的功能模块复制过来,输入程序的文件名,以供调用。例9.7利用M文件来写一个限幅积分器的S-函数,并借助S-函数模块来调用此文件。限幅积分器的数学模型如下:操作步骤如下:(1)根据数学模型,编写S-函数sfun97.m。function[sys,x0,str,ts]=sfun97(t,x,u,flag,lb,ub,xi)switchflag,case0,[sys,x0,srt,ts]=mdlInitializeSizes(xi);case1,sys=mdlDerivatives(t,x,u,lb,ub);case2,sys=mdlUpdate(t,x,u);case3,sys=mdlOutputs(t,x,u);case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,sys=mdlTerminate(t,x,u);otherwiseerror([‘Unhandledflag=’,num2str(flag)]);endfunction[sys,x0,str,ts]=mdlInitializeSizes(xi)sizes=simsizes;sizes.NumContStates=1;sizes.NumDiscStates=0;sizes.NumOutputs=1;sizes.NumInputs=1;sizes.DirFeedthrough=0;sizes.NumSampleTimes=1;sys=simsizes(sizes);xo=xi;str=[];ts=[0,0];functionsys=mdlDerivatives(t,x,u,lb,ub)if(x=lb&u0)|(x=ub&u0)sys=0;elsesys=u;endfunctionsys=mdIUpdae(t,x,u)sys=[];functionsys=mdIOutputs(t,x,u)sys=x;functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;%Example,setthenexthittobeonesecondlatersys=t+sampleTime;functionsys=mdlTerminate(t,x,u)sys=[];(2)完成S-函数的编写后,接着建立Simulink模型,将功能模块S-function复制到设计区域,打开其参数页,输入S-函数的文件名sfun97.m和S-函数的参数lb、ub、xi。(3)编写主程序。clear;lb=-0.5;ub=0.5;xi=0;sim(‘sfun97’);(4)在命令窗口运行主程序,并双击示波器,即可查看到输入波形及限幅积分的结果。9.7仿真系统的线性化分析9.7.1连续系统的线性化线性化分析函数linmod用来提取非线性系统的近似线性模型,也可以用来获取线性系统的数学模型。linmod函数的调用格式为:[A,B,C,D]=linmod('sys')[A,B,C,D]=linmod('sys',x,u)[A,B,C,D]=linmod('sys',x,u,pert)[A,B,C,D]=linmod('sys',x,u,pert,xpert,upert)9.7.2离散系统的线性化dlinmod能够以任意给定的采样时间对离散系统、多速率系统以及连续和离散混合系统进行线性化。除了第2个选项需要插入采样时间来对系统线性化外,dlinmod的调用格式和linmod是相同的:[A,B,C,D]=dlinmod('sys',Ts,x,u)9.7.4平衡分析在给定输入、输出及状态条件下,Simulink提供的函数trim可以用来确定系统的稳态平衡点。其调用格式为:[x,u,y,dx]=trim('sys')[x,u,y,dx]=trim('sys',x0,u0,y0,ix,iu,iy)其中x,u,y,dx分别代表状态向量、输入向量、输出向量和状态向量的导数。sys是模型名。x0,u0,y0分别为状态向量x、输入向量u和输出向量y的初始猜测值,它们的输入格式必须是列向量形式。ix是向量,它的元素是那些在寻找过程中,要求保持其值固定不变(等于初始猜测值)的那些状态变量的序号。iu、iy与ix类似,分别适用于u和y。
本文标题:第9章MATLAB环境下的仿真.
链接地址:https://www.777doc.com/doc-2113280 .html