Matlab及其应用 讲座之五 动态系统仿真——Simulink 主讲人:鲍文 在此幻灯片插入公司的徽标 从“插入”菜单 选择图片 2019/5/4 在此幻灯片插入公司的徽标 从“插入”菜单 选择图片 找到徽标文件 单击“确定” 重新设置徽标大小 单击徽标内任意位置。徽标外部出现的方框是“调整控点” 使用这些重新设置对象大小 如果在使用尺寸调整控点前按下 shift 键,则对象改变大小但维持原比例。 Matlab及其应用 讲座之五 动态系统仿真——Simulink 主讲人:鲍文 2019/5/4 > 退出
目录 发展历史 基本使用 模型介绍 数值仿真 高级分析 例题 2019/5/4 < > 主菜单 退出
一、发展历史 1、动态系统仿真 CSCAD(E) 80年代前:自己编程序,C/FORTRAN 90年代后:集成仿真环境 VisSim SimuLink 2、SimuLink发展 1990年出现,叫SimuLab 1992年改名为SimuLink1.0 +3.5 1999年SimuLink 3.0 +5.3 OO 2019/5/4
二、基本使用 1、Simulink的启动 1). 命令窗口中键入simulink 2). file菜单中选择new命令的model 3). 工具栏中,按按钮 4).模型窗口file菜单选择new命令的model 2019/5/4
2. 仿真一个简单的模型 仿真一个温度计放入水中,显示的变化。 1)仿真建立模型:惯性环节 1/(Ts+1) T=10s 2)搭建这个模型:使用simulink 3)开始仿真:a.开始/结束时间 b.仿真方法 4)看看显示/修改模型参数 2019/5/4
3.基本操作 1)选择(多个)/复制模型 2)连线/移动 3)修改模型参数 4)模型名字修改 5)旋转模型 6)保存文件 7)打印 3)修改模型参数 4)模型名字修改 5)旋转模型 6)保存文件 7)打印 2019/5/4
三、模型介绍 只介绍一些经典模块 1、数据源部分: A常数模块 B阶跃模块 B信号发生器 只接受输入的数字,不接受变量 D时钟 输出仿真中的当前时间,以秒为单位。在记录数据序列中需要这个模块。 2019/5/4
E 从文件读数 至少有两行,单调递增的时间,其它行为对应数据。文本文件或mat文件。对数据文件没有描述的时间,采用线性插值的方法得到中间数据。使用这个模块可以设定任意的输入曲线,对测试试验数据十分有用。需要注意输入输入不能过于稀少,免得导致仿真的精度降低。 2019/5/4
F 从工作空间读数 这个模块从工作空间中读取数据,数据源至少有两列,第一列为单调递增的时间,其它列为对应的数据。这个模块的其它特性和from file一样。它常用于在MATLAB工作空间处理完数据后,读入SIMULINK中。 2019/5/4
2、连接 a)聚合 一般用在显示、保存或者状态空间系统的输入中。 b)分离 一般用在处理从文件、工作空间读入数据或者状态控制系统的输出分解。 c)子系统 2019/5/4
3、显示部分 1) 示波器 示波器中可以同时显示多个曲线 2)输出到文件 3)输出到工作空间 4)数字显示 5)XY图 2019/5/4
6)、高级显示 A)Extras中的增强显示 谱分析/相关分析 B)DSP模块 作FFT显示 2019/5/4
4、线性系统 1)增益 输出为输入与增益的乘积。 2)加法 对输入作求和(差)操作,输入可以使两个或者多个。操作使用+-+-系统给出。 3)传递函数 分子分母多项式形式。分母的阶次必须大于分子的阶次,初始值条件为0。 2019/5/4
4)积分 可以设定初始条件。 5)状态空间 a、b、c、d形式,可以给出初值。 6)扩展 a、PID b、可设定初值的传函 2019/5/4
5、非线性系统 1)常见非线性 2)MATLAB函数或表达式。它由一个表量或者向量输入,下面的表达式是有效的:sin、u(1)/u(2)。 2019/5/4
对输入进行符合c语言规范的数学表达式处理。模块输入为u。它使用的函数比较少。它可以进行如sin(u[1])之类的计算。 3) Fcn:函数 对输入进行符合c语言规范的数学表达式处理。模块输入为u。它使用的函数比较少。它可以进行如sin(u[1])之类的计算。 4)保存一步memory 2019/5/4
6、离散系统 1)零阶保持器。模拟A/D转换器。 2)一阶保持器。 3)离散积分器,实现离散的欧拉积分。 4)离散传递函数和离散状态空间模型(初值) 5)延迟:输入信号做单位延时并保持一个采样周期。没有延迟采保,使用零阶保持器,大于一个单位的延迟功能,采用Discrete Transfer FCN模块。 2019/5/4
7、扩展的模块 1)NCD模块:非线性控制系统设计。例子 2)模糊 3)神经元网络 4)电力系统 5)其它:系统辨识、通讯 例子:计算峰峰值 y=sqrt(x).*sin(x).^2 2019/5/4
8.子系统的建立 1)为什么建立子系统 a 减少模块数 b 有利于调试 c 对大系统/复杂系统有利 2)建立方法 a Subsystem b Group命令 3)输入输出 a in / out b 更名 2019/5/4
9、注意 1)大部分模块可连接向量、可改方向 2)连续系统和离散系统可以共同使用 3)少用matlab FCN 4)模块可以使用mask产生:iconedit 5)初始化数据: 2019/5/4
四、数值仿真 1、仿真方法 1)定步长仿真:1,2,3,4,5 仿真步长的选择: a 稳定性:最小时间常数的一半 b 精度:更小一些 随机特性/非线性 2)变步长仿真:缺省 2019/5/4
A Runge-Kutta (包含rk23、rk45)适合于高度非线性或不连续系统,不适合刚性系统; B Adams方法:非线性小、时间常数变化小 C stiff方法是专门用于刚性系统仿真 D Euler方法比较差,尽量避免使用 E Linsim方法适合于接近线性的系统,对线性刚性系统有很大的优越性。 2019/5/4
2、步长控制 1)容许误差越大,仿真的精度越低。一般容许误差应当在0.1到1e-6之间。 2)最大步长足够小,则仿真的精确度比较好,最大步长比较大,可能出现不稳定。 3)仿真的最小步长,是仿真开始的步长。设置的过小,如系统不连续,在不连续处容易产生过多的点,会超出可用内存和资源;如果最小步长过大,导致结果不精确。 2019/5/4
五、高级分析 1、模型线性化 函数linmod、dlinmod进行模型的线性化。 [a,b,c,d]=linmod(‘sfun’,x,u) 注意: 1)SIMULINK模型的输入输出必须使用Connectios库中的Inport和Output模块来定义,Signal Generator 和Scope不可以作为系统的输入输出。 2)函数的sfun参数必不可少,它是SIMULINK模型的名字; 2019/5/4
3)可使用x,u来设定系统的状态和输入工作点,缺省值全为零。 4)MATLAB还提供了一个linmod2函数,它比linmod要精确一些,但运行时间更长。 一旦得到了系统状态空间形式描述的模型,就可以进一步的进行系统分析,如画Bode图,做阶跃响应,判断稳定性,还可以进行控制系统设计。 2019/5/4
2、平衡点确定 使用trim函数可以确定平衡点。它的调用格式为: [x,u,y,dx]=trim(‘sfun’,x0,u0,y0) MATLAB通过寻优的方式寻找最佳平衡点,多次使用不同的初值寻找平衡点是有必要的。 2019/5/4
3、命令行仿真 [T,X,Y1,...,Yn] = sim('model',TIMESPAN,OPTIONS,UT) 其中: TimeSpan: [TStart OutputTimes TFinal] 2019/5/4
注意问题 1、内存、cpu 2、递阶结构:子结构 少用汉字 3、代数环:仿真速度减慢. 条件:前馈中有: a Gain b 大部分非线性 2、递阶结构:子结构 少用汉字 3、代数环:仿真速度减慢. 条件:前馈中有: a Gain b 大部分非线性 c 传函的分子分母同阶 d 状态空间,d=0 解决:a插入memory b 加入高频传递 2019/5/4
其它方面 1、自主模块:可使用s-func, c/fortran 2、与其他toolbox联合使用 3、报警的处理:warning 4、simulink动画 2019/5/4
安装一个网络上来的工具箱 1、寻找工具箱 2、下载 3、安装:解包、复制、增加路径 4、测试 5、做一些修改 例子:ansim 2019/5/4
实时仿真 一、前言 实时仿真的意义:控制硬件、半实物仿真 实时仿真必然能够超实时仿真。 实时工具箱的要求: 1)C编译器 2)Simulink 功能: 1)实时程序(DOS)、C程序 2)windows下的加速仿真 2019/5/4
二 编译过程 2019/5/4
2019/5/4