matlabsimulink中文帮助手册.pdf
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京电子科技学院
毕业设计外文资料翻译
系别电子信息工程系
专业电子信息工程
班级0911
学生姓名崔琦
导师姓名周玉坤
起止时间 2013年2月至 2013年6月
目录
Simulink工作原理 (4)
导言 (4)
动态系统建模 (5)
框图语义 (5)
建立模型 (6)
时间 (6)
状态 (6)
用状态工作执行状态 (7)
连续时间系统 (7)
离散时间系统 (8)
混合系统建模 (8)
模块参数 (9)
可调的参数 (9)
模块采样时间 (10)
自定义模块 (11)
系统和子系统 (11)
虚拟子系统 (11)
非虚拟子系统 (11)
动态系统仿真 (14)
模型编译 (14)
链接阶段 (14)
方法执行清单 (15)
模块优先级 (15)
仿真代数回路 (15)
回路迭代 (16)
求解 (17)
固定步长的解与可变步长的解 (17)
连续与离散的解 (17)
小调时间步 (18)
形状保存....................................................................................... 错误!未定义书签。
过零点检测 (18)
过零点 (18)
执行例子:饱和度模块 (19)
说明过量过零点检测的影响 (19)
反弹球演示 (20)
双反弹球演示 (20)
如何模拟过零 (21)
防止过零点错误 (21)
过零点算法 (22)
有过零点的模块 (23)
代数回路 (24)
突出代数回路 (26)
消除代数回路 (27)
Simulink工作原理
导言
Simulink是一个软件包,它可以让您模拟和分析输出随时间而改变的系统。
这些系统通常被称为动态系统。
该仿真软件可用于探索范围广泛的现实世界中的动态系统,包括集成电路,减震器,制动系统,以及许多其他的电气、机械和热力系统。
本节说明Simulink的工作原理。
基于Simulink的系统仿真是一个动态的过程,分为两步:首先,用户利用仿真模型编辑器创建一个框图,模型图形化地描述了系统中基于时间输入,状态和输出之间的数学关系。
然后用户命令Simulink软件从指定的开始时间到指定的停止时间,模拟运行模型所代表的系统。
动态系统建模
框图语义
一个simulink结构图模型是对动态系统的绘图式的数学描述。
而动态系统的数学模型是由一组方程来描述的。
这些结构图可用来描述代数方程,微分方程,或者是不定方程。
一个标准的动态系统结构图由模块和线条(信号)组成。
这些结构图来源于工程领域,例如,反馈控制理论(Feedback Control Theory)和信号处理理论(Signal Processing)。
结构图中的模块从本质上描述了动态系统的基本特征。
结构图中每个基本的连接结构图是动态系统中信号关系的图形化表示。
结构图中的全部模块和线条共同描述了这个动态系统。
Simulink通过两种典型的模块:虚拟模块和非虚拟模块来扩展典型的结构图模型。
虚拟模块代表子系统。
虚拟模块的存在仅是为了方便组织图形,他们并不影
响方程所描述的框图模型。
您可以使用虚拟模块以改善模型的可读性。
一般情况下,模块和线可以用来描述许多“计算”的模式。
典型的一个例子是一个流程图。
流程图包括模块和线,但是无法使用一般动态系统流程图语言来
描述。
术语“基于时间的模块框图”是用来区分动力系统的框图与其他形式的框图,且除非文中有特别的说明,框图(或模型)一般是指一个基于时间的框图(或模型):
1.系统时间开始于一个用户指定的“开始时间”,并结束于用户指定的“停止
时间。
对这些关系进行的一个评估被称为时间步长。
2.信号代表了工程量随时间的变化,其生存周期从方框图的开始时间直至结
束。
3.信号和状态变量之间的关系由模块代表的方程所决定。
这些方程定义了输
入信号,输出信号和状态变量之间的关系,即建立方程所需要的系数。
建立模型
Simulink产品为您提供了一个图形编辑器,可以让您创建和连接各种类型的实例模块(见创建一个模型),通过模块库从模块类型库中选择相应的模块(见模块)。
用户还可以创建自己的块并使用Simulink编辑器来创建在同一张图上的实例。
用户定义的块被称为自定义模块。
时间
时间是一个模块框图固有组成部分,模块框图模拟的结果是随着时间而改变的。
换句话说,模块框图代表了一个动态系统瞬间的状态。
确定一个系统随着时间推移引起的行为,从而求解模型反复的时间间隔,称为模型的时间步长,即模型从开始到结束的时间。
求解一个连续时间步长模型的过程被称为对该模型所代表的模拟系统进行仿真。
状态
通常情况下一些系统的当前值,输出的值都是当前的一些变量,这些变量被称为状态变量。
系统从框图中计算当前时间步长下的状态的值并保存,用于计算下一个时间步长时候的状态的值。
这项任务通常在仿真期间模型定义状态的时候执行。
在Simulink模型中,有两种状态:离散和连续状态。
连续状态是不断变化的状态。
连续状态的一个例子就是汽车的位置和速度。
离散状态是一个近似的连续状态,即用有限(周期或非周期)的时间间隔来修正的连续状态。
一个离散状态的例子就是汽车数字里程表上每秒显示的位置,这不是连续的。
在这种限制条件下,当一个离散状态的时间间隔趋近于0的时候,这个离散状态也就趋近于连续状态。
特别是,当一个模块需要部分或全部上一级的输出以计算当前的输出时,这个模块需要的是在两个时间步长之间保存的状态。
:
定义连续状态系统的模块包括以下标准的Simulink模块:
1.积分模块
2.状态空间模块
3.传递函数模块
4.变量迁移延迟模块
5.零极点模块
一个模型总的状态数量是各个模块所定义的状态的总和。
确定一个框图中的状态数量,要分解这个框图中所包含的各种类型的模块,然后才能根据各个模块所定义的状态来计算总的模块的数量。
这项任务在模型仿真的汇编阶段执行。
用状态工具操作状态
下列的工具在仿真期间用来确定、初始化和运行模型的状态:
1.model命令展示了模型所定义的状态的一些相关信息,包括的模型定义的总的
状态数量,定义每一个状态的模块,以及各个状态的初始值等。
2.Simulink调试器显示了仿真期间状态在每一个时间步长的值。
3.模型的参数配置对话框中的数据导入/导出窗格(见导入和导出数据)可以让
您可以指定状态的初始值,并且可以在以队列或矩阵的形式记录仿真期间状态在每一个时间步长的值。
4.块参数对话框可以让您对采用连续状态的模块命名(如积分模块)。
这可以简
化分析数据记录下来供状态使用,尤其是当一个模块存在多个状态的时候。
连续时间系统
计算连续状态需要知道它的变化率,或者是导数。
由于连续系统的变化率代表了其自身在不断变化(即本身是一个状态),计算连续状态的当前值需要在仿真一开始的时候对导数进行积分。
因此对一个连续状态的系统建模需要对在每个时间步长上计算状态的导数的过程进行说明。
仿真框图使用积分模块来表示积分,以及用一连串的模块连接到积分模块的输入端以此来表示对系统状态求导的方法。
连接到积分模块输入端的一连串的模块框图对应的是常微分方程(ODE)。
一般情况下,除了简单的动态系统,是没有办法对现实中的用常微分方程描述的动态系统进行积分的。
Simulink软件自带有最常见的常微分方程的积分方法,同时允许用户在执行仿真时,选择哪一种方法来对状态进行积分。
要计算一个连续时间系统状态的当前值,就必须对仿真开始时刻的初始值进行积分。
积分结果的精确性取决于两个时间步长之间的间隔大小。
一些常微分方程求解器,称为可变时间步长求解器,可以根据状态的变化率,自动改变时间步长的间隔,以在模拟进行过程中实现特定的精度。
用户可以指定时间间隔。
为了尽量减少计算工作量,变步长求解器通过最大限度加大状态的变化率来达到用户指定的精确度。
离散时间系统
要计算离散时间系统,需要知道系统当前时刻的值和上一时刻的值之间的关系,这种关系被描述为系统的更新功能。
离散时间系统的值不仅仅取决与上一个时间步长的值,还取决于系统输入,因此,对离散系统的建模还需要对上一个时间步长的输入进行建模。
Simulink框图使用被称为离散模块的特定类型的模块,来指定更新功能以及连接在离散模块端口的一连串模块,这些模块可以根据上一个时间步长的输入对系统进行建模。
和连续时间状态一样,离散时间状态对仿真的时间步长做了限制。
具体来说,步长必须确保模型所有的采样时间都能够落如其中。
这项任务指派一组叫离散求解器的Simulink系统来执行。
Simulink提供了两个离散求解器:固定步长离散求解和可变步长离散求解。
固定步长离散求解器确定一个固定的步长,该步长能够满足系统中所有离散状态的采样时间,不管在满足采样时间的时刻,状态是否发生变化。
相比之下,变步长离散求解器改变步长以确保只有在离散状态发生变化的时候才满足采样时间的要求。
混合系统
混合系统是一个既有离散状态和连续状态的系统。
严格地说,任何包含有连续和离散采样时间的系统都当成混合系统,假设,该模型包含离散和连续状态。
Simulink软件通过离散求解器所确定的下一抽样时间命中,作为连续求解器额外的
制约因素来满足这一要求。
连续状态求解器必须选择一个接近仿真上限时间但又不超过下一步采样时间的时间步长。
连续状态求解器可以在短的时间步长的命中下一个采样的时间,以满足其精确度约束,但即便精确度允许,它也不能超过下一个采样时间。
模块参数
很多标准的模块的关键功能都是参数化的。
例如,Simulink常数模块的常数值时一个参数每个参数化的模块都有一个参数设置对话框,可以让您设置参数的值。
您可以使用MATLAB公式来指定参数值。
在仿真开始前,Simulink会对公式进行估算。
这使您能够确定最适合的参数的值。
一个参数化的模块有效的代表了一个家族的相似的模块。
例如,当创建一个模型的时候,你可以设置个别实例的模块的参数的值,使每个个体的行为都是不同的。
因为它允许每个标准模块代表一个家族的模块,模块参数化大大提高了标准Simulink库的建模能力。
可调的参数
很多模块的参数都是可调的。
可调参数是不用编译模型就能够改变的参数(见模型汇编以了解更多编译模型的信息)。
举例来说,增益模块的增益参数时可以调整的。
在仿真运行过程中,你可以改变模块的增益。
如果在仿真运行过程中,一个参数时不可调的,那么,控制对话框中将设置参数已被禁用。
注意:在仿真运行过程中,你不能通过对话框或模型浏览器来改变资源模块的参数值。
打开一个可调参数模块的对话框会导致仿真暂停。
当仿真暂停的时候,你可以改变对话框中显示的参数值。
但是,您必须关闭该对话框,以使更改生效,并允许仿真继续。
应当指出,参数的变化不是立即发生,而是先排队等候,然后在模型的下一个时间步长时开始执行。
回到我们常数块的例子中,它定义的函数是:signal(t) =
Constant Value。
如果我们允许常数值迅速变化,那么,参数值发生变化这一刻的解将时无效的。
因此,我们必须排队等候以在下一个时间步长处理。
您可以使用最优化窗格中的内置的参数选项来指定系统中所有的参数都时不可调的,除了你所指定的那些。
这可以加快执行大型模型的速度,而且也可以加快模型生成代码的速度。
见参数配置对话框中的更多信息。
模块采样时间
每个仿真模块都定义了采样时间以界定模块什么时候开始执行。
Sample Time 参数来指定模块的采样时间。
共同的选择包括离散的,持续的,以及继承采样时间。
共同采样时间类型采样时间实例
离散[Ts, To] 延迟,数字滤波器
连续[0, 0] 积分
继承[–1, 0] 增益,加和对离散模块来说,模块的采样时间是一个向量连续采样的时间间隔。
与此相反,非离散模块的采样时间用零,负整数或无穷大的数来描述。
(见如何查看采样时间信息)例如,有一个采样时间为[0,0]的连续模块,并用来对连续状态系统建模(如汽车加速)。
鉴于表明采样时间类型的继承模块象征性地为[-1,0]和Simulink 然后决定的实际的值为基础的背景下,继承模块的模式。
请注意,并非所有模块都能接受所有类型的采样时间。
例如,离散模块不能接受连续采样时间。
出于可视化考虑,Simulink允许选择颜色用来编码和注释任何框图来说明采样时间的类型和速度。
在一个图例中,你可以使用任意的颜色和注释。
欲了解更多关于采样时间的讨论,见(如何查看采样时间信息)。
自定义模块
您可以创建自定义模块库,在您的模型中你可以使用它们。
要创建自定义图形模块,利用Simulink的封装技术,按照Simulink子系统的要求将模块封装起来,并提供一个参数对话框。
要创建一个编程模块,您可以建立一个包含模块系统函数的或,(见编写S -函数)。
由此产生的文件被称为S-函数。
然后,您就可以将S函数与您模型中模块具体的结合起来。
您可以通过封装子系统添加一个参数对话框到S函数模块,同时将参数对话框添加到子系统中。
系统和子系统
Simulink的模块可以包含不同的层次。
每一层由一个子系统来定义。
子系统是整个模块框图的一部分,但是它一点都不影响模型框图的功能。
子系统主要为组织框图方面提供帮助。
子系统不能单独的定义一个框图。
Simulink软件区分两种不同类型的子系统:虚拟子系统和非虚拟子系统。
主要的不同之处在于,非虚拟子系统提供了控制子系统进行评估的能力。
虚拟子系统
模型中的虚拟子系统提供了图形化的层次划分。
虚拟子系统不影响系统执行。
在仿真执行期间,仿真引擎使所有虚拟子系统变无效。
这种处理方式与C或C++中的宏编程语言非常相似。
一般来说,会有一个被称为根系统的系统顶层框图,还有一些低级别的系统来自非虚拟子系统和其他框图。
您将在Simulink调试器中看到这些系统。
建立这些内部系统通常被称为扁平化示范。
非虚拟子系统
非虚拟子系统提供图形化执行的功能。
仿真引擎将非虚拟子系统作为一个单一的单位来执行。
您可以创建条件执行子系统,该子系统在一个跃迁发生时触发,例如函数调用的时候执行(见创建条件子系统)。
只有当所有的输入都是有效的
时候,非虚拟子系统中的模块才执行。
所有的非虚拟子系统都用粗的线条画出来的。
Simulink定义了以下的非虚拟子系统:
(1)原子子系统
原子子系统的主要特性是原子子系统中的模块都作为一个单一的单位来执行。
这在模型执行时提供了有利的分组功能。
任何仿真模块都可以放置在一个原子子系统中,包括不同执行速率的模块。
在虚拟子系统中你可以选择(见原子子系统模块以获取更多信息)。
(2)激活子系统
激活子系统是当控制信号为正值时每一步仿真都执行的子系统。
激活子系统有一个唯一的控制信号输入端口,它可以是标量或是向量输入端口:
1.如果输入是标量,当输入值大于零的时候子系统即执行;
2.如果输入是向量,则当输入向量的任意以元素值大于零时,子系统就执行。
例如:如果控制输入信号是以正弦波,则子系统在激活和非激活两种状态中交替。
Simulink使用过零点的斜率来确定是否发生了激活事件。
如果信号穿越了零点,且斜率为正,子系统将变成运行状态;如果信号穿越零点时,斜率为负,子系统将变成非激活状态。
(3)触发子系统
触发子系统在信号驱动子系统触发端口上升或下降沿时执行。
触发边缘的方向由触发端口模块的所定义。
Simulink限制了放置在一个触发子系统中的,没有明确的采样时间的模块的类型(即模块内的子系统必须有一个为-1的采样时间),因为触发子系统内容的执行时非周期改变的。
您可以在一个子系统中放置一个触发端口模块来创建一个触发子系统。
Stateflow图表也可以有Stateflow编辑器定义的触发端口。
从仿真的角度来看,触发子系统和触发图表没有任何区别。
(4)函数调用子系统
函数调用子系统是在仿真期间其他模块可以直接调用的子系统。
它类似于一个程序设计上的函数。
调用一个函数调用子系统相当于调用模块的输出方法,该子系统包含排序秩序。
调用一个函数调用子系统的模块称为函数调用起始器。
Stateflow,函数调用发生器,和S–函数模块都可以作为函数调用起始器。
要创建一个函数调用子系统,从Simulink的端口及子系统库中拖动函数调用子系统模块
到您的模型中,然后将一个函数调用起始器连接到子系统顶端显示的函数调用端口。
您还可以先在模型中创建以函数调用子系统,然后在子系统中建立一个触发模块,并将触发模块的触发类型设置为“函数调用”。
你可以通过设置其采样时间类型为“触发”来设置一个函数调用子系统(默认)的周期。
一个函数调用起始器可以调用一个触发功能调用子系统零次,一次或每个时间步长的倍数。
触发函数调用子系统中的模块的采样时间必须设置为(-1)。
在一个时间步长上,函数调用起始器只能调用一个周期函数调用子系统一次,而且必须周期性的调用子系统。
如果起始器不定期的调用一个周期函数调用子系统,仿真将停止,并显示一条错误消息。
周期函数调用子系统中的模块可以指定一个非遗传性抽样时间或继承性的为(-1)的采样时间。
指定一个非遗传性采样时间时间的所有模块必须指定同一采样时间,即如果一个模块指定1作为其采样时间,那么所有其他模块必须指定一个采样时间1或-1。
如果一个函数调用起始器调用一个周期函数调用子系统的速率不同于子系统中的模块指定的采样时间,仿真将停止,并显示一条错误消息。
(5)激活的触发子系统
一个激活的触发子系统从本质上说基本上是一个触发子系统,该子系统在信号驱动的子系统触发端口显示上升或下降沿时。
触发边缘的方向由触发端口模块的触发器类型参数定义。
Simulink的限制了放置在一个激活的触发子系统中的,没有明确的采样时间的模块类型(即子系统内的模块必须有一个为-1的采样时间),因为触发子系统执行的内容是非周期性的。
您可以在一个子系统中放置一个触发端口模块和激活端口模块来创建一个激活的触发子系统。
动态系统仿真
模型编译
首先,Simulink引擎调用模型编辑器,模型编辑器将图形化的模型转换成Simulink可执行的格式,这个过程称为模型的编译,特别是编辑器,在这个过程中主要完成以下工作:
1.评估模型的块参数表达式,以确定其价值;
2.确定信号的属性,如名称,数据类型,数字类型和维度,没有明确指定的
模型和检查,每块可以接受的信号连接到它的输入;
3.Simulink使用一个称为“属性传递”的程序来检测那些没有定义的属性。
该过程需要那些由输入的资源信号驱动的模块;
4.执行模块最优化;
5.用模型包含的模块替换虚拟子系统,以此来使模型层次变得单调(见求解
器);
6.确定块排序顺序(见控制和显示排序命令以了解更多信息);
7.确定所有模型中所有未指定采样时间的模块的采样时间(见传播采样时
间)。
链接阶段
在这一阶段,仿真引擎将为执行框图分配内存所需的工作领域(如信号,状态和运行时间参数)。
它为内存分配和初始化数据结构,也为每个信息块存储运行时间。
对于内置的模块,其主要运行数据结构时的一个区块被称为SimBlock。
它可以储存指向块的输入和输出缓冲器和状态工作的载体。
执行清单
在连接阶段,仿真引擎也产生执行名单。
这些名单列出了调用一个模型块的方法来计算它的输出的最有效的顺序。
模型汇编阶段中生成模块排序名单就是用来建造执行名单的。
模块优先级
您可以指定更新的优先次序,以块为单位(见指定模块优先事项)。
在执行更高优先级的块之前执行较低优先级的块。
只要符合其模块排序规则,Simulink 就允许其分配权限。
仿真代数回路
一旦连接阶段完成后,模拟进入模拟回路阶段。
在这一阶段,仿真计算引擎的状态和输出系统的时间间隔从模拟开始时间到结束时间,利用所提供的资料模型。
历届的时间点,其中状态和输出计算被称为时间间隔。
时间长度之间的间隔被称为步长。
步长取决于类型的求解(见解决)计算系统的连续的状态、该系统的基本样本的时间(见系统采样时间管理)、以及该系统是否连续(见过零点检测)。
回路中的仿真阶段有两个阶段:初始化阶段和循环回路迭代阶段。
循环回路开始的时候在初始化阶段发生一次。
迭代阶段重复一次,时间步长从模拟开始时间到仿真停止时间。
开始时,仿真模型指定初始状态和系统的输出进行仿真。
在每一个间隔,系统输入的新值,状态和输出计算,而该模型更新,以反映计算值。
结束时,该模型反映了系统最后的输入,状态和输出的值。
Simulink软件提供的数据显示和记录区块。
您可以显示和/或日志中间结果,包括这些模型中的模块。
回路迭代
在每个时间步长,仿真引擎:
1.计算模型的输出。
仿真引擎援引仿真模型输出的方法启动这一步通过。
该模型输出的方法又调用模型系统输出方法,该方法调用的输出方法的区块,该模型包含在该命令所指明的输出法执行名单中产生的链接阶段的仿真(见解决)。
该系统输出方法通过下列论点每个区块输出方法:一个指向块的数据结构及SimBlock 结构。
数据结构和SimBlock点信息的输出方法需要计算块的输出,包括它的位置输入缓冲器和输出缓冲器。
2.计算模型的状态。
仿真引擎通过援引求解来计算模型的状态。
其中求解它援引取决于是否模型没有状态,只有离散状态,只有持续的状态,或在连续和离散的状态。
如果该模型只离散状态,仿真引擎调用离散求解选定的用户。
计算求解的规模,时间步长必须涉及模型样本次数。
然后调用Update方法模型。
模型更新方法调用Update方法及其系统,该系统调用Update方法的每一个模块,该系统包含在该命令所指明的Update方法名单中产生的链接阶段。
如果该模型只有连续系统,仿真引擎将调用连续求解指定的模型。
根据不同的方法,求解要么在主要的时间步长间隔内输入微小的时间间隔求解模型输出,要么以积分的方法来计算模型的输出。
这样做是为了提高状态计算的准确性。
该模型积分工具的使用又援引相应的系统方法,其中援引模块输出及积分工具在该命令所指明的输出及积分工具的执行名单中产生。
3.检查连续模块的非连续状态。
过零点检测技术用来检测间断连续状态。
(见过零点检测以了解更多信息)4.计算下一次一步的时间。
重复1到4步骤直到仿真停止。