第4章SIMULINK仿真SIMULINK是一个进行动态系统建模、仿真和综合分析的集成软件包。它可以处理的系统包括:线性、非线性系统;离散、连续及混合系统;单任务、多任务离散事件系统。4.1SIMULINK入门•4.1.1SIMULINK简介•SIMULINK是Mathworks公司开发的一个具有重要影响力的软件产品。在SIMULINK提供的图形用户界面GUI上,只要进行鼠标的简单拖拉操作就可构造出复杂的仿真模型。它外表以方块图形式呈现,且采用分层结构。•从建模角度讲,这既适于自上而下(Top-down)的设计流程(概念、功能、系统、子系统、直至器件),又适于自下而上(Bottum-up)逆程设计。•从分析研究角度讲,这种SIMULINK模型不仅能让用户知道具体环节的动态细节,而且能让用户清晰地了解各器件、各子系统、各系统间的信息交换,掌握各部分之间的交互影响。1.Simulink的特点•(1)设计简单:系统结构使用方框图绘制,以绘制模型化的图形代替程序输入,以鼠标操作代替编程;•(2)分析直观:用户不需要考虑系统模块内部,只要考虑系统中各模块的输入输出;•(3)仿真快速、准确:智能化地建立各环节的方程,自动地在给定精度要求下以最快速度仿真,还可以交互式地进行仿真。2.Simulink的典型模型结构•Simulink的典型模型结构由3部分组成:输入、状态、输出模块。•3.Simulink的文件•.mdl文件。•4.Simulink的帮助输出(y)状态(x)输入(u)我们可以使用Simulink建立什么模型?答:任何需要数学手段建立的系统。通讯与卫星系统船舶系统电机系统控制系统电子系统航空航天系统金融系统生物系统汽车系统Simulink的应用领域示意图4.1.2SIMULINK的启动和退出•常用启动SIMULINK有以下几种方法:•(1)在MATLAB命令窗口中输入simulink命令,打开Simulink模块库浏览器窗口如图所示,然后再新建一个“untitle”窗口。•(2)在MATLAB指令窗口下单击“newsimulinkmodel”按钮(见如图红色方框),再按新建按钮创建一个“untitle”窗口。•(3)模型创建完成后,从模型编辑窗口的“File”菜单项中选择“Save”或“Saveas”命令,可以将模型以模型文件的格式(扩展名为.mdl)存入磁盘。•若方框图模型已经存在,那么在MATLAB指令窗口下键入模型文件的名字,便可以直接打开模型窗口。•如果要退出SIMULINK,只要关闭所有模型编辑窗口和SIMULINK模块库浏览器窗口即可。一个简单的Simulink实例•将一个阶跃输入信号送到积分环节,并将积分后的信号送到示波器显示。•1.创建空白模型•2.添加模块•3.添加连接•4.仿真•5.保存模型4.1.3SIMULINK界面窗口介绍SIMULINK模型创建窗口Simulink的工作原理•仿真包括以下几个步骤。•(1)模型编译•(2)连接•(3)仿真执行•一般仿真模型都采用数值积分来仿真的,相邻两个时间点的长度为步长,步长的大小取决于求解器的类型。4.1.4SIMULINK的常用模块库•SIMULINK是由模块库、模型构造及指令分析、演示程序等几部分组成。•SIMULINK模块库包括公共模块库和专业模块库两类。为便于用户能够快速构建自己所需的动态系统,SIMULINK提供了大量以图形方式给出的内置系统模块,使用这些内置模块可以快速方便的设计一些特定的动态系统。•SIMULINK公共模块库共包括16个模块,如图4-3所示,•(1)CommonlyUsedBlocks(通用模块库)•这个模块库包括了其余几个公共模块库中的最常用模块,将其组合在这个库中,便于使用。•(2)Continuous(连续系统模块库)•包括描述标准线性函数和线性系统模块,其中主要模块有:•Derivative(微分器);•Integrator(积分器);•State-Space(状态空间);•Transfer-Fcn(传递函数);•TransportDelay(传递延迟);•VariableTransportDelay(可变传递延迟);•Zero-Pole(以零极点表示的传递函数模型);•(3)Discontinuities(时滞系统模块库)•这个模块包括描述非线性函数和非线性系统模块,其中主要模块有:•Backlash(偏移补偿);•CoulombandViscousFriction(库仑和粘性摩擦);•DeadZone(死区);•DeadZoneDynamic(死区动态);•HitCrossing(捕获交叉点);•Quantizer(量化);•RateLimiter(限速器);•Realy(继电器);•Saturation(饱和);•WrapToZero();•(4)Discrete(离散系统模块库)•模块包括描述离散时间系统的模块,其中主要模块有:•Difference(差分);•DiscreteDerivative(离散微分);•DiscreteFilter(离散滤波器);•DiscreteState-Space(离散状态空间模型);•DiscreteTransferFcn(离散传递函数);•DiscreteZero-Pole(以零极点表示的离散传递函数模型);•DiscreteTimeIntegrator(离散时间积分器);•First-OrderHold(一阶采样和保持器)•IntegerDelay(整数延迟);•Zero-OrderHold(零阶采样和保持器);•UnitDelay(单位延迟);•(5)LogicandBitOperations(逻辑和位运算模块库)和LookupTables(查找表模块库)•分别由逻辑和位运算模块以及查找表模块构成,其中主要模块有:•BitClear();•BitSet();•BitwiseOperator();•CombinatorialLogic(组合逻辑);•ComparetoConstant(与常数比较);•DetectChange();•ExtractBits();•LogicalOperator(逻辑运算器);•RelationalOperator(关系运算器);•ShiftArithmetic(转移算术);•Cosine(余弦函数);•DirectLookupTable(n-D)(直接n维查找表);•Interpolation(n-D)usingPreLookup();•PreLookupIndexSearch();•(6)MathOperations(数学运算模块库)•该模块库由描述数学运算的模块构成,其中主要模块有:•Abs(求绝对值);•Assignment(分配);•Bias(偏置);•AlgebraicConstraint(输出强制系统输入为常数的代数状态);•ComplextoMagnitude-Angle(输出复数的幅值和相位);•Magnitude-AngletoComplex(幅值与相位合成复数形式);•ComplextoReal-Imag(输出复数的实、虚部);•Real-ImagtoComplex(由实、虚部构造复数形式);•DotProduct(点乘);•Gain(增益);•Reshape(整形);•RoundingFunction(舍入函数);•SliderGain(滑块增益);•TrigonometricFunction(三角函数)•(7)ModelVerification(模型辨识模块库)和Model-WideUtilities(扩展模型模块库)•这两个模块库由描述模型辨识的和扩展模型模块构成,其中主要模块有:•Assertion(确认);•CheckDiscreteGradient(检查离散梯度);•CheckDynamicRange(检查动态系统范围);•CheckDynamicLowerBound(检查动态系统低段范围)•CheckStaticRange(检查静态系统范围);•CheckInputResolution(检查输入分辨率);•DocBlock(模块注释文本);•ModelInfo(模型信息);•Timed-BasedLinearization(基于时间的线性化模型)•(8)PortsandSubsystems(接口和子系统模块库)•该模块库由各类接口和子系统模块构成,其中主要模块有:•In1(输入端子);•Out1(输出端子)•Trigger(触发)•ConfigurableSubsystem(可配置子系统);•EnabledandTriggeredSubsystem(使能和触发子系统)•IfActionSubsystem(条件子系统);•Function-CallGenerator(函数调用生成器);•Function-CallSubsystem(函数调用子系统);•(9)SignalAttributes(信号属性模块库)和SignalRouting(信号路由模块库)•这两个模块库主要是由描述信号系统的模块构成,其中主要模块有:•DataTypeConversion(数据类型转换器)•IC(初始状态);•Probe(探测器);•Width(带宽);•BusCreator(总线生成器);•BusSelector(总线选择器);•DataStoreMemory(数据记忆存储);•DataStoreRead(数据读存储);•DataStoreWrite(数据写存储);•From(导入);•Goto(传出);•GotoTagVisibility(传出标记符可视性);•MultiportSwitch(多路选择开关);•Mux(混合)•(10)Sinks(系统输出模块库)•这个模块库是由显示、系统输出和信号源发生器模块组成,其中主要模块有:•Display(显示);•Scope(示波器);•ToFile(将输出写入数据文件);•ToWorkspace(将输出写入MATLAB的工作空间);•XYGraph(显示二维图形);•(11)Sources(输入源模块库)•Band-LimitedWhiteNoise(带宽限制的白噪声);•Clock(时钟信号);•Constant(常数信号);•PulseGenerator(脉冲发生器);•RepeatingSequence(重复序列信号);•SignalGenerator(信号发生器);•SineWave(正弦波信号);•RandomNumber(随机数);•Step(阶跃波信号);•还有User-DefinedFunction(用户自定义函数库)比较简单,AdditionalMathandDiscrete(附加数学和离散系统库)不常用。4.2SIMULINK模型创建•SIMULINK模型的创建就是通过内嵌模块库(build-inblocklibrary)的器件在模型设计模板上采用图标的形式,通过连线连接各功能模块来定量的描述系统,并通过可视化技术显示系统效果的过程。4.2.1SIMULINK模块参数、属性设置•SIMULINK中几乎所有模块的参数都允许用户进行设置,只要双击要设置模块或在模块上点击鼠标右键,并在弹出的菜单中选择“Mask(模块名称)Parameters”,就会显示参数设置对话框。•选中模块,打开“Edit”菜单中的“BlockProperties”可以对模块属性进行设定,这些属性包括General属性、BlockAnnotation属性、Callbacks属性,其中General属性又包括Description属性、Priortiy(优先级)属性和Tag(标记)属性。•其中Callbacks属性是一个很有用的属性,通过它制定一个函数名,则当该模块被双击后,SIMULINK就会执行该函数,这种函数在SIMULINK中叫做回调函数。4.2.2SIMULINK模块的查找、选定与移动•1.模块的查找•在MATLAB命令窗口下输入SIMULINK命令,打开simulink模块库浏览器