第七章 Simulink建模和仿真
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章 Simulink建模和仿真 7.1 Simulink的概述和基本操作
同Matlab一样,Simulink也不是封闭的,他允许用户可 以很方便的定制自己的模块和模块库。同时Simulink也 同样有比较完整的帮助系统,使用户可以随时找到对应 模块的说明,便于应用。
综上所述,Simulink就是一种开放性的,用来模拟线 性或非线性的以及连续或离散的或者两者混合的动态系 统的强有力的系统级仿真工具。
Matlab具有友好的工作平台和编程环境、简单易学的编程语言、 强大的科学计算和数据处理能力、出色的图形和图像处理功能、 能适应多领域应用的工具葙、适应多种语言的程序接口、模块化 的设计和系统级的仿真功能等,诸多的优点和特点。
支持Matlab仿真是Simulink工具箱,Simulink一般可以附在 Matlab上同时安装,也有独立版本来单独使用。但大多数用户 都是附在Matlab上,以便能更好地发挥Matlab在科学计算上的 优势,进一步扩展Simulink的使用领域和功能。
⑤ 决定所有无显示设定采样时间的模块的采样时间; ⑥ 分配和初始化用于存储每个模块的状态和输入当前值的存储空
间。 完成这些工作后就可以进行仿真了。 2) 模型执行
一般模型是使用数值积分来进行仿真的。所运用的仿真解法器 (仿真算法)依赖于模型提供它的连续状态微分能力。计算微分 可以分两步进行:
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作
二、仿真运行原理
Simulink仿真包括两个阶段;初始化阶段和模型执行阶段 (1) 模块初始化 在初始化阶段主要完成以下工作: ① 模型参数传给Matlab进行估值,得到的数值结果将作为模
型的实际参数; ② 展开模型的各个层次,每一个非条件执行的子系统被它所包
含的模块所代替;
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作
③ 检查模块连续状态的不连续点。Simulink使用过零检测 来检测连续状态的不连续点。
④ 计算下一个仿真时间步的时间。这是通过调用模块获得 下一个采样时间函数来完成的。
(3) 定模块更新次序
在仿真中,Simulink更新状态和输出都要根据事先确定的模 块更新次序,而更新次序对方针结果的有效性来说非常关键。 特别当模块的输出是当前输入值的函数时,这个模块必须在 驱动它的模块被更新之后才能被更新,否则,模块的输出将 没有意义。
Simulink模型可以用来模拟线性和非线性、连续和离散或者 两者的混合系统,也就是说它可以用来模拟几乎所有可能遇 到动态系统。另外Simulink还提供一套图形动画的处理方法, 使用户可以方便的观察到仿真的整个过程。
Simulink没有单独的语言,但是它提供了S函数规则。所谓 的S函数可以是一个M函数文件、FORTRAN程序、C或C++ 语言程序等,通过特殊的语法规则使之能够被Simulink模型 或模块调用。S函数使Simulink更加充实、完备,具有更强 的处理能力。
产生数字采样时间信号
Digital pulse generator 产生数字脉冲信号
From file
从文件读取数据输入
From work space
从工作间定义的矩阵读入数据
Pulse generator
产生脉冲信号
Rampห้องสมุดไป่ตู้
产生“斜坡”信号
Random number
产生正态分布的随机信号
Repeating sequence 产生周期序列信号
显示输入信号的值 显示信号的波形 当输入信号为0时结束仿真 向文件中写数据 向工作间定义的变量写数据到 Matlab图形窗口显示信号的二维图
第七章 Simulink建模和仿真
7.2 基本模块
表7.2.3 Discrete库
模块名 Discrete filter Discrete state-space Discrete-time integrator Discrete transfer fcn Discrete zero-pol
第七章 Simulink建模和仿真 7.2 基本模块
由于大多数物理系统都可以用微分方程组和代数方程组来描 述,Simulink也采用的是本教材第四章介绍的面向结构图的 数字仿真原理。但其功能块的类型、数值解法、功能快的描 述、以及建模方式和方法远远超出CSS仿真程序包,其界面 也更加友好。
Simulink 4把功能块分成9类,分别放置在9个库中,如图 7.2.1所示:源模块库(Sources)、输出显示库(Sinks)、离散 模块库(Discrete)、连续模块库(Continuous)、非线性模块 库(Nonlinear)、数学函数库(Math)、通用函数及列表库 (Functions and Tables)、信号处理及系统类模块库(Signal and Systems)和子系统模块库(Subsystems)。
① 首先,按照排序所决定的次序计算每个模块的输出。 ② 然后,根据当前时刻的输入和状态来决定状态的微分;
得到微分向量后再把它返回给解法器;后者用来计算下一 个采样点的状态向量。一旦新的状态向量计算完毕,被采 样的数据源模块和接受模块才被更新。 在仿真开始时模型设定待仿真系统的初始状态和输出。在 每一个时间步中,Simulink计算系统的输入、状态和输出, 并更新模型来反映计算出的值。在仿真结束时,模型得出 系统的输入、状态和输出。 在每个时间步中,Simulink所采取的动作依次为: ① 按排列好的次序更新模型中模块的输出。Simulink通过 调用模块的输出函数计算模块的输出。Simulink只把当前 值、模块的输入以及状态量传给这些函数计算模块的输出。 对于离散系统,Simulink只有在当前时间是模块采样时间 的整数倍时,才会更新模块的输出。
为了满足用户对工程计算的要求,一些软件公司相继推出一 批数学类科技应用软件,如Matlab、Xmath、 Mathematica、Maple等。其中MathWorks公司推出的 Matlab由于有强大的功能和友好的用户界面受到越来越多 的科技工作者的青睐,尤其是控制领域的专家和学者 .
第七章 Simulink建模和仿真
7.1.2 基本操作 一、模型基本结构 一个典型的Simulink模型包括如下三种类型的元素: ① 信号源模块 ② 被模拟的系统模块 ③ 输出显示模块
如图7.1.1所示说明了这三种元素之间的典型关系。系统 模块作为中心模块是Simulink仿真建模所要解决的主要部分; 信号源为系统的输入,它包括常数信号源函数信号发生器 (如正弦和阶跃函数波等)和用户自己在Matlab中创建的自 定义信号或Matlab工作间中三种。输出模块主要在Sinks库 中。
本章详细地向用户介绍Simulink地建模方法、使用操作、以及 使用Simulink进行系统级的仿真和设计原理。使读者通过本章 地学习,不但可以进一步掌握计算机仿真的基本概念和理论,也 可以初步学会使用Simulink去真正地运用仿真技术解决科研和工 程中地实际问题。
第七章 Simulink建模和仿真 7.1 Simulink的概述和基本操作
基于上述分类,Simulink使用下面两个基本规则对模块进行排序: ① 每个模块必须在它驱动的所有模块更新之前被更新。这条规
则确保了模块被更新时输入有效。 ② 若非直接馈入模块在直接馈入模块之前更新,则它们的更新
次序可以是任意的。这条规则允许Simulink在排序过程中忽略非 虚拟模块。 另外一个约束模块更新次序的因素是用户给模块设定优先级, Simulink在低优先级模块之前更新高优先级模块。
近几年来,在学术界和工业领域,Simulink已经成为动态系 统建模和仿真领域中应用最为广泛的软件之一。Simulink可 以很方便地创建和维护一个完整地模块,评估不同地算法和 结构,并验证系统的性能。由于Simulink是采用模块组合方 式来建模,从而可以使得用户能够快速、准确地创建动态系 统的计算机仿真模型,特别是对复杂的不确定非线性系统, 更为方便。
表7.2.1到表7.2.8列出了个库包含的主要模块及简单说明。 图7.2.2到图7.2.10列出了各库包含的主要模块种类图形。
第七章 Simulink建模和仿真 7.2 基本模块
表7.2.1 Source库
模块名
说明
Clock
显示或者提供仿真时间
Constant
产生一个常数值信号
Digital clock
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作
② 按排列好的次序更新模型中模块的状态,Simulink计算 一个模块的离散状态的方法时调用模块的离散状态更新函数。 而对于连续状态,则对连续状态的微分(在模块可调用的函 数里,有一个用于计算连续微分的函数)进行数值积分来获 得当前的连续状态。
第七章 Simulink建模和仿真
在计算机技术飞速发展的今天,许多科学研究、工程设计由 于其复杂性越来越高,因此与计算机的接合日趋紧密。也正 是计算机技术的介入,改变了许多学科的结构、研究内容和 研究方向。例如,计算流体力学、计算物理学、计算声学等 新兴学科的兴起,均与计算机技术的发展分不开。控制理论、 仿真技术本身与计算机的接合就十分紧密,而随着专业领域 的研究深入和计算机软硬件技术的发展,这种联系呈现更加 紧密。计算控制论的建立,足以说明这个问题。而这种发展, 又以系统仿真技术的发展分不开的。
③ 模型中的模块按更新的次序进行排序。排序算法产生一个列表 以确保具有代数环的模块在产生它的驱动输入的模块被更新后才 更新。当然,这一步要先检测出模型中存在的代数环。
④ 决定模型中有无显示设定的信号属性,例如名称、数据类型、 数值类型以及大小等,并且检查每个模块是否能够接受连接到它 输入端的信号。Simulink使用属性传递的过程来确定未被设定的 属性,这个过程将源信号的属性传递到它所驱动的模块的输入信 号;
源模块
系统模块
显示模块
图7.1.1 Simulink模型元素关联图
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作
Simulink模型并不一定要包含全部的三种元素,在实际应用 中通常可以缺少其中的一个或两个。例如,若要模拟一个系 统偏离平衡位置后的恢复行为,就可以建立一个没有输入而 只有系统模块加一个显示模块的模型。在某种情况下,也可 以建立一个只有源模块和显示模块的系统。若需要一个由几 个函数复合的特殊信号,则可以使用源模块生成信号并将其 送入Matlab工作间或文件中。
目前,随着软件的升级换代,在软硬件的接口方面有了 长足的进步,使用Simulink可以很方便地进行实时的信 号控制和处理、信息通信以及DSP的处理。世界上许多 知名的大公司已经使用Simulink作为他们产品设计和开 发的强有力工具。
第七章 Simulink建模和仿真 7.1 Simulink的概述和基本操作
第七章Simulink建模和仿真 7.1 Simulink的概述和基本操作
注意:不要把模块保存到模块文件的次序与仿真过程模块被更新 的次序相混淆。Simulink在模块初始化时以将模块排好正确的次 序。
为了建立有效的更新次序,Simulink根据输入和输出的关系将模 块分类。其中,当前输出依赖于当前输入的模块称为直接馈入模 块,所有其他的模块都称为非虚拟模块。直接馈入模块的例子有 Gain、Product和Sum模块;非直接馈入模块的例子有 Integrator模块(它的输出只依赖于它的状态),Constant模块(没 有输入)和Memory模块(它的输出只依赖于前一个模块的输入)。
Signal generator
信号发生器
Sine wave
正弦波信号
Step
产生一个阶跃信号
Uniform random number
产生均匀分布的随机信号
第七章 Simulink建模和仿真
7.2 基本模块
模块名
表7.2.2 Sinks库
说明
Display Scope Stop simulation To file To workspace XY graph