如何用simulink workspacefrom workspace导入一系列按时间变化的矩阵

MATLAB&SIMULINK&模块:from&workspace
在GUI中我把模拟框图给画出来了,输出用来显示波形。那么输入怎么来解决呢?
我把Library
Browser中的正弦信号用作输入是可以的,直接仿真也出效果,要是我想用任意的信号去当作输入该怎么输入呢?
在框图中有一个输入In1,一个输出Out1.
是在框图中解决这个问题呢 还是在workspace里解决这个问题呢?
鄙人是Matlab的菜鸟 希望高手能回答一下。
我在其他论坛上找到一些资料可能会有用。
1.从工作空间中输入数据
matlab--+&simulink--+&sources--+&from workspace
(sinim)//这个from workspace(sinim) 怎么在使用
2.从外部输入数据文件
matlab--+&simulink--+&sources--+&from file
(untilted.mat),说明:untilted.mat是matlab数据格式,你可将输入文件存到
.txt文件,然后到如到工作空间,最后使用save保存这个工作空间的数据变量.
3.从simulink字系统中互相导入数据
matlab--+&simulink--+&sources--+&In1(1)
4.将数据导出到工作空间
matlab--+&simulink--+&sinks--+&to workspace(simout)
5.将数据导出到文件
matlab--+&simulink--+&sinks--+&to file
(untilted.mat)
6.将数据导出到simulink字系统
matlab--+&simulink--+&sinks--+&out(1)
1.从工作空间中输入数据 matlab--+&simulink--+&sources--+&from workspace (sinim)//这个from workspace(sinim) 构造simin如下 t=0:0.1:10; y=t.*sin(t); simin=[t;y]'; 就可以了,如果y是多维数组,需要用structure 比如 y=[t.*sin(t);sin(t)]; simin.time=t; simin.signals.values=y; simin.signals.dimensions=2;
2.从外部输入数据文件 matlab--+&simulink--+&sources--+&from file (untilted.mat),说明:untilted.mat是matlab数据格式,你可将输入文件存到 .txt文件,然后到如到工作空间,最后使用save保存这个工作空间的数据变量. 这种方法跟第一种类似,按上面的格式构造数据,然后保存成mat文件,就可以用from file模块读入了
3.从simulink字系统中互相导入数据 matlab--+&simulink--+&sources--+&In1(1) 这种是从母系统中导入数据 比如子系统中有个输入是in1,那么在母系统中,子系统对应的模块就有一个输入管脚对应in1
4.将数据导出到工作空间 matlab--+&simulink--+&sinks--+&to workspace(simout)
5.将数据导出到文件 matlab--+&simulink--+&sinks--+&to file (untilted.mat)
6.将数据导出到simulink字系统 matlab--+&simulink--+&sinks--+&out(1) 导出跟导入类似,你试试就明白了
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Simulink常用模块名称中英文对照;Sources库;Band-LimitedWhiteNoise宽带;ChirpSignal线性调频信号(频率按时间线;Clock时钟信号模块,显示或者提供仿真时间;Constant常量输入模块,产生一个常数值Di;DigitalPulseGenerator产生具;FromWorkspace从在工作空间定义的矩阵;Pul
Simulink常用模块名称中英文对照
Band-Limited White Noise
宽带限幅白噪声模块,把一个白噪声引入到连续系统中
Chirp Signal
线性调频信号(频率按时间线性变化的正弦波)模块,产生频率增加的正弦信号
时钟信号模块,显示或者提供仿真时间
常量输入模块,产生一个常数值 Digital Clock
数字时钟模块,按指定的间隔产生采样时间
Digital Pulse Generator
产生具有固定间隔的脉冲 From File
从一个文件读取数据
From Work space
从在工作空间定义的矩阵读入数据Ground
接地模块,将一个未连接的输入端接地 In1
输入端口模块
Pulse Generator
脉冲信号发生器模块,产生固定间隔的脉冲
斜坡信号输入模块,产生一个以常 数斜率增加或者减小的信号
Random Number
产生正态分布的随机数 Repeating Sequence
产生一个可重复的任意信号 Signal Generator
产生多种多样的普通信号 Signal Builder
自定义信号发生器
产生正弦波信号
阶跃信号模块,产生一个单步函数 Uniform Random Number
产生均匀分布的随机数
实时数字显示模块,显示其输入信号的值 Floating Scope
浮动示波器模块
输出端口模块
示波器模块,显示在仿真过程产生的信号的波形
Stop Simulation
仿真终止模块,当它的输入信号非零时,就结束仿真
Terminator
信号终结模块,结束一个未连接的输出端口 To File
写数据到文件
To Workspace
把数据写进工作空间里定义的矩阵变量 XY Graph
用一个MATLAB图形窗口来显示信号的X-Y坐标的图形
Continuous库
主要用于连续系统的仿真
Derivative
微分模块,输出为输入信号的微分。无
需设置参数
Integrator
积分模块,输出时输入信号的积分,可设定初始条件(比如混沌系统的仿真),通常情况下初始条件不用考虑
输出来自前一个时间步的模块输入 State-Space
状态空间模块,主要应用应用于现代控制理论中多输入多输出系统的仿真,双击模块可设置的主要参数有:系数矩阵A,B,C,D以及初始条件
Transfer Fcn
传递函数多项式模型,实现现行传递系统,双击可设置分子多项式和坟墓多项式的系数
Transport Delay
时间延迟模块,通过模块内部参数设定延迟时间
Variable Transport Delay
将输入延迟一可变的时间
传递函数零、极点模型,实现一个用零极点标明的传递函数,双击设置零点、极点、增益
Disontinuous库
主要用于非线性系统仿真
磁滞回环特性模块
Coulomb & Viscous Friction
库伦摩擦与黏性摩擦特性模块 Dead Zone
死区特性模块
Hit Crossing
检测输入信号的零交叉点模块 Quantizer
阶梯状量化处理模块
Rate Limiter
变化速率限幅模块
带有滞环的继电特性模块
Saturation
限幅的饱和特性模块
Discrete库
主要用于离散系统的仿真
Discrete Transfer Fcn
离散系统传递函数多项式模型,可设置分子分母多项式
Discrete Zero-Pole
离散系统传递函数零极点模型,可设置零点、极点、增益,可以设置采样时间
Discrete Filter
离散系统滤波器,可设置分子分母系数(按照z-1作升幂排列),可设置采样时间
Discrete State-Space
离散系统状态空间表达式模块,可设置参数矩阵A,B,C,D,可设置采样时间、初始条件
Discrete-Time Integrator
离散系统积分器模块,可设置采样时间、初始条件
Unit Delay
离散系统单位延迟模块,可设置采样时间,初始条件
Fist-Order Hold
一阶采样保持器
Zero-Order Hold
零阶采样保持器
Discrete Filter
实现IIR和FIR滤波器
Discrete State-Space
实现一个离散状态空间系统
Discrete-Time Integrator
离散时间积分器
Discrete Transfer Fcn
实现一个离散传递函数
Discrete Zero-Pol
实现一个用零极点来说明的离散传递函数 First-Order Hold
实现一个一阶保持采样-保持系统 Unit Delay
将信号延时一个单位采样时间 Zero-Order Hold
实现具有一个采样周期的零阶保持
主要用于查表
Direct Look-Up Table(n-D)
直接查询n维表模块
Interpolation(n-D) Using
Prelook-up
适用预查询的n维内查表模块 Look-Up Table
一维查表模块
Look-Up Table(2-D)
二维查表模块
Look-Up Table(n-D)
n维查表模块
Prelook-Up Index Search
预查询索引搜寻模块
Operations(数学运算)库
绝对值或复数求模模块,输出是输入信号的绝对值(或复数的模)
Algebraic Constraint
代数约束模块,将输入信号约束为零,计算输入信号为零时的状态值
Assignment
分配器模块
Bitwise Logical Operator
位逻辑运算模块,可选择逻辑运算关系(与-AND,或-OR,非-NOT,异或-XOR等),可设置第二运算数(默认值为FFFF)
Combinatorial Logic
实现一个真值表,组合逻辑运算模块 Complex to Magnitude-Angle
复数模、角运算模块,输入量为复数, 输出量有两个,一个输出为输入信号的模,另一个为输入信号的角
Complex to Real-Imag
复数实部、虚部运算模块,输入量为复数,输出量有两个,一个输出为输入信号的实部,另一个为输入信号的虚部
Derivative
输出输入信号的时间微分
Dot Product
两输入信号进行点积(内积)运算,无需设置参数
增益模块,将模块的输入信号乘上一个增益
Logical Operator
多输入单输出逻辑运算模块,可选择逻辑运算关系(与-AND,或-OR,非-NOT,异或-XOR等)、设置输入信号的个数
Magnitude-Angle to Complex
模角生成复数模块,默认输入量有两个: 一模一角。可设置输入量为模和角中的一个,另一个量设为某一固定值
Math Function
数学运算函数模块,默认值为输出量是输入量的e指数,可设置对数、平方根、平方等多种运算关系
Matrix Concatenaion
矩阵级联模块
Matrix Gain
矩阵增益模块,将输入乘上一个矩阵
计算最大与最小模块,输出量是输入向量的元素中的最小或最大值。可选择max或min,可设置输入变量的个数
Polynomial
多项式运算模块
乘积运算模块,输出模块的乘积或者是商,可设置输入量为元素或矩阵,可设置输入端口个数
Real-Imag to Complex
实部、虚部生成复数模块,默认输入量有两个:实部和虚部。可设置输入量为实部和虚部中的一个,另一个量设为某一固定值
Relational Operator
比较运算模块,可设置为&=(小于等于)、&=(大于等于)、&(小于)、&(大于)等运算关系
矩阵重新定维模块
Rounding Function
取整模块,实现一个舍入函数,可选的函数有:floor、ceil、round、fix
显示输入信号的符号,当输入大于0时输出为1,当输入小于0时输出为-1
Slider Gain
增益微调模块,按一条斜线来改变标量增益 Sum
产生输入信号的和
Trigonometric Function
实现一个三角函数,sin、cos、tan、asin、acos、atan等
Verification(模型验证模块库)库
参数确定模块
Check Static Gap
检测静态区间范围模块
Check Static Lower Bound
检测静态下限模块
Check Static Upper Bound
检测静态上限模块
Check Static Range
检测静态范围变化模块
Check Dynamic Gap
检测动态区间范围模块
Check Dynamic Lower Bound
检测动态下限模块
Check Dynamic Upper Bound
检测动态上限模块
Check Dynamic Range
检测动态变化范围模块
Check Dynamic Gradient
检测离散的斜率模块
Check Dynamic Resolution
检测输入分辨率模块
三亿文库包含各类专业文献、文学作品欣赏、高等教育、各类资格考试、幼儿教育、小学教育、外语学习资料、应用写作文书、专业论文、Simulink常用模块名称及其功能简介75等内容。 
 (Mask)功能模块 7 Sinks (接收器模块) Scope:示波器 XY Graph:显示二维图形 ...常用Simulink模块简介 暂无评价 3页 免费 Simulink常用模块名称及... 8页 2下载...  MATLAB中SIMULINK常用命令表+常用模块简介_信息与通信_工程科技_专业资料。MATLAB...simulink 窗口 bdroot 根层次下的模块名字 gcb 获取当前模块的名字 gcbh 获取...  SubSystem:建立新的封装(Mask)功能模块 接收器模块(...Simulink 中常用的模块库包括以下几种。 (1)信宿(...Simulink常用模块中文名... 12页 免费 SIMULINK中自...  Simulink各模块对应的中文名称及介绍_计算机软件及应用...If语句作用子系统模块 In 1:输入端口模块 Out1:...Simulink常用模块中文名... 12页 免费
MATLAB SIMULINK...  SIMULINK简介_专业资料。SIMULINK 简介 SIMULINK 是 MATLAB...在这个 窗口中列出了按功能分类的各种模块的名称。 ...开根号等常用数学函 数 Trigonometric Function:三角...  simulink常用模块中英文... 4页 免费 Simulink常用模块中文名... 12页 免费 常用Simulink模块简介 暂无评价 3页 免费喜欢此文档的还喜欢 Simulink常用模块中文名....  simulink常用模块_数学_自然科学_专业资料。SIMILINK 模块库按功能进行分为以下 8 类子库: (1)Continuous(连续模块) (2)Discrete(离散模块) (3)Function&Tables...  顾名思义, 该软件的名称表明了该系统的两个主要...基本的 simulink 模块 常用模块 各领域 内的工 具...功能简介 输入信号积分 线性状态空间系统模 型 线性...  Simulink实用的快捷键_电子/电路_工程科技_专业资料。simulink 一些实用的快捷键视图放大:r 视图缩小:v 视图适中、平铺到整个模型:空格键 / f 回到默认视图:1 用...Simulink基础入门教程
SIMULINK (1)快速入门 本章主要内容和学习目的首先介绍计算机仿真技术和仿真建模方法的基本概念,以 便对建模和仿真有个初步和整体的认识;然后对 Simulink 进 行简单介绍,并以一个简单例子进行引导;最后介绍 Simulink 的工作原理,为后续的深入掌握 Simulink 打下基础。 动态系统的计算机仿真 仿真三要素 Simulink 与建模仿真 Simulink 的安装 创建一个简单模型 模型基本结构 1.1 动态系统的计算机仿真1.1.1 系统与模型1. 系统 系统只指具有某些特定功能、相互联系、相互作用的 元素的集合。这里的系统是指广义上的系统,泛指自然界 的一切现象与过程,例如工程系统如控制系统、通讯系统 等,非工程系统如股市系统、交通系统、生物系统等。 2. 系统模型 系统模型是对实际系统的一种抽象,是对系统本质(或 是系统的某种特性)的一种描述。模型具有与系统相似的特 性。好的模型能够反映实际系统的主要特征和运动规律。 模型可以分为实体模型和数学模型。 实体模型又称物理效应模型,是根据系统之间的相似性而建 立起来的物理模型,如建筑模型等。 数学模型包括原始系统数学模型和仿真系统数学模型。原始 系统数学模型是对系统的原始数学描述。仿真系统数学模型 是一种适合于在计算机上演算的模型,主要是指根据计算机 的运算特点、仿真方式、计算方法、精度要求将原始系统数 学模型转换为计算机程序。静态系统模型 动态系统模型 连续系统模型 代数方程 集中参数 微分方程 分布参数 偏微分方程 离散系统模型 差分方程 1.1.2 计算机仿真1. 仿真的概念 仿真是以相似性原理、控制论、信息技术及相关领域的 有关知识为基础,以计算机和各种专用物理设备为工具,借 助系统模型对真实系统进行试验的一门综合性技术。 2. 仿真分类 (1)实物仿真:又称物理仿真。是指研制某些实体模型, 使之能够重现原系统的各种状态。早期的仿真大多属 于这一类。 优点:直观,形象,至今仍然广泛应用。 缺点:投资巨大、周期长,难于改变参数,灵活性差。 (2)数学仿真:是用数学语言去描述一个系统,并编制程 序在计算机上对实际系统进行研究的过程。 优点:灵活性高,便于改变系统结构和参数,效率高 (可以在很短时间内完成实际系统很长时间的 动态演变过程),重复性好 缺点:对某些复杂系统可能很难用数学模型来表达,或 者难以建立其精确模型,或者由于数学模型过 于复杂而难以求解 (3)半实物仿真:又称数学物理仿真或者混合仿真。为了 提高仿真的可信度或者针对一些难以建模的实体,在 系统研究中往往把数学模型、物理模型和实体结合起 来组成一个复杂的仿真系统,这种在仿真环节中存在 实体的仿真称为半物理仿真或者半物理仿真,如飞机 半实物仿真等。 3. 计算机仿真 计算机仿真是在研究系统过程中根据相似性原理,利用计 算机来逼真模拟研究系统。研究对象可以是实际的系统,也可 以是设想中的系统。在没有计算机以前,仿真都是利用实物或 者它的物理模型来进行研究的,即物理仿真。物理仿真的优点 是直接、形象、可信,缺点是模型受限、易破坏、难以重用。 计算机仿真可以用于研制产品或设计系统的全过程,包括方案 论证、技术指标确定、设计分析、故障处理等各个阶段。如训 练飞行员、宇航员的方针工作台和仿真机舱等。 1.2 仿真的三要素计算机仿真的三个基本要素是系统、模型和计算机,联 系着它们的三项基本活动是模型建立、仿真模型建立(又称 二次建模)和仿真试验。 数学仿真采用数学模型,用数学语言对系统的特性进行描 述,其工作过程是: 建立系统的数学模型; 建立系统仿真模型,即设计算法,并转化为计算机程序,使 系统的数学模型能为计算机所接受并能在计算机上运行; 运行仿真模型,进行仿真试验,再根据仿真试验的结果进 一步修正系统的数学模型和仿真模型。 1.3 Simulink 与建模仿真1.3.1 Simulink Simulink 是一种用来实现计算机仿真的软件工具。它是 MATLAB 的一个附加组件,可用于实现各种动态系统(包 括连续系统、离散系统和混合系统)的建模、分析和仿真。 特点:易学易用,能够依托MATLAB提供的丰富的仿真资源 1.3.2 Simulink 的应用领域 (1)通讯与卫星系统; (3)生物系统; (5)汽车系统; (7)控制系统。 (2)航空航天系统; (4)船舶系统; (6)金融系统; 1.3.3 Simulink 应用举例(原教材P6例子)在Matlab命令窗口中输入 dblcart1 右图所示的模型用来 模拟双质量-弹簧系 统在光滑平面上受一 个周期力情况下的运 动状态,其中周期力 只作用在左边的质量 块上。 F(t)x' = Ax+Bu y = Cx+Du PlantDemux Actual PositionKOut1In1In1 Out1 In2crtanim2 Animation functionFeedback gain using LQR design.State estimatorInputs & SensorsInputs & Sensors1 Double Mass-Spring System (Double click on the &?& for more info) To start and stop the simulation, use the &Start/Stop& selection in the &Simulation& pull-down menu ?Estimated Position Double click here for SIMULINK Help 此模型中使用了状态 判断和LQR控制。 模 型 中 还 有 几 个 “ 隐 藏 了 真 实 身 份 ”的 子 系 统 , 如 图 中 的 Inputs&Sensors 模块和 State estimator 模块。 双击后可看到 它们的“真实面目”。1 In1 2 In2 Mux Inputs & Sensors 1 Out1x' = Ax+Bu y = Cx+Du Plant Demux Actual PositionKOut1In1In1 Out1 In2crtanim2 Animation functionFeedback gain using LQR design.State estimatorInputs & Sensors1 In1x' = Ax+Bu y = Cx+Du State estimatorInputs & Sensors1Estimated Position Double click here for SIMULINK Help1 Out1Double Mass-Spring System (Double click on the &?& for more info) To start and stop the simulation, use the &Start/Stop& selection in the &Simulation& pull-down menu? 运行菜单选项【Simulation&Start】,则屏幕上出现双质量- 弹簧系统运动状态的动画图形。 模型中的Actural Position模块和Estimated Position模块用来 显示在一个周期内的左边质量块的位置轨迹。 1.4 Simulink 的安装系统要求: 奔腾100以上CPU,16MB以上内存,Windows 9x或Windows NT 安装: 随MATLAB安装或单独安装。 启动 Simulink: 首 先 启 动 MATLAB , 然 后 在 MATLAB 窗 口 中 单 击 上 面 的 Simulink按钮或在命令窗口中输入simulink。 1.5 创建一个简单模型两个例子例子1& ? x(t ) = sin(t ) ? ? x(0) = 0x(t ) = ? cos(t ) + C C 为常数 利用初始条件 C = 1x(t ) = ? cos(t ) + 1 创建模型步骤步骤一:添加模块& ? x(t ) = sin(t ) ? ? x(0) = 01 s Sine Wave Integratorx(t ) = ? cos(t ) + 1Scope从源模块库(Sources)中复制正弦波模块(Sine Wave)。 连续模块库(Continuous)复制积分模块(Integrator)。 输出显示模块库(Sinks)复制示波器模块(Scope)。1步骤二:连接模块Sine Waves Integrator2 1.8 1.6 1.4Scope步骤三:运行仿真双击示波器模块,打开Scope窗口。双击模 型窗口菜单中的【 Simulation&Start 】,仿 真执行,结果如图所示。1.2 1 0.8 0.6 0.4 0.2 0012345678910 如果将以上算例的初始条件改为:x(0) = ?1& ? x(t ) = sin(t ) ? ? x(0) = ?1系统的解析解为:利用初始条件C =0x(t ) = ? cos(t )1 s Sine Wave1 0.8Simulink模型:IntegratorScope在仿真时,需要将积分 1 模块 s 的初始值设置 为-1,最终可以得到 标准的余弦曲线0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1012345678910 例子2 单自由度系统: 初始条件:m&& + cx + kx = 0 x &解析解为:& & x(0) = x0 = 1, x(0) = x0 = 0m 要求:采用 Simulink 对系统进行仿真。已知参数:= 1, c = 1, k = 1x(t ) = e其中:?ζω 0t? ? & x0 + ζω 0 x0 sin(ωd t )? ? x0 cos(ωd t ) + ωd ? ?系统固有频率k ω0 = mω d = ω0 1 ? ζ 2c ζ = 2 km阻尼固有频率相对阻尼系数 m&& + cx + kx = 0 x & k c && + x + x = 0 & x m m1 c/m初值设置为0& & x(0) = x0 = 1, x(0) = x0 = 0m 已知参数:= 1, c = 1, k = 1初值设置为11 s Scope 积分得到位移&& x1 s& xx积分得到速度1 k/m 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6051015 如果系统中没有阻尼,则动力方程为:m&& + kx = 0 x初始条件:已知参数:m = 1, k = 1& & x(0) = x0 = 1, x(0) = x0 = 0解析解为:x(t ) = x0 cos(ω0t ) +ω0& x0sin(ω0t )k 其中: ω0 = m系统固有频率 m&& + kx = 0 x已知参数: 初始条件:m = 1, k = 1k && + x = 0 x m& & x(0) = x0 = 1, x(0) = x0 = 0初值为0初值为1&& x1 s& x1 sxScope积分得到速度积分得到位移-1 -k/m 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1051015 1.6 模型基本结构一个典型的 Simulink 模型包括如下三种类型的元素: 信号源模块 被模拟的系统模块 输出显示模块 源模块 系统模块 显示模块Simulink 模型元素关联图信号源为系统的输入,它包括常数信号源、函数信号发生 器(如正弦波和阶跃函数波等)和用户自己在 MATLAB 中创建的自定义信号。 系统模块作为中心模块是 Simulink 仿真建模所要解决的 主要部分。 系统的输出由显示模块接收。输出显示的形式包括图形显 示、示波器显示和输出到文件或 MATLAB 工作空间中三 种。输出模块主要在 Sinks 库中。 SIMULINK (2)建模方法 本章内容和学习目的本章介绍一些模块的特殊操作,如模块操作、信号线操 作、模型注释等,对模块和信号线有一个整体认识,以便 为后续的动力学建模和仿真打下基础。 掌握模块操作、信号线操作、模型注释的基本技巧。 2.1 打开模型 2.2 模块操作 2.3 信号线操作 2.4 模型注释 2.5 创建一个复杂模型 2.6 模型和图形拷贝到Word文档中 2.1 打开模型1. 新建模型 2. 打开一个已存在的模型 方法1:通过【File&Open】命令; 方法2:在 MATLAB 命令窗中直接键入模型名。 2.2 模块操作2.2.1 调整模块大小 选中模块,模块四角出现小方块,然后按住鼠标拖曳 2.2.2 旋转模块 选中模块,然后选择菜单命令【Format&Rotate】,模 块将顺时针方向旋转90度。 2.2.3 模块的内部复制? ? ? 方法2:右键拖曳模块 ? ? ? 方法3:【Edit&Copy】和【Edit&Paste】 ? ? 方法4:选中模块,Ctrl+C复制,Ctrl+V粘贴 ?方法1:先按Ctrl键,再单击模块 2.2.4 删除模块 方法1:选中模块,按Delete键 方法2:选中模块,然后从模型窗口菜单中选择【Edit&Clear】 方法3:选中模块,然后选择菜单【Edit&Cut】,删至剪贴板 2.2.5 选中多个模块 方法1:按住Shift键,同时用鼠标单击想要选中的模块 方法2:使用“范围框”。在使用“范围框”后,若像继续选择 模块,可按住Shift键,再单击要选的模块即可。 若多个模块被选中,则这些模块可以被当作一个整体进行操 作,如移动、复制和删除等,操作方法和单个模块的操作方 法相同。 2.2.6 改变模块的标签 在标签的位置上双击鼠标,则模块标签进行编辑状态。 编辑完标签后,在标签外的任意位置上单击鼠标,则新的合 法标签将被承认。 2.2.7 改变标签位置 选择菜单命令【Format&Flip Name】,模块的标签将发 生翻转。若原标签位置在模块的左边,则翻转到右边。若原 标签位置在模块的下方,则翻转到上方。 2.2.8 隐藏标签 选择菜单命令【Format&Hide Name】,则模块的标签从 屏幕上消失。此时【Hide Name】变成为【Show Name】,选 中它可以重新显示标签。 2.2.8 增加阴影 选择菜单命令【Format&Show Drop Shadow】,则模块 增加阴影。此时【Show Drop Shadow】变成为【Hide Drop Shadow】,选中它可以隐藏阴影。 2.3 信号线操作2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 绘制信号线 移动线段 移动节点 删除信号线 分割信号线置 信号线标签2.4 模型注释2.4.1 增加注释的方法 2.4.2 改变注释字体 注意:要养成及时对模块和信号线的命名以及及时对模型 加标注的习惯,这会提高模型的可读性。 2.3.1 绘制信号线 ? 由输出端口拖曳鼠标到输入端口,或拖曳鼠标由输入端 口到输出端口1 s Integrator1 s Integrator1 Gain+1 Gain 2.3.2 移动线段 ? 若想移动信号线的某段,单击选中此段。移动鼠标到目标 线段上,则鼠标的形状变为移动图标。按住鼠标,并拖曳 到新位置。放开鼠标,则信号线被移动到新的位置。1 s Integrator1 s Integrator1 Gain1 Gain 2.3.3 移动节点 ? 若想移动信号线的某段,单击选中此段。移动鼠标到目标 线段上,则鼠标的形状变为移动图标。按住鼠标,并拖曳 到新位置。放开鼠标,则信号线被移动到新的位置。1 s Integrator1 s Integrator1 Gain1 Gain 2.3.4 删除信号线 ? 同删除模块一样,删除信号线可以选中信号线,然后按 Delete 键,或者利用菜单 【Edit/Clear】或【Edit/Cut】 选项进行删除。 2.3.5 分割信号线置 ? 先选中信号线。按住 Shift 键,然后在信号线上需要分割 的点上单击鼠标,拖动节点到新的位置,放开鼠标即可。1 Gain1 s Integrator1 Gain1 s Integrator 2.3.6 信号线标签 ? 每段信号线都可以有一个标签。双击要标注的信号线,则 信号线的附近就会出现一个编辑区,在编辑区内输入标签 的内容即可。1 s Integrator1 Gain 2.4 模型注释使用模型注释可以使模型更易读懂,其效果如同 MATLAB 程序中的注释行一样。对于经常使用 Simulink 的用户,养 成经常使用注释的习惯是非常重要的。 2.4.1 增加注释的方法 在模型窗口中的任何想要注释的部位上双击鼠标,将会出现 一个编辑框,在该框内输入想要注释的内容即可。 2.4.2 改变注释字体 要改变注释内容的字体,先选中注释,选择模型窗口菜单中 的【Format Font】选项,就会出现一个字体选择的对话框 ,选中认为合适的字体,然后按【OK】。 2.5 创建一个复杂模型通过两个算例来说明建模中的其他一些技巧 例子1一个生长在罐中的细菌的简单模型。假定细菌的出生率和当前细菌的总数成 正比,死亡率和当前的总数的平方成正比。若以 x 代表当前细菌的总数,则细菌 的出生率可表示为:birth _ rate = bx细菌的死亡率可表示为:death _ rate = px2细菌总数的总变化率可表示为出生率与死亡率之差。因此系统可表示为如下 的微分方程形式: 2 假定 b = 1 / h , p 细菌总数。= 0.5 / h& x = bx ? px,当前细菌的总数为100,计算一个小时后罐中的 & x = bx ? px步骤一:添加模块2这是一个一阶系统,因此一个用来解微分方程的积分模块是必 & 要的。积分模块的输入为 x,输出为 x 。& x1 sxIntegrator & x = bx ? px增益模块,来源于数学 模块库(Math)12乘法模块,来源于数学模块 库(Math),用于实现 x 2求和模块,来源于数 学模块库(Math)GainProduct1 sSumSum1IntegratorScopeGain1示波器模块,来源于输 出显示模块库(Sink)增益模块,来源于数学 模块库(Math)积分模块,来源于连续 模块库(Continuous) & x = bx ? px步骤二:连接模块12.Product1 sGain.ScopeSumSumIntegrator1Gain1 & x = bx ? px2b =1p = 0.5p = 0.5当前细菌的总数为100,计算一个消失后罐中的细菌总数步骤三:设置仿真参数0.5双击求和模块, 设置为“-+”. 双击积分模块,ProductGain将初值设置为1001 sSum.ScopeSumIntegrator1Gain1b =1 模型的起始时间默认为0,终止时间默认为10.0。需要改变终止 时间时,旋转模型菜单【Simulink&Parameters】,打开模型参 数对话框,设置【Stop time】为10.0。 现在模型就全部完成了,选择【File&Save】命令保存模型为 bio_example,Simulink 将以 bio_example.mdl 为文件名保存到 指定的位置。 步骤四:运行模型双击示波器模块,并选择【Simulink&Start】命令运行模型,示 波器将绘制出仿真结果。100 90 80 70 60 50 40 30 20 10 0012345 Time678910 例子2:三自由度结构的强迫振动P0sin(wt) 2k m x1 k m x2 k m x3 2k0 ? ? x 1 ? ? P0 sin( ω t ) ? ? 0 ? k ? ? x2 ? = ? ?? ? ? ? ? 3k ? ? x3 ? ? 0 ?k ?? ? ? ? ? P0 sin( ω t ) ? ? && 写成矩阵形式:M X + KX = P (t ) 0 P (t ) = ? ? ? ? ? 0 ? ? 0? ?m 0 ? x1 ? ?k 0 ? ? 3k ?x ? M = ? 0 m 0 ? ? X = ? 2? 2k ? k? ? ? K = ?? k ? ?0 ? 0 m? ? x3 ? ? ? 0 ?k 3k ? ? ? ? ? ?k 2k动力学方程: 0 ? ? &&1 ? ? 3 k x ?m 0 ? 0 m 0 ? ? && ? + ? ? k ? ? ? x2 ? ? ?0 0 m ? ? &&3 ? ? 0 ? ??x ? ? x ?m 0 0 ? ? &&1 ? ? 3k ? 0 m 0 ? ? && ? + ?? k x2 ? ? ? ?? ? 0 0 m? ? &&3 ? ? 0 ? ??x ? ??k 2k ?k0 ? ? x1 ? ? P0 sin(ωt )? ? 0 ? k ? ? x2 ? = ? ?? ? ? ? ? 3k ? ? x3 ? ? 0 ?? ? ? ?已知参数: m=1, k=1, P0=1,ω = 0.5解析解:倪振华《振动力学》P189 P233?? 3 ? ? 2 ? ? x1 (t ) ? ?1 ? ? x (t )? = ?0.088?2? P0 sin( wt ) ? 2.63? 0 ? P0 sin( wt ) + 0.21?? 2 ? P0 sin( wt ) ? ? k ? ? k ? 2 ? ? ? k ? 3 ? ? 2 ? ? x3 (t ) ? ?1 ? ? ? ? ? ? ? ? ?要求: 采用 Simulink 对系统进行动态仿真,并与解析解进行对 照,计算时间 0 ~ 50 ?m ?0 ? ?0 ?0 m 00 ? ? &&1 ? ? 3 k x 0 ? ? &&2 ? + ? ? k ??x ? ? m ? ? &&3 ? ? 0 ??x ? ??1?k 2k ?k0 ? ? x 1 ? ? P0 sin( ω t ) ? ? 0 ? k ? ? x2 ? = ? ?? ? ? ? ? 3k ? ? x3 ? ? 0 ?? ? ? ?已知参数: m=1, k=1,&& M X + KX = P (t ) & X& = ? MKX + M?1P (t )K*u K*uP0=1,ω = 0.5[0;0;0]质量阵的逆 M-1 1 s Integrator K*u 质量阵的逆 M-1 K*u [1;0;0]刚度阵K 1 s Integrator1ScopeSine Wave 频率调整为0.5[0;0;0] 0.60.40.20-0.2-0.4-0.6-0.805101520253035404550 2.6 模型和图形拷贝到Word文档中2.6.1 拷贝到Word文档 使用【Edit&Copy Model】命令,然后在 Word 中粘贴2.6.2 在Word文档中编辑模型和图形 使用取消组合命令 SIMULINK (3)运行仿真 本章内容和学习目的介绍两种 Simulink 运行仿真的方法3.1 使用窗口运行仿真 3.2 使用 MATLAB 命令运行仿真掌握以上两种运行仿真的方法 3.1 使用窗口运行仿真优点:人机交互性强,不必记住繁琐的命令语句即可进行操 作。使用窗口运行仿真主要可以完成以下一些操作。 1. 设置仿真参数 2. 应用仿真参数 3. 启动仿真 4. 停止仿真 5. 中断仿真 6. 仿真诊断仿真参数和算法选择的设置 仿真参数和算法设置后,使之生效 选择命令运行仿真 选择命令停止仿真 可以在中断点继续启动仿真,而停止仿真则不能 在仿真中若出现错误,Simulink 将会终止仿真并 在仿真诊断对话框中显示错误信息 1. 设置仿真参数选择菜单选项【Simulation&Parameters】,可以对仿真 参数及算法进行设置,共有五个选项卡 ? 解法设置(Solver) ? 工作间I/O(Workspace I/O) ? 诊断页(Diagnostics) ? 高级设置(Advanced) ? 实时工具对话框(Real-Time Workshop) ? 解法设置(Solver)(讲) 设置起始和终止时间,选择积分分解法,指定求解参数和 选择输出选项 ? 工作间I/O(Workspace I/O) (讲) 管理MATLAB工作间的输入输出项 ? 诊断页(Diagnostics)(不讲,自学) 选择在仿真中警告信息的等级 ? 高级设置(Advanced)(不讲,自学) 对仿真的一些高级配置进行设置 ? 实时工具对话框(Real-Time Workshop)(不讲,自学) 对实时工具中若干参数进行设置。若没有安装实时工具,不 出现此框。 (1) 解法设置页当选中菜单选项【Simulation&Parameters】后,出现参数 及算法等设置页。再点击【Solver】,则出现解法设置页。解 法设置页包括三项内容: 设置仿真的启动时间和终止时间 选择算法并指定参数 选择输出项 仿真时间 仿真解法(各种解法说明见下页) 默认解法(ode45) 变步长解法:ode45,ode23,ode113,ode15,discrete 定步长解法:ode5,ode4,ode3,ode2,ode1,discrete 最大步长 初始步长 输出选项: 用户用来控制仿真输出个数的对话框,共有三 个菜单选项:定义输出,产生附加输出,产生 指定输出。 各种ode命令的说明解法指令 ode45 ode23 ode113 ode23t ode15s ode23s 特 点 解题类 型 非刚性 采用4、5阶Runge-Kutta法 非刚性 非刚性 适度刚 性 刚性 刚性 采用Adams算法 适合场合 大多数场合的首选算法 较低精度(10-3)场合多步法;采用Adams算法;高 ode45计算时间太长时 低精度均可(10-3~10-6) 取代ode45 采用梯形法则算法 适度刚性 多步法;采用2阶Rosenbrock 算式,精度中等 一步法;采用2阶Rosenbrock 算式,低精度 采用梯形法则-反向数值微分 两阶段算法,低精度 当ode45失败时使用; 或存在质量矩阵时 低精度时,比ode15s 有效;或存在质量矩阵 时 低精度时比ode15s有 效;或存在质量矩阵时ode23tb刚性 (2) 工作间 I/OSimulink 作为 MATLAB 的一个附件,理应与 MATLAB 很好地结合,它的输入数据可以从 MATLAB 的工作空间中获 得,其仿真结果也可以被引入到 MATLAB的 工作空间。实现 此项功能需要用到仿真参数对话框中的工作间 I/O 页。 工作间 I/O 页大致可以分为三个部分: 从MATLAB工作空间获得系统输入(Load from workspace) 仿真结果输出到MATLAB的工作空间(Save to workspace) 输出选项(Save option) 下面对 Workspace I/O 选项页的功能与使用分别予以简介。 从MATLAB工作空间加载 (Load from workspace)虽然 Simulink 提供了多种系统输入信号,但并不能完全满 足需要。Simulink允许使用用户自定义的信号作为系统输入信 号。在 Load from workspace 框中,用户可以设置 MATLAB 中的变量作为系统输入信号或系统状态初值,如下所述: (1) Input:用来设置系统输入信号,其格式为 [t, u],其中 t、u 均为列向量,t 为输入信号的时间向量,u 为相应时刻的 信号取值。可以使用多个信号输入,如 [t, u1, u2]。输入信号 与 Simulink 的接口由 Inport 模块(In1模块)实现。1In11 s Integrator 1 s Integrator11 Out1 Scope 2 Out22 In2 从MATLAB工作空间加载 (Load from workspace)虽然 Simulink 提供了多种系统输入信号,但并不能完全满 足需要。Simulink允许使用用户自定义的信号作为系统输入信 号。在 Load from workspace 框中,用户可以设置 MATLAB 中的变量作为系统输入信号或系统状态初值,如下所述: (1) Input:用来设置系统输入信号,其格式为 [t, u],其中 t、u 均为列向量,t 为输入信号的时间向量,u 为相应时刻的 信号取值。可以使用多个信号输入,如 [t, u1, u2]。输入信号 与 Simulink 的接口由 Inport 模块(In1模块)实现。 (2) Initial state:用来设置系统状态变量的初始值。初始值 xInitial 可为列向量。 注意:使用 xInitial state 所设置的状态变量初始值会自动覆 盖系统模块中的设置。另外,输入信号与状态变量需要按照系统 日 模型中 Inport 模块(即 In1 模块)的顺序进行正确设置。 11理论力学CAI 章名 仿真结果输出到MATLAB的工作空间 (Save to workspace)使用 Workspace I/O 选项页可以将系统的仿真结果、系统 仿真时刻、系统中的状态或指定的信号输出到 MATLAB 的工 作空间中,以便用户对其进行定量分析,如下所述: (1) Time:输出系统仿真时刻。 (2) States:输出系统模型中的所有状态变量。 (3)Output:输出系统模型中的所有由 Output 模块(即 Out1 模块)表示的信号。 (4)Final state:输出系统模型中的最终状态变量取值,即最 后仿真时刻处的状态值。 1 1 1In12 In2 s Integrator Out1 2 Out2 1 s Integrator1 Scope 输出选项(Save option)(1) Limit data points to last:表示输出数据的长度(从信号 的最后数据点记起)。 (2) Format:表示输出数据类型。共有三种形式:Structure with Time(带有仿真时间变量的结构体)、Structure(不带 仿真时间变量的结构体)、Array(信号数组)。 举例说明:1 1 s Integrator 1 s Integrator1 1 Out1 Scope 2 Out2In12 In2 1In11 s Integrator 1 s Integrator11 Out1 Scope 2 Out22 In2假定两个输入信号都为正弦信号 sin(t),并且假定初始值为 [0,1]y = ∫ sin(t ) = ? cos(t ) + C? y1 = ? cos(t ) + 1 ? ? y 2 = ? cos(t ) + 2 1In11 s Integrator 1 s Integrator11 Out1 Scope 2 Out22 In2? y1 = ? cos(t ) + 1 ? ? y 2 = ? cos(t ) + 2将 Load from workspace 栏的两项全部选上,并且将 Input 栏 改写为[t, u, u]。 将 Save to workspace 栏的四项全部选上。 Save option 栏的三项分别为:1000,1,Array 运行仿真前,首先需要生成系统输入信号与状态初始值,在 MATLAB 命令窗口中键入如下命令: & t = 0: 0.1: 10; t = t’; & u = sin ( t ); & xInitial = [0, 1]; 1In11 s Integrator 1 s Integrator131 Out1 Scope 2 Out22 In2? y1 = ? cos(t ) + 1 ? ? y 2 = ? cos(t ) + 22.521.510.50012345 Time678910 运行 whos 的结果: Name Size Bytes Class 808 double array 408 double array 808 double array 16 double array 16 double array 816 double array 816 double arrayt 101x1 tout 51x1 u 101x1 xFinal 1x2 xInitial 1x2 xout 51x2 yout 51x2上面 t 和 tout 的维数不相同,这是因为在 Solver 中采用了变 步长解法,若采用定步长解法(步长取 0.1)则维数相同。 3.2 使用MATLAB命令运行仿真MATLAB 提供了 sim 命令,用户可以在 MATLAB 的环境下 以命令行或 M 文件的形式运行 Simulink 模型。 使用命令行方式,用户可以在脚本文件中重复地对同一系统在 不同的仿真参数或不同的系统模块参数下进行仿真,而无需一 次又一次启动 Simulink 图形窗口中的 Start Simulink。 如果需要分析某一参数对系统仿真结果的影响,用户可以很容 易地通过 for 循环自动修改任意指定的参数。下面对进行动态系统仿真的命令逐一介绍。首先看一个例子。 建立一个简单的动态系统,其功能如下: (1)系统的输入为一单位幅值、单位频率的正弦信号; (2)系统的输出信号为输入信号的积分。sin(t )要求如下:∫ sin(t)dt(1)系统的输入信号由 MATLAB 工作空间中的变量提供,时间 0~10s; (2)使用 MATLAB 绘制原始输入信号与系统运算结果的曲线。 问题描述: 原函数:sin(t )时间区域:t = 0 ~ 10s原函数的积分为: x(t ) = sin(t ) dt = ? cos(t ) + C 若取零初始条件,则有: 因此,有:∫C =1x(t ) = ? cos(t ) + 1 x(t ) = ? cos(t ) + 11 In1 1 s Integrator 1 Out1Simulink 模型 (保存文件名为:command_in_out) 对 Workspace I/O 页进行如下设置: (1)Load from workspace 栏:Input 打勾,并填入 sim_input (由 MATLAB 工作空间输入的输入名)。Initial state 不选。 (2)Save to workspace 栏:Time 和 Output 项勾上,State 和 Final state 项不勾。 (3)Save options 栏依次为:1000,1,Array x(t ) = ? cos(t ) + 11 In1 1 s Integrator 1 Out1在 MATLAB 工作空间中定义输入变量 sim_input 如下:&t = 0: 0.1: 10; t = t’; &u = sin ( t ); &sim_input = [ t, u ];% 表示输入信号的时间范围 % 产生输入正弦信号 % 传递给 Simulink 系统模型的变量 然后运行 Simulink 仿真。最后在 MATLAB 工作空间运行如下 命令: plot (t, u, tout, yout, ’--’); grid21.5u = sin(t ) yout = ? cos(tout ) + 110.50-0.5-1012345678910 3.2.1 使用 sim 命令进行动态系统仿真1 使用语法sim 命令的格式为: [ t, x, y ] = sim ( model, timespan, options, ut ) [ t, x, y1, y2, …, yn ] = sim ( model, timespan, options, ut )以上是完整的语法格式,实际使用时可以省略其中的某些参 数设置而采用默认参数。除了参数 “model” 外,其它的仿真参数 设置均可以取值为空矩阵,此时 sim 命令对没有设置的仿真参数 使用默认的参数值进行仿真,默认的参数值由系统模型框图决定 。用户可以使用 sim 命令的 options 参数对可选参数进行设置,这 样设置的仿真参数将覆盖模型默认的参数。 2 参数说明sim 命令的格式为: [ t, x, y ] = sim ( model, timespan, options, ut ) [ t, x, y1, y2, …, yn ] = sim ( model, timespan, options, ut )(1)model:需要进行仿真的系统模型框图名称; (2)timespan:系统仿真的时间范围(起始至终止时间),可有 如下形式: tFinal:设置仿真终止时间。仿真起始时间默认为0; [tStart tFinal]:设置起始时间 (tStart)与终止时间(tFinal); [tStart OutputTimes tFinal]:设置起始时间(tStart)与终止时 间(tFinal),并且设置仿真返回的时间向量 [tStart OutputTimes tFinal],其中 tStart、OutputTimes、tFinal 必须按照升序排列。 sim 命令的格式为: [ t, x, y ] = sim ( model, timespan, options, ut ) [ t, x, y1, y2, …, yn ] = sim ( model, timespan, options, ut )(3)options:由 simset 命令所设置的除仿真时间外的仿真参数; (4)ut:表示系统模型顶层的外部可选输入。ut 可以是 MATLAB 函数。可以使用多个外部输入 ut1、ut2、…。 (5)t:返回系统仿真的时间向量。 (6)x:返回系统仿真的状态变量矩阵。 (7)y:返回系统仿真的输出矩阵。按照顶层输出 Outport 模块的 顺序输出。如果输出信号为向量输出,则输出信号具有与此向量相 同的维数。 (8)y1,…,yn:返回多个系统仿真的输出。 3 举例之一:简单仿真1 In1x(t ) = ? cos(t ) + 1输入:sin(t)1 s Integrator1 Out1文件名: command_in_out对于前面的动态系统 command_in_out,在前面进行仿真时没 有使用命令行方式,在此采用命令行语句进行仿真。在仿真之前 ,首先使用仿真参数设置对话框设置参数,然后在 MATLAB 命 令窗口中键入如下命令: &t = 0: 0.1: 10; t = t’; &u = sin ( t ); &sim_input = [ t, u ]; % 表示输入信号的时间范围 % 产生输入正弦信号 % 传递给 Simulink 系统模型的变量&[ tout, x, yout ] = sim ( ‘command_in_out’ ) % 使用 sim 进行系统仿真,仿真参数取与前面相同 &plot ( t, u, tout, yout, ‘--’ ); grid 4 举例之二:仿真时间设置 在前面已经对 sim 命令中的仿真时间参数 timespan 设置 做了介绍。 Timespan 具有三种使用形式,根据不同动态系统 的不同要求,用户可以选择使用如下所示的三种形式进行系 统仿真: [ t, x, y ] = sim ( model, tFinal ) [ t, x, y ] = sim ( model, [ tStart, tFinal] ) [ t, x, y ] = sim ( model, [ tStart outputTimes tFinal ] ) [ t, x, y ] = sim ( model, tFinal ) [ t, x, y ] = sim ( model, [ tStart, tFinal] ) [ t, x, y ] = sim ( model, [ tStart outputTimes tFinal ] ) 此外在默认情况下,系统仿真的输出结果(输出时间、状态和 运算结果)受到 Simulink 求解器仿真步长的控制,因而系统仿 真输出结果也受到求解器步长的控制。 如果需要在指定的时刻输出系统仿真结果,则需要使用仿真时 间设置的第三种方式,其中 [tStart outputTimes tFinal] 表示输 出 时 间 向 量 , 此 向 量 为 一 递 增 行 向 量 。 在 sim 命 令 中 使 用 timespan 设置系统仿真时间范围,会覆盖 Simulink 原来的仿真 时间设置,但是并不会影响到系统模型。 1 In11 s Integrator1 Out1输入:sin(t)x(t ) = ? cos(t ) + 1仍以前面的 command_in_out 为例进行说明。仿真参数设置对 话框内的设置与前面相同。使用四组不同的仿真时间对此系统 进行仿真。 为了与系统模型文件 command_in_out.mdl 区别,所编制的 M 文 件 名 取 为 command_in_out_m_m 。 若 M 文 件 名 取 为 command_in_out.m,则在 MATLAB 工作空间运行时,将返回 系统模型文件框图。 M文件名:command_in_out_m &t=0:0.1:10; t=t’; u=sin(t); sim_input=[t,u];&[tout1,x1,yout1]=sim(‘command_in_out’,5); % 仿真时间范围0~5s,输出时 间向量 tout1 由 Simulimk 的求解器步长决定 &[tout2,x2,yout2]=sim(‘command_in_out’,[1 8]); % 仿真时间范围1~8s,输 出时间向量 tout2 由 Simulimk 的求解器步长决定 &[tout3,x3,yout3]=sim(‘command_in_out’,[1:8]); % 仿真时间范围1~8s,并 且每隔 1s 输出一次,即输出时间变量为 [1 2 3 4 5 6 7 8] &[tout4,x4,yout4]=sim(‘command_in_out’,1:0.2:8); % 仿真时间范围1~8s, 并且每隔 0.2s 输出一次,即输出时间变量为 [1 1.2 1.4 … 7.6 7.8 8] &subplot(2,2,1); plot(t,u,tout1,yout1,’*’); &subplot(2,2,2); plot(t,u,tout2,yout2,’*’); &subplot(2,2,3); plot(t,u,tout3,yout3,’*’); &subplot(2,2,4); plot(t,u,tout4,yout4,’*’); &t=0:0.1:10; t=t’;u=sin(t);sim_input=[t,u];&[tout1,x1,yout1]=sim(‘command_in_out’,5); &[tout2,x2,yout2]=sim(‘command_in_out’,[1 8]); &[tout3,x3,yout3]=sim(‘command_in_out’,[1:8]); &[tout4,x4,yout4]=sim(‘command_in_out’,1:0.2:8); &subplot(2,2,1); plot(t,u,tout1,yout1,’*’); &subplot(2,2,2); plot(t,u,tout2,yout2,’*’); &subplot(2,2,3); plot(t,u,tout3,yout3,’*’); &subplot(2,2,4); plot(t,u,tout4,yout4,’*’);2 21100输入:sin(t)-10510-10510x(t ) = ? cos(t ) + 11 1 s In1 Integrator 日理论力学CAI 章名221 Out11100-10510-1320 5 10 5 举例之三:外部输入变量设置 前面对动态系统 command_in_out 进行仿真时,通过设置 Simulink 仿真参数设置对话框中 Workspace I/O 中的外部变量 输入,以使系统在仿真过程中获取输入信号 sim_input。除了使 用这种方法从 MATLAB 工作空间中获得系统输入信号之外, 用户还可以通过使用 sim 命令中的 ut 参数来设置系统的外部输 入信号。下面介绍如何使用 ut 参数设置外部输入信号。 仍以 command_in_out 为例进行说明。使用如下命令: [t, x, y]=sim (model, timespan, options, ut) ut 为一个具有两列的矩阵,第一列表示外部输入信号的时间, 第二列代表与时间列相对应的外部输入信号。 输入:sin(t)x(t ) = ? cos(t ) + 11 In11 s Integrator1 Out1 MATLAB 程序(程序名:command_in_out_m2.m) &t=0:0.1:10; t=t’; u=sin(t); sim_input=[t, u];&[tout1, x1, yout1]=sim(‘command_in_out’, 10); % 使用 Simulink 仿真参 数对话框中的 workspace I/O 从 MATLAB 工作空间中获得输入信号 &u=cos(t); &ut=[t, u]; % 改变系统输入信号 &&[tout2, x2, yout2]=sim(‘command_in_out’, 10, [], ut); % 使用 Sim 中的 ut 参数获得系统输入信号, ut的使用会覆盖由 Workspace I/O 的系统输入设 置,这一点可以在下面的系统仿真结果图形中反映出来 &subplot(1, 2, 1); &subplot(1, 2, 2); plot(tout1, yout1); plot(tout2, yout2); grid gridyout1 = ∫ sin(tout1)d (tout1) = ? cos(tout1) + 1 yout 2 = ∫ cos(tout 2)d (tout 2) = sin(tout 2) 2 1.5 1 0.5 0 0 1 0.5 0 -0.5 -1 01 In11 s Integrator1 Out1yout 1 =1 2 3 4 5 6 7 8 9 10∫ sin( tout 1) d (tout 1) = ? cos( tout 1) + 1yout 2 =∫ cos( tout 2 ) d (tout 2 ) = sin( tout 2 )12345678910图中上图表示系统输入为 sin(t) 时的相应曲线,下图表示 cos(t) 时的相 应曲线。从图中可明显看出,当使用 sim 命令的 ut 参数时,Simulink 仿真 参数设置对话框中的设置被覆盖。以前对话框中的外部输入是名为 sim_input 的正弦信号,而采用 ut 参数后执行的余弦输入信号。注意:这里 指的“覆盖”,并不是在 Workspace I/O 对话框的 Input 中,将 sim_input 改 变成了 ut,事实上并没有改变,只是不执行 sim_input,而执行了命令行中 的 ut。 3.2.2 simset 命令simset 命令是用来创建和编辑 options 结构的。3.2.3 simget 命令simget 命令用来获得系统模型的仿真参数设置。3.2.4 simplot 命令使用语法: simplot ( data ); simplot ( time, data ); 说明:data 是动态系统方针结果的输出数据,一般由 outport 模 块、To Workspace 模块等产生的输出,其数据类型可以为矩阵 、向量或是结构体等。 SIMULINK (4)基本模块介绍 本章内容和学习目的Simulink 模块的基本知识 基本模块的性质分类和基本操作 4.1 连续系统模块大多数物理系统可以用微分方程进行描述,因此可以用连 续系统模拟。最简单的模型是线性模型和定常模型。 例如,振动理论中的动力学方程:& M&&(t ) + Cx (t ) + Kx (t ) = P (t ) x其中,x 为系统的广义坐标列向量,M 为质量矩阵,C 为阻 尼矩阵,K 为刚度矩阵,P(t)为外部激励列向量。 在 Simulink中,用来模拟连续系统的基本模块有四个:增义模 块,求和模块,微分模块,积分模块。除了这四个基本模块, 传递函数模块也经常用来模拟物理系统和控制器。 1. 增益模块 作用:使增益模块的输入信号乘以一个常数,并输出。 可用代数表达式表示为: y(t) = k x(t) 简图如下:x(t)k增益模块y(t)k GainSimulink 增义模块图注意:y(t)、x(t)、k 可以为标量、向量或矩阵。来自Sinks库10 Display标量乘积:来自Sources库2 5 Constant Gain 标量和向量的乘积?1 ? ? 2 ? 2× ? ? = ? ? ? 2? ? 4?向量和标量的乘积2Constant[1;2]* u Gain2 4Display[12]× 2 = [2 4](1 2) Constantu *2 Gain24 Display向量和矩阵的乘积?1 2? [1 2]× ? ? = [7 10] ?3 4?矩阵和向量的乘积(1 2) Constantu* 1 2 3 4710DisplayGain 5 11?1 2? ?1 ? ? 5 ? ?3 4? × ?2? = ?11? ? ? ? ? ? ?1 2 3 4 Constantu* 1 2Display Gain 2. 求和模块 作用:对两个或多个信号进行求和运算。 可用代数表达式表示为: c=a+b 两种形状:圆形和方形。a c a b cb求和模块必须至少有一个输入而仅有一个输出。输入的正负 号的数目由双击模块进入编辑栏进行设定。 求和模块不但可以进行标量求和运算,也可以进行向量或矩 阵求和运算,但是标量或矩阵的维数必须相等。 标量求和25 Display Constant12+3= 5向量求和Constant3[1;2]?1 ? ?2? ?3? ?2? + ?3? = ?5? ? ? ? ? ? ?矩阵求和3 5 Display [2;3] Constant1Constant?1 2? ?2 3? ?3 5? ?3 4? + ?4 5? = ?7 9? ? ? ? ? ? ?1 2 3 4 Constant 2 3 Constant1 4 53 75 9Display 3. 微分模块 作用:计算输入对时间的变化率。 代表如下微分方程: 微分模块如图所示: 例如,对于动力学方程:dx & y= =y dtdu/dt Derivative&& & M x (t ) + C x (t ) + Kx (t ) = P (t )考虑对正弦信号 sin (t) 的微分:d [sin(t )] = cos(t ) dtSimulink 模型框图和仿真结果如下页图形所示。 d [sin(t )] = cos(t ) dt1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1du/dtSine Wave Derivative Scope012345678910 4. 积分模块作用:计算输入信号从起始时间到当前时刻对时间的积分。 代表如下微分方程: y (t ) = y (t0 ) + 积分模块如图所示: 例如:1 s Integrator1 0.8 0.6 0.4 0.2∫t t0x(τ )dτy (t ) = ∫ sin(t )dt = ? cos(t ) + C = ? cos(t )注:y(t) 的初值假设为-10 -0.2 -0.4 -0.6Sine Wave1 s Integrator-0.8Scope-1012345678910初值设置为 -1 5. 简单物理模型利用前面所介绍的这些模块可以模拟由线性微分工程描述的任何物 理模型。例如,考虑如下所示的简单的小车系统运动。 x F 忽略摩擦力,运 动微分方程为:m&& = F xF && = x m可用模块图表示为:加入两个积分模块,第一个模块用来计 算速度,第二个模块用来计算位移:F1 m&& xF1 m&& x && x1 s& x & x1 sx假定 F=sin(t) 为正弦激励 ,m=0.5。求0~20s 区间 内的系统位移响应曲线。Sine WaveF1 m1 s1 sxScope F && = x m40FSine Wave1 m&& x1 s& x1 sxScopex F35 30 25 20 15 10 5 002468101214161820 若要求同时输出位移和速度,则模型框图为:F && = x mSine WaveFx401 m&& x1 s& x1 sxScopeF35 30 25 20 15 10 5 002468101214161820 若要求同时输出位移、速度和加速度,则模型框图为:F && = x mx FFSine Wave1 m&& x1 s& x1 sxScope40 35 30 25 20 15 10 5 0 -502468101214161820 k cx& m&& + cx + kx = 0, x(0) = 0.2, x(0) = 0 x & m = 0.5, k = 1, c = 0.05c k && = ? x ? x & x m m0.2 0.15 0.1动力方程变换为:0.05 1 && = ? & x x? x 0.5 0.51/0.5&& xGain1 1 s s Integrator Integrator1& xxScope0.05 0 -0.050.05/0.5 Gain1初值设置为0.2-0.1 -0.15 -0.2051015202530 6. 传递函数模块传递函数表示法频繁地应用于控制系统设计和系统的动态模拟。传 递函数定义为系统在零初始条件下输出的 Laplace 变换与输入的 Laplace 变换之比。传递函数是一种描述系统动力学输入输出关系的简便方法。 例如: 考虑弹簧质量阻尼系统 x k c F(t) 动力学方程可写为:m&& + cx + kx = F x &作 Laplace 变换,并忽略初始条件,有:ms 2 X ( s ) + csX ( s ) + kX ( s ) = F ( s )则系统的传递函数可表示为:1 1/ m X ( s) G(s) = = 2 = F ( s ) ms + cs + k s 2 + c s + k m m m&& + cx + kx = F x & 1 1/ m X ( s) G(s) = = 2 = F ( s ) ms + cs + k s 2 + c s + k m m使用基本模块元素所建立起的系统模型k m相对应的传递函数模型1 m+&& x1 s& x1 sx1/m s 2+(c/m).s+(k/m) Transfer Fcnc mc k 1 && = ? x ? x + F & x m m m 以前面受正弦外力作 用的质量块为例: && = x x FF mSimulink 模型仿真框图为:F=sin(t) m=0.540 35 30 25FSine Wave1 m&& x1 s& x1 sxScope传递函数仿真框图:Sine Wave1/0.5 s2 Transfer Fcn20 15 10 5 0Scope传递函数分子输入:1/0.5 分母输入:[1, 0, 0]02468101214161820G ( s) =1/ m X ( s) = F ( s) s 2 + c s + k m m 对传递函数模块的说明: ? 用传递函数模块对线性定常系统进行仿真,能够使仿真模型 简单和紧凑,但是无法输出内部变量,如 x 的导数。 ?无法适用具有初始条件的情况。 ? 传递函数模块只适用于单输入单输出系统,即单自由度系统 ,但无法应用于多输入多输出系统,即多自由度系统。4.2 状态空间模块状态空间模块可以起到与传递函数模块相同的作用。所不同 的是,状态空间模块允许用户指定初始条件,并且可以共享 内部变量。另外,状态空间模块可以用来模拟多输入多输出 系统。 1. 状态空间的概念考虑如下单自由度系统:& m&&(t ) + cx(t ) + kx(t ) = F (t ) xx(t) 为系统的广义坐标;m、k、c 分别为单自由度系统的质量、刚度、阻 尼系数;F 为系统的外部输入。这些变量都是标量。 令:? x(t )? Y (t ) = ? x(t )? ?& ?& 以 x (t ) 和 x (t ) 构成的空间即为状态空间Y(t) 为一个2维列向量,称为系统的状态向量。利用状态向量Y(t),则上述 动力方程可转化为:& ? x(t )? ? 0 & Y (t ) = ? ? = ?? m ?1k x ? &&(t )? ?& 1 ? ? x(t )? ? 0 ? ? + ?m ?1 ? F (t ) ?1 ? ? x ? m c ? ? &&(t )? ? ?输入矩阵& Y (t ) = AY (t ) + BF (t )系统矩阵 考虑 n 自由度系统:&& & MX (t ) + CX (t ) + KX (t ) = F (t )X (t ) = [ x1 (t ), x2 (t ), L, xn (t )]T ∈ R n×1M ∈R K ∈ R n×n令:n×nn 维广义坐标列向量 阻尼矩阵 外部输入列矩阵质量矩阵 刚度矩阵C ∈ R n×n F (t ) ∈ R n×n? X (t )? Y (t ) = ? & ? ∈ R 2 n×1 ? X (t )?2n 维系统状态列向量系统的状态方程:& Y (t ) = AY (t ) + BF (t )I n× n ? ∈ R 2 n× 2 n ? M ?1C ? ?? 0 n× n ? B = ? ?1 ? ∈ R 2 n×n ?M ?输入矩阵? 0n×n A=? ? M ?1 K ?系统矩阵 2. 线性单输入输出系统k c x& m&& + cx + kx = 0, x(0) = 0.2, x(0) = 0 x & m = 0.5, k = 1, c = 0.05 & Y (t ) = AY (t )? 0 ? ? 0? B = ? ?1 ? = ? ? ? m ? ? 2?写成状态方程形式,有:? 0 A=? ? m ?1k ?A=[0, 1; -2, -0.1]1 ? ?0 1 ? =? ?1 ? ? m c ? ?? 2 ? 0.1? ?在状态空间模块中输入:x' = Ax+Bu y = Cx+Du Scope State-SpaceB=[0; 2] %因为没有外部输入,也可B=[0; 0] C=[1, 1] % 不能写成C=[0, 0],否则输出为0 D=0 x' = Ax+Bu y = Cx+Du Scope State-Space说明:对于本算例,因为考虑 的是没有外部输入的自由振动 ,因此状态空间模块可以没有 左端输入。0.2 0.15 0.1 0.05 0 -0.05 -0.1 -0.15 -0.2说明:左图是取C=[1,0]时 的结果。若取C=[1,1],则 在 Scope 的 图 形 中, 将显 示出位移和速度数据叠加 后的数据的图形。 示波器输出为y的图形? x? y = [1, 1]? ? & ? x?0 5 10 15 20 25 30 x' = Ax+Bu y = Cx+Du若取C=[1, 0],则示波器显示 出位移时程0.2Scope State-Space0.15 0.1 0.05 0 -0.05 -0.1 -0.15 -0.2051015202530也 可 : C=[1,0;0,1] , D=zeros(2,1) 直接得出以下图形0.3 0.2若取C=[0, 速度时程0.3 0.21],则示波器显示0.10.100-0.1-0.1-0.2-0.2-0.3-0.3-0.4051015202530-0.4051015202530 3. 多输入输出系统k1 c1 x1 k2 c2 x2m1 = 0.5, m2 = 1 k1 = 1, k 2 = 2 c1 = c2 = 0.05? x1 (t ) ? X (t ) = ? x2 (t )? ? ?&& & MX (t ) + CX (t ) + KX (t ) = 0?m1 0 ? M =? 0 m2 ? ? ??k1 + k 2 K =? ? ? k2? k2 ? k2 ? ??c1 + c2 C=? ? ? c2? c2 ? c2 ? ?? x1 (0) ? ?0.2? X (0) = ? ?=? 0 ? ? x2 (0)? ? ?& & (0) = ? x1 (0) ? = ?0? X ? x (0)? ?0? ? &2 ? ? ? k1 c1x1k2 c2x2m1 = 0.5, m2 = 1 k1 = 1, k 2 = 2 c1 = c2 = 0.05&& & MX (t ) + CX (t ) + KX (t ) = 0? x1 (0) ? ?0.2? X (0) = ? ?=? 0 ? ? x2 (0)? ? ?& & (0) = ? x1 (0) ? = ?0? X ? x (0)? ?0? ? &2 ? ? ?? 0 A = ? 2×?21 ?? M K I 2×2 ? ? M ?1C ? ?& (t ) = AY (t ) Y (t ) = ? X (t )? 写成状态方程: Y ? X (t )? &? ?初始条件:系统矩阵:0 1 0 ? ?0 ?0 0 0 1 ? ? A=? ?? 6 4 ? 0.2 0.1 ? ? ? 2 ? 2 0.05 ? 0.05? ??0.2? ? ? ? X (0)? ? 0 ? Y (0) = ? & (0)? = ? 0 ? ?X ? ? ? ?0? && & MX (t ) + CX (t ) + KX (t ) = 0& Y (t ) = AY (t )0 1 0 ? ?0 ?0 0 0 1 ? ? A=? ?? 6 4 ? 0.2 0.1 ? ? ? 2 ? 2 0.05 ? 0.05? ??0.2? ?0? Y (0) = ? ? ?0? ? ? ?0?在状态空间模块中输入:A=[0,0,1,0;0,0,0,1;-6,4,-0.2,0.1;2,-2,0.05,-0.05] B=[0;0;0;0] %因为没有外部输入 C=[1,1,1,1] % 不能写成C=[0,0,0, 0],否则输出为0 D=0x' = Ax+Bu y = Cx+Du Scope State-Space k1 c1x1 m1k2 c2x2x' = Ax+Bum2y = Cx+Du Scope State-Space示波器显示的第一 个质量的位移时程 C=[1,0,0,0]0.2在MATLAB工作空间画出 的两个质量的位移时程 也可:C=[1,0,0,0;0,1,0,0] D=zeros(4,1)直接得出0.2 0.150.150.10.10.050.0500-0.05-0.05-0.1-0.1-0.15051015202530-0.15051015202530 k1 c1x1 m1k2 c2x2x' = Ax+Bum2y = Cx+Du Scope State-Space在MATLAB工作空间画出的两个质量的速度时程 也可:C=[0,0,1,0;0,0,0,1],D=zeros(4,1)直接得出0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 -0.5051015202530 4.3 离散系统模块离散系统采用差分方程表示。离散信号是一组以采样周期为 间隔的离散时间序列。对于大多数的物理系统,信号原本都是在 时间上连续的。但在对信号的采集过程中,需要通过传感器等采 集工具对信号进行采集,因此最终得到的信号都是以采样周期为 时间间隔的离散数据。若原物理系统也用离散数据形式进行描述 ,则构成了离散时间系统。 离散增益模块 ? ? 与连续系统采用的模块相同 离散求和模块 ? 离散延迟模块 时间离散积分模块 简单离散系统模型 离散传递函数模块1. 2. 3. 4. 5. 6. 4.4 离散状态空间模块1. 连续时间系统的离散化考虑 n 自由度线性定常系统: 其中: Y (t ) ∈ R n×1 ,& Y (t ) = AY (t ) + Bu(t )(1)A ∈ R n×n , B ∈ R n×r , u(t ) ∈ R r×1t式(1)的解析解: Y (t ) = e A( t ?t0 )Y (t0 ) + ∫ e A( t ?τ ) Bu(τ )dτt0(2)令:t0 = kT , t = (k + 1)T其中:T 为数据采样周期并采用如下零阶保持器: u(t ) = u( k ), 则式(3)转化为: Y (k + 1) = e Y (k ) + ∫ATkT ≤ t & (k + 1)T( k +1)T kT(3)e A[( k +1)T ?τ ] dτBu(k )令:t = (k + 1)T ? τY (k + 1) = e Y (k ) + ∫ e At dtBu(k )AT 0 T则上式变为:(4) & Y (t ) = AY (t ) + Bu(t )Y (k + 1) = e AT Y (k ) + ∫ e At dtBu(k )0 T(1) (4) (5) (6)令:F =eAT∈Rn× n, G = ∫ e At dtB ∈ R n×r0T则式(4)转化为:Y (k + 1) = FY (k ) + Gu(k )式(5)中的两个变量将于有限时间内趋于常值矩阵。 这样,式(1)所示的连续时间系统就转换成了式(6)所示的离散时间系统 。矩阵 F 称为离散时间系统的系统矩阵,G 称为离散时间系统的输入矩阵。2. F 和 G 的计算根据矩阵指数的定义,有: F = e 同时不难求得: G = ∫T 0AT ∞ A 2T 2 Ak T k = I + AT + +L = ∑ 2! k! k =0∞ Ak T k +1 Ak ?1T k e dtB = ∑ B=∑ B k! k = 0 ( k + 1)! k =1 ∞ At 3. 离散状态空间模块x(n+1)=Ax(n)+Bu(n) y(n)=Cx(n)+Du(n)Discrete State-Space4. 采用离散状态空间模块进行仿真 对于两自由度系统: && & MX (t ) + CX (t ) + KX (t ) = 0 & X (0) = [0.2 0]T X (0) = [0 0]T? x1 (t ) ? ?m1 X (t ) = ? M =? x2 (t )? ? ? ?0 0? m2 ? ?k1 c1 x1 m1 k2 c2 x2 m2?k1 + k 2 K =? ? ? k2? k2 ? k2 ? ??c1 + c2 C=? ? ? c2? c2 ? c2 ? ? && & MX (t ) + CX (t ) + KX (t ) = 0& X (0) = [0.2 0]T X (0) = [0 0]T? X (t )? Y (t ) = ? & ? ? X (t )?& 写成状态方程: Y (t ) = AY (t )? 02×2 A=? ? M ?1 K ?I 2×2 ? ? M ?1C ? ?? X (0)? 初始条件: Y (0) = ? & ? = [0.2 0 0 0]T ? X (0)?连续时间系统的 系统矩阵:? 0 ? 0 A=? ?? 6 ? ? 2 0 0 4 ?2 1 0 ? 0 .2 0 . 05 ? 1 ? ? 0 .1 ? ? ? 0 . 05 ? 0离散时间系统的系统矩阵(假 定采样周期为 T=0.02)(程序名:chap5_section53.m)0 ? ? 0.8 0.02 ? 0.6 0 0.02 ? ? F =? ?? 0.8 0.8? ? ? 0.0399 ? 0.4 0.9986? ?Y (k + 1) = FY (k )Y (0) = [0.2 0 0 0]T Y (k + 1) = FY (k )Y (0) = [0.2 0 0 0]T0 ? ? 0.8 0.02 ? 0.6 0 0.02 ? ? F =? ?? 0.8 0.8? ? ? 0.0399 ? 0.4 0.9986? ?在 状 态 空 间 模 块 中 输 入 : A=[0.8,0.02,0;0.6,0,0.02;0.8,0.8;0.9,0.65] B=[0;0;0;0] %因为没有外部输入 C=[1,1,1,1] % 不能写成C=[0,0,0,0],否则输出为0 D=0 初值输入为:[0.2; 0; 0; 0] 步长输入为:0.02x(n+1)=Ax(n)+Bu(n) y(n)=Cx(n)+Du(n)Scope Discrete State-Space k1 c1x1 m1k2 c2x2 m2x(n+1)=Ax(n)+Bu(n) y(n)=Cx(n)+Du(n)Scope Discrete State-Space示波器显示的第一 个质量的位移时程0.2在MATLAB工作空间画出 的两个质量的位移时程0.2 0.150.150.10.10.050.0500-0.05-0.05-0.1-0.1-0.15051015202530-0.15051015202530与前面连续时间系统的仿真结果一致。 SIMULINK (5)连续系统 本章学习内容和目的进一步掌握连续系统的建模和仿真技巧 掌握向量线性系统的描述方法 结合蹦极跳的算例领会复杂系统的建模方 法与仿真 积分模块高级积分器 在使用 Simulink 对实际的动态系统进行仿真时,积分 运算可以说是 Simulink 求解器的核心技术之一。在前面章 节中使用过积分模块对数据进行积分处理,事实上我们所使 用的是积分模块的一种简单积分方式。积分模块还有一种积 分方式――重置积分方式。所谓的重置积分方式是指当重置 信号触发时将模块的输出重置为初始条件。本节积分模块的 重置积分方式――高级积分器进行介绍。 首先对积分器的各个端口进行简单的介绍。 下图分别为使用缺省参数设置下的积分器外观与选择所用参 数设置下的积分器的外观比较。Input1 sState1 sxoOutput SaturationReset Initial conditionIntegratorIntegrator Input Reset Initial conditionxoState1 sOutput Saturation【External reset】为外部重置设置。它用在当重置信号发生触发 事件时,模块将按照初始条件重置状态量。可以采用不同的触发方 式对积分器状态进行重置: none:关闭外部重置; rising:当模块接收到的触发信号上升通过零点时,重置过程开 始; falling:当模块接收到的触发信号下降通过零点时,重置过程开 始; either:无论触发信号上升或下降通过零点,重置过程都开始; level:当触发信号非零时,使得积分器输出保持在初始状态。 Input Reset Initial conditionxoState1 sOutput Saturation【Initial condition source】为初始条件设置。设置积分 器初始条件的方法有两种: external:从外部输入源设置初始条件。初始条件设置 端口以 x0 作为标志; internal:在积分器模块参数对话框中设置初始条件,说 明模块的初始值是从内部获得的。 选上后,下面将出现要 求输入初始值的输入栏。Internal 为默认设置。 Input Reset Initial conditionxoState1 sOutput Saturation【Limit output】积分器输出范围限制。在某些情况下,积分器的 输出可能会超出系统本身所允许的上限或下限值,选择积分器 输出范围限制框(Limit output)并设置上限值(Upper saturation limit)与下限值(Lower saturation limit),可 以将积分器的输出限制在一个给定的范围之内。此时积分器的 输出服从下面的规则: 当积分结果小于或等于下限值并且输入信号为负,积分器的输 出保持在下限值(下饱和区); 当积分结果在上限值与下限值之间时,积分器输出为实际积分 结果; 当积分结果大于或等于上限值并且输入信号为正,积分器的输 出保持在上限值(上饱和区) 。 Input Reset Initial conditionxoState1 sOutput Saturation【Show saturation port】在积分器中显示饱和端口。此 端口位于输出端口的下方。饱和端口的输出有三种情况,用 来表示积分器的饱和状态: 输出为 1,表示积分器处于上饱和区; 输出为 0,表示积分器处于正常范围之内; 输出为 -1,表示积分器处于下饱和区。 0.5Clock1GainsMux Mux ScopeIntegrator 5 Constant Sum2015说明: (1)积分器的初始值为0;105(2)【External reset】的设置 为:falling。0-5012345678910 如果将初始值设置为5,则结果为:2520151050-5012345678910 (1)积分器的初始值为5; (2)【External reset】的设置为:rising。35 30 25 20 15 10 5 0 -5012345678910 (1)积分器的初始值为5; (2)【External reset】的设置为:either。2520151050-5012345678910 (1)积分器的初始值为5; (2)【External reset】的设置为:level。5 4 3 2 1 0 -1 -2 -3 -4 -5012345678910 连续系统仿真(采用积分模块)x弹性恢复力 kx m 阻尼力k cm&& x& cxm惯性力系统动力方程: 系统参数:m&& + cx + kx = 0 x &m = 5, k = 2, c = 1 c k 对原动力方程作变换: && = ? x ? x & x m m代入参数: 假定有如下初始条件:&& = ?0.2 x ? 0.4 x & x& x(0) = 1, x(0) = 0 k cxm&& x1 s& x初始值为11 sxScopevelocity0.2displacementk c && = ? x ? x & x m m1Gain0.4Gain1m = 5, k = 2, c = 10.8 0.6&& = ?0.2 x ? 0.4 x & x& x(0) = 1, x(0) = 00.4 0.2 0 -0.2 -0.4 -0.6 -0.80102030405060 连续系统仿真(采用传递函数模块)m = 5, k = 2, c = 1k c x Fm 弹性恢复力 kx 阻尼力m&& x& cxm惯性力 F 外力系统动力方程: 经过 Laplace 变换,有: 传递函数为:m&& + cx + kx = F x & ms 2 X ( s ) + csX ( s ) + kX ( s) = F ( s)X (s) 1 1/ m 0.2 G ( s) = = 2 = = 2 F ( s ) ms + cs + k s 2 + c s + k s + 0.2s + 0.4 m m已知条件:假设系统处于零平衡位置,外力函数为幅值为 1 的阶跃函数。 1 采用积分模块所建的模型0.2m&& + cx + kx = F x &StepGain2&& x1 s velocity& x1s displacementxScopem = 5, k = 2, c = 10.2 Gain 0.4 Gain1&& = ?0.2 x ? 0.4 x + 0.2 F & x采用传递函数模块所建的模型 1 X ( s) = 2 G( s) = F ( s ) ms + cs + k 0.2 1/ m 2 s +0.2s+0.4 = c k 2 Step Scope Transfer Fcn s + s+ m m 0.2 = 2 分子输入:0.2 分母输入:[1, 0.2, 0.4] s + 0.2s + 0.4 采用积分模块仿真的结果0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0采用传递函数模块仿真的结果0510152025303540455005101520253035404550&& = ?0.2 x ? 0.4 x + 0.2 F & x采用幅值为1的阶跃函数激励,随着时间的推移,速度和加速度项逐渐趋于0, 从而达到静平衡位置,-0.4x+0.2*1=0,即x=0.5 向量线性系统信号线传输的信号可以是标量形式,也可以是向量信号形式。向量信号线在 Signals & Systems 模块库中有一个 Mux 模块,它可以将多个标量信号合成为一个 向量信号,输出为列向量。 与 Mux 相对应的模块是 Demux 模块,它 用来将向量信号分解成一组标量信号。 MuxDemux在 Mux 模块和 Demux 模块中必须正确指定输入或输出的个数。下图是 将三个标量信号合成为一个向量信号,然后再分解为三个标量信号。MuxDemux 输出为:?1 ? ? 4? ? ?在Gain中输入 [1, 1],在Multiplication 中 选择 Matrix (u * K)1 4 Display 1 41 Constant 4 Constant1 Gain u *[1,1]?1 1 ? ?1 ? ?4? × [1 1] = ?4 4? ? ? ? ?若在增益模块中选择 Matrix (K * u),则结果如下。输出为:?1 ? ? 4? ? ?在Gain中输入 [1, 1],在Multiplication 中选择 Matrix (K * u)1 Constant 4 Constant1 Gain [1,1] * u 5 Display?1 ? [1 1]× ? ? = 5 ? 4? 输出为:1 Constant 4 Constant1 2?1 ? ? 4? ? ?在Gain中输入 2,在Multiplication中选择 Element-wise(K. * u)2 8 Display? 2? ?1 ? ? 4 ? × 2 = ?8 ? ? ? ? ?Gain 状态空间模块 单自由度系统的单位脉冲响应k cx Fmm&& + cx + kx = δ (t ) x &5&& + x + 2kx = δ (t ) x &? x? Y =? ? & ? x?m = 5, c = 1, k = 2& 1 ? ? x? ? 0 ? & = ? x? = ? 0 Y ? ? ? ? ? x ? + ?0.2?δ (t ) = AY + Bδ (t ) x ? &&? ?? 0.4 ? 0.2? ? & ? ? ?要求输出位移量,则:C = [1 0]输出量: Z = CY近似单位脉冲为两个有微小时间差的阶跃信号的差:δ (t ) = 100u (t ) ? 100u (t ? 0.01) k cx FmStep四个选项:0.01,100,0,0x' = Ax+Bu y = Cx+DuState-SpaceScopem&& + cx + kx = δ (t ) x &m = 5, c = 1, k = 21 ? ?0? & ? 0 Y =? Y + ? ?δ (t ) ? ?? 0.4 ? 0.2? ?0.2?Step1四个选项:0,100,0,00.3 0.25 0.2 0.15 0.1 0.05 0 -0.05 -0.1 -0.15 -0.2Z = CYC = [1 0]δ (t ) = 100u (t ) ? 100u (t ? 0.01)0510152025303540 非线性系统的模拟例子1:小车由两个喷射式发动机推动在光滑的平面内运动。 若小车的速度和位移之和为负值,则启动左边的发动机;若小 车的速度和位移之和为正值,则启动右边的发动机。控制的目 标使小车静止在原点。此模型类似于卫星的位置控制过程。xmF动力学方程:m&& = F xF && = x m假设:m = 5kg , F = 1, ? 1, 0& x+x&0 ? F = 1, ? & ? F = ?1, x + x & 0 ? F = 0, x + x = 0 & ? xmF动力学方程:m&& = F x&& = 0.2 F x假设:m = 5kg , F = 1,?1,0系统模型& x+x&0 ? F = 1, ? & ? F = ?1, x + x & 0 ? F = 0, x + x = 0 & ?初始位移为+1 假定小车初始静 止,并且位移量 为+10.2 Sign 1/m1 s Velocity1 s Displacement?F ? ?F ?F ?& -x?x &0 & = ?1, ? x ? x & 0 & = 0, x + x = 0= 1,符号函数模块说明1 Constant Sign 2 Constant1 1 Display 1 Constant Sign -5 Constant1 -1 Display 系统模型初始位移为+1 假定小车初始静 止,并且位移量 为+10.2 Sign 1/m1 s Velocity1 s Displacement用一个二维图形模块来绘制仿真过程的相图。相图是速度相对于位 移的变化图。为了观测时间,给模型加一个时钟模块。0.20.100.2 Sign 1/m1 s Velocity1 s Displacement-0.1-0.2-0.37.6 Clock DisplayXY Graph-0.4 -0.5 -0.200.20.40.60.811.2注:在 MATLAB 中使用 plot (xout(:,1), xout(:,2)) 画出的图形,和 XY Graph 的结果一致。 为了得知小车何时到达原点并使仿真停止,对模型增加一个 逻辑判断,以使目标达到时仿真自动停止。 对于本算例,可以认为小车的位移和速度的绝对值之和小于 一个较小量,如 0.01 时,就认为目标已经达到并结束仿真:& x + x ≤ 0.010.2 Sign 1/m 1 s Velocity 1 s Displacement7.6 Clock |u| Abs &= DisplayXY GraphSTOPRelational Stop Simulation Operator |u| Abs1 0.01 Constant 如果想得到小车位移的响应时程,可在模型中加入示波器 模块,如下图所示:0.2 Sign 1/m1 s Velocity1 s Displacement Scope7.6 Clock |u| Abs &= DisplayXY GraphSTOP|u| Abs10.01 ConstantRelational Stop Simulation Operator仿真结果如下页图形所示。 1.20.2 Sign 1/m1 1 s s Velocity Displacement1Scope0.80.67.6 Clock |u| Abs |u| Abs1 0.01 Constant &= DisplayXY Graph0.40.2STOP0Relational Stop Simulation Operator-0.2012345678该图形是采用 MATLAB 环境下的 plot(tout, xout(:,1)) 画出的, 结果与示波器的结果一致。由图形可看出,仿真在 7.6 s 时停 止,这与模型框图中的时钟显示模块 Display 的结果一致。小车 系统在 7.6 s 时达到平衡。 蹦极跳系统的动态仿真蹦极跳时一种挑战身体极限的运动,蹦极者系着一根弹性绳从高 处的桥梁(或山崖等)向下跳。在下落的过程中,蹦极者几乎处于失 重状态。按照牛顿运动规律,自由下落的物体由下式确定:& && m&& = mg ? a1 x ? a2 x x xm 为人体的质量 g 为重力加速度 位置 x 的基准为桥梁的基准面 如果人体系在一个弹性常数为 k 的弹性绳索 上,定义绳索下端的初始位置为 0,则其对落 体位置的影响为:空气的阻力梯 子h1 0桥梁基准面x h2地面?? kx, x & 0 b( x ) = ? x≤0 ?0, 因此整个蹦极系统的数学模型为:& && m&& = mg + b( x) ? a1 x ? a2 x x x典型的具有连续状态的非线性系统 设桥梁距离地面为 50 m,即 h2=50 蹦极者起始速度为 0 蹦极者的起始位置为绳索的长度 30 m,即 h1=30 其余的参数: k=20, a2=a1=1;m=70 kg,g=10 m/s2?? kx, x & 0 b( x ) = ? x≤0 ?0,梯 子h1=30 0桥梁基准面x h2=50地面初始条件:& x(0) = ?30; x(0) = 0 & && m&& = mg + b( x) ? a1 x ? a2 x x x && = m ?1[mg + b( x) ? a1 x ? a2 x x] & && x初始条件0 初始条件 -30m*g Constant 1/m xddot 1 s xdot 1 s Position x& x(0) = ?30; x(0) = 0? ? kx , b( x) = ? ?0, x&0 x≤0massVelocityScopea1 Air resistance50 Constant1梯 子h1=300桥梁基准面-k spring constanta2*abs(u)*uFcnxh2=50地面Scope1 This output the distance to the ground of jumperSwitchGround说明:(1)设置仿真时间 0~100s。为了使曲线光滑,可设置最大仿真步长为 0.1。 (2)在 MATLAB 环境下输入 m=70; g=10; k=20; a1=1; a2=1; Switch 模块介绍:Input 1 Input 2 Input 3Switch双击输入 Threshold值 outputPass through input 1 when input 2 is greater than o otherwise, pass through input 3. The inputs are numbered top to bottom (or left to right)Threshold 默认为01Constant-101Constant-1Switch Display10Constant2 Switch Display1Constant2-1Constant1-1Constant1 梯 子 桥梁基准面h1=30Scope 显示的结果70 60 50 400 xh2=50地面30 20 10 0初始条件0m*g Constant 1/m初始条件 -301 s x Scope-10 -20xddot 1 xdot s Velocity-300102030405060708090100mass a1PositionScope1 显示的结果50 Constant180 70 60Air resistancea2*abs(u)*uFcn -k spring constant50 40 30 20 10Scope1 This output the distance to the ground of jumper0 -10SwitchGround-200102030405060708090100 若在 MATLAB 环境下键入:whos 可得到: whos NameSizeBytes Class 8 double array 8 double array 8 double array 8 double array 8 double array 8000 double array 16000 double arraya1 1x1 a2 1x1 g 1x1 k 1x1 m 1x1 tout 1000x1 xout 1000x2tout 为时间序列;xout 第一列为位移时间序列,第二列为速度时间序列。若在 MATLAB 环境下键入:plot ( tout, xout ( :, 1) ),将得到示波器 Scope 显示的结果 如果想在 MATLAB 环境下使用 plot 命令画出示波器 Scope1显 示的图形,可在系统模型中加入 out 模块。m*g Constant xddot 1/m mass 1 s Velocity xdot 1 s Position Scope x1 Air resistance -k spring50Constant1a2*abs(u)*uFcnconstant1Out1Scope1SwitchGroundThis output the distance to the ground of jumper 此时在 MATLAB 环境下键入:whos 可得到:whos NameSizeBytes Class 8 double array 8 double array 8 double array 8 double array 8 double array 8000 double array 16000 double array 8000 double arraya1 1x1 a2 1x1 g 1x1 k 1x1 m 1x1 tout 1000x1 xout 1000x2 yout 1000x1其中 yout 为 out 模块的输出结果。此时若在 MATLAB 环境下键入: plot ( tout, yout ) 将得到系统模型中示波器 Scope1 显示的结果。 初始条件0m*g Constant 1/m初始条件 -301 s x70xddot 1 xdot s VelocityScope 显示的结果Scope 50 Constant160 50mass a1Position40 30Air resistance20a2*abs(u)*uFcn -k spring constant10 0 -10 -20 -30Scope1 This output the distance to the ground of jumper80 700102030405060708090100SwitchGroundScope1 显示的结果60 50 40 30 20 10 0 -10 -20梯 子 桥梁基准面h1=30结果分析: 对于体重为 70 kg 的蹦 极者,此系统是不安全 的,因为蹦极者与地面 之间的距离出现了负值0 xh2=50地面0102030405060708090100 SIMULINK (6)子系统及其封装技术 本章学习内容和目的掌握 Simulink 子系统的建模方法 掌握 Simulink 子系统的封装技术 在前面的章节中,介绍了使用 Simulink 进行建模的基 本方法。使用这些方法基本可以创建任何物理系统的模型。 然而随着系统越来越复杂,用这些基本操作创建的 Simulink 模型变得越来越庞大而难于读懂。在本章中,将 介绍一系列的 Simulink 的特殊处理技术,使得模型变得更 加简捷和易懂易用。 本章首先介绍一种类似于程序设计语言中的子程序的 处理方法――Simulink 子系统,然后讲解一种更加好用的 封装子系统的技术。 Simulink 子系统绝大多数程序设计语言都有使用子程序的功能,例如 MATLAB 的子 程序――M文件。随着模型变得越来越大、越来越复杂,人们很难轻易读 懂它们。在这种情况下,子系统通过把大的模型分割成几个小的模型以使 得整个模型更加简捷、可读性更高,而且这种操作并不复杂。 创建 Simulink 子系统有两种方法: ( 1 ) 对 已 经 存 在 的 模 型 的 某 些 部 分 或 全 部 使 用 菜 单 命 令 【Edit&Creat Subsystem】将你性压缩转换,使之成为子系统; (2)使用 Subsystems 模块库中的 Subsystem 模块直接创建子系统。 Simulink 子系统的两种作用: (1)系统模型更加简捷和可读性高; (2)子系统可以反复调用,节省建模时间。 压缩子系统 以一个例子说明压缩子系统的使用方法。例如:&& + 0.4 x + 0.8 x = sin(t ) & x方程可转化为:&& = ?0.4cx ? 0.8 x + sin(t ) & x1 s 1 sSine WaveVelocity0.4DisplacementScopeGain0.8Gain1 操作步骤: (1)使用范围框将要压缩的子系统的部分选中,包括木块和信 号线;(注意:只能使用范围框,而不能使用 Shift逐个 选定) (2)在模块窗口选项中选择【Edit&Creat Subsystem】, Simulink 将会用一个子系统模块代替被选中的模块组; (3)进行模型美观调整。子系统 子系统将有一个默认的输入端口和输出端口In1 Out1 Sine Wave Scope SubsystemIn1Out1Sine Wave SubsystemScope压缩子系统后的系统模型美观处理后的系统模型 In1Out1Sine Wave SubsystemScope双击子系统,则会出现一个显示 子系统内容的新窗口。1 In1 1 s Velocity 0.4 Gain 0.8 Gain1 1 s Displacement 1 Out1在新窗口中,除了原始的模块外,Simuink 自动添加了输入模块和输出模块,分 别代表子系统的输入端口和输出端口。 两点说明: (1)子系统窗口无需保存,只需保存主程序出口即可。保存 主程序窗口后,子系统窗口自动得以保存; (2)菜单命令 【Edit&Creat Subsystem】 没有相反的操 作命令,也就是说,一旦一组模块压缩成了子系统,就没有 可以直接还原的处理方法(undo 除外)。因此,一个理想 的处理方法是在压缩子系统之前,先将模型进行保存,作为 备份。 以上例子的运行结果 假定系统有如下初始条件:& x(0) = 2, x(0) = 0要求采用原始模型(没有压缩子系统的模型)和压缩子系统 的模型进行仿真,仿真时间30s。对比结果。 原始模型初值为 21 s Displacement Scope压缩子系统的模型Sine Wave1 s Velocity 0.4 GainIn1Out1 Sine Wave Subsystem Scope0.8 Gain12.5 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.52.5 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5051015202530051015202530 子系统模块 在创建模型的时候,如果需要一个子系统,除了上述介 绍的压缩子系统的方法外,也可以直接使用子系统模块,在子 系统窗口中进行创建。 要使用子系统模块创建子系统,先从 Subsystems 模块 库中拖曳一个子系统模块到模型窗口中,然后双击子系统模 块,就会出现一个子系统的编辑窗口,子系统的建立可以在该 窗口中进行建立。 例子:模拟下图所示的弹簧-质量系统的运动状态。x1 k1 m1 k2 m2 x2 k3 m3 x3 x1 k1 m1 k2x2 k3 m2x3 m3k1 x1m1 &&1 xm1k 2 ( x1 ? x 2 )m1&&1 + k1x1 + k2 (x1 ? x2 ) = 0 x ? &&1 = x 1 [k1(?x1) + k2 (x2 ? x1)] m1k 2 ( x1 ? x2 )m2&&2 ? k2 (x1 ? x2 ) + k3 (x2 ? x3 ) = 0 xm 2 &&2 xm2k 3 ( x2 ? x3 )? &&2 = x1 [k2 (x1 ? x2 ) + k3(x3 ? x2 )] m2 m3&&3 ? k3 (x2 ? x3 ) = 0 xk3 ( x2 ? x3 )m 3 &&3 xm3? &&3 = x1 [k3(x2 ? x3)] m3单个质量的运动方程:&&n = x1 [kn (xn?1 ? xn ) + kn+1(xn+1 ? xn )] mn 0Left Disp Right Spring-mass1 Left Disp Right Spring-mass2 Left0双击后可显示出第一个质 量的子系统图,下图所示Left fixed第二和第三个质量子系统中, 三个增义模块分别输入: 1 第二个质量:K2,K3, m2ScopeDisp Right Spring-mass3Right free1 第三个质量: K3,0, m3 1 m1-K1 s 1 s Position11Left Sumk1 Left spring k2 Sum1 Right spring Block displacement2Force 1/mass Velocity ResultantDispRight注意:在子系统的信 号输入端要使用一个 输入模块,在信号输 出端要使用一个输出 模块。 假定系统的初始条件为:第一个质量上有初始位移 x1(0)=1,则在第 一个质量子系统框图中的位移模块中输入初始条件 1。 在 MATLAB 环境 下输入: K1=1; K2=2; K3=4; m1=1; m2=3; m3=2 系统仿真结果如下:0.5 0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 -0.5说 明 :若 想 输 出 其 它两 个 质 量 的 轨 迹 , 可 在模 型中增添示波器}

我要回帖

更多关于 simulink toworkspace 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信