第 12章 SIMULINK动态仿真集成环境
12.1 Simulink操作基础
12.2 系统仿真模型
12.3 系统的仿真
12.4 使用命令操作对系统进行仿真
12.5 子系统及其封装技术
12.6 S函数的设计与应用
12.1 Simulink操作基础
12.1.1 Simulink简介
Simulink是 MATLAB的重要组成部分,提供建立系统模型、
选择仿真参数和数值算法、启动仿真程序对该系统进行仿
真、设置不同的输出方式来观察仿真结果等功能。
12.1.2 Simulink的启动与退出
1,Simulink的启动
在 MATLAB的命令窗口输入 simulink或单击 MATLAB主窗
口工具栏上的 Simulink命令按钮即可启动 Simulink。
Simulink启动后会显示 Simulink模块库浏览器 (Simulink
Library Browser)窗口。
在 MATLAB主窗口 File菜单中选择 New菜单项下的 Model命
令,在出现 Simulink模块库浏览器的同时,还会出现一个
名字为 untitled的模型编辑窗口。在启动 Simulink模块库
浏览器后再单击其工具栏中的 Create a new model命令按
钮,也会弹出模型编辑窗口。利用模型编辑窗口,可以通
过鼠标的拖放操作创建一个模型。
模型创建完成后,从模型编辑窗口的 File菜单项中选择 Save
或 Save As命令,可以将模型以模型文件的格式 (扩展名
为,mdl)存入磁盘。
如果要对一个已经存在的模型文件进行编辑修改,需要打开
该模型文件,其方法是,在 MATLAB命令窗口直接输入
模型文件名 (不要加扩展名,mdl)。在模块库浏览器窗口或
模型编辑窗口的 File菜单中选择 Open命令,然后选择或输
入欲编辑模型的名字,也能打开已经存在的模型文件。另
外,单击模块库浏览器窗口工具栏上的 Open a model命令
按钮或模型编辑窗口工具栏上的 Open model命令按钮,
也能打开已经存在的模型文件。
2,Simulink的退出
为了退出 Simulink,只要关闭所有模型编辑窗口和 Simulink
模块库浏览器窗口即可。
12.2 系统仿真模型
12.2.1 Simulink的基本模块
Simulink的模块库提供了大量模块。单击模块库浏
览器中 Simulink前面的,+”号,将看到 Simulink
模块库中包含的子模块库,单击所需要的子模块
库,在右边的窗口中将看到相应的基本模块,选
择所需基本模块,可用鼠标将其拖到模型编辑窗口。同样,在模块库浏览器左侧的 Simulink栏上
单击鼠标右键,在弹出的快捷菜单中单击 Open
the ‘Simulink’ Libray 命令,将打开 Simulink基本
模块库窗口。单击其中的子模块库图标,打开子
模块库,找到仿真所需要的基本模块。
12.2.2 模块的编辑
1.添加模块
2.选取模块
3.复制与删除模块
4.模块外形的调整
5.模块名的处理
12.2.3 模块的连接
1.连接两个模块
2.模块间连线的调整
3.连线的分支
4.标注连线
5.删除连线
12.2.4 模块的参数和属性设置
1.模块的参数设置
Simulink中几乎所有模块的参数都允许用户进行设置,只要
双击要设置的模块或在模块上按鼠标右键并在弹出的快捷
菜单中选择相应模块的参数设置命令就会弹出模块参数对
话框。该对话框分为两部分,上面一部分是模块功能说明,
下面一部分用来进行模块参数设置。
同样,先选择要设置的模块,再在模型编辑窗口 Edit菜单下
选择相应模块的参数设置命令也可以打开模块参数对话框。
2.模块的属性设置
选定要设置属性的模块,然后在模块上按鼠标右键
并在弹出的快捷菜单中选择 Block properties,或
先选择要设置的模块,再在模型编辑窗口的 Edit
菜单下选择 Block properties命令,将打开模块属
性对话框。该对话框包括 General,Block
annotation和 Callbacks 3个可以相互切换的选项卡。
其中选项卡中可以设置 3个基本属性:
Description(说明 ),Priority(优先级 ), Tag(标记 )。
例 12-1 有系统的微分方程,试建立系统仿真模型。
操作过程如下:
(1) 在 MATLAB主菜单中,选择 File菜单中 New菜单
项的 Model命令,打开一个模型编辑窗口。
(2) 将所需模块添加到模型中。
(3) 设置模块参数并连接各个模块组成仿真模型。
设置模块参数后,用连线将各个模块连接起来组成
系统仿真模型。模型建好后,从模型编辑窗口的
File菜单中选择 Save或 Save as命令将它存盘。
12.3 系统的仿真
12.3.1 设置仿真参数
打开系统仿真模型,从模型编辑窗口的 Simulation菜单中选
择 Simulation parameters命令,打开一个仿真参数对话框,
在其中可以设置仿真参数。仿真参数对话框包含 5个可以
相互切换的选项卡:
(1) Solver选项卡:用于设置仿真起始和停止时间,选择微分
方程求解算法并为其规定参数,以及选择某些输出选项。
(2) Workspace I/O选项卡:用于管理对 MATLAB工作空间
的输入和输出。
(3) Diagnostics选项卡:用于设置在仿真过程中出现各类错
误时发出警告的等级。
(4) Advanced选项卡:用于设置一些高级仿真属性,更好地
控制仿真过程。
(5) Real-time Workshop选项卡:用于设置若干实时工具中
的参数。如果没有安装实时工具箱,则将不出现该选项卡。
12.3.2 启动系统仿真与仿真结果分析
设置完仿真参数之后,从 Simulation中选择 Start菜单项或单
击模型编辑窗口中的 Start Simulation命令按钮,便可启动
对当前模型的仿真。此时,Start菜单项变成不可选,而
Stop菜单项变成可选,以供中途停止仿真使用。从
Simulation菜单中选择 Stop项停止仿真后,Start项又变成
可选。
为了观察仿真结果的变化轨迹可以采用 3种方法:
(1) 把输出结果送给 Scope模块或者 XY Graph模块。
(2) 把仿真结果送到输出端口并作为返回变量,然后使用
MATLAB命令画出该变量的变化曲线。
(3) 把输出结果送到 To Workspace模块,从而将结果直接存
入工作空间,然后用 MATLAB命令画出该变量的变化曲
线。
例 12-2 利用 Simulink仿真曲线。
仿真过程如下:
(1) 启动 Simulink并打开模型编辑窗口。
(2) 将所需模块添加到模型中。
(3) 设置模块参数并连接各个模块组成仿真模型。
设置模块参数后,用连线将各个模块连接起来组成仿真模型。
(4) 设置系统仿真参数。
(5) 开始系统仿真。
(6) 观察仿真结果。
例 12-3 利用 Simulink仿真求定积分。
仿真过程如下:
(1) 打开一个模型编辑窗口。
(2) 将所需模块添加到模型中。
(3) 设置模块参数并连接各个模块组成仿真模型。
(4) 设置系统仿真参数。
(5) 开始系统仿真。
(6) 观察仿真结果。
12.3.3 系统仿真实例
至此,可以总结出利用 Simulink进行系统仿真的步骤如下:
(1) 建立系统仿真模型,这包括添加模块、设置模块参数以
及进行模块连接等操作。
(2) 设置仿真参数。
(3) 启动仿真并分析仿真结果。
例 12-4 有初始状态为 0的二阶微分方程 x"+0.2x'+0.4x=0.2u
(t),其中 u(t)是单位阶跃函数,试建立系统模型并仿真。
方法 1:用积分器直接构造求解微分方程的模型。
方法 2:利用传递函数模块建模。
方法 3:利用状态方程模块建模。
12.4 使用命令操作对系统进行仿真
从命令窗口运行仿真的函数有 4个,即 sim,simset,simget
和 set_param。
1,sim函数
sim函数的作用是运行一个由 Simulink建立的模型,其调用
格式为:
[t,x,y ] =sim(modname,timespan,options,data);
2,simset函数
simset 函数用来为 sim函数建立或编辑仿真参数或规定算法,
并把设置结果保存在一个结构变量中。它有如下 4种用法:
(1) options=simset(property,value,…),把 property代表的参
数赋值为 value,结果保存在结构 options中。
(2) options=simset(old_opstruct,property,value,…),把已有
的结构 old_opstruct(由 simset产生 )中的参数 property重新
赋值为 value,结果保存在新结构 options中。
(3) options=simset(old_opstruct,new_opstruct):用结构
new_opstruct的值替代已经存在的结构 old_opstruct的值。
(4) simset:显示所有的参数名和它们可能的值。
3,simget函数
simget函数用来获得模型的参数设置值。如果参数值是用一
个变量名定义的,simget返回的也是该变量的值而不是变
量名。如果该变量在工作空间中不存在 (即变量未被赋值 ),
则 Simulink给出一个出错信息。该函数有如下 3种用法:
(1) struct=simget(modname):返回指定模型 model的参数设
置的 options结构。
(2) value=simget(modname,property):返回指定模型 model
的参数 property的值。
(3) value=simget(options,property):获取 options结构中的参
数 property的值。如果在该结构中未指定该参数,则返回
一个空阵。
用户只需输入能够唯一识别它的那个参数名称的前几个字符
即可,对参数名称中字母的大小写不作区别。
4,set_param函数
set_param函数的功能很多,这里只介绍如何用 set_param函
数设置 Simulink仿真参数以及如何开始、暂停、终止仿真
进程或者更新显示一个仿真模型。
(1) 设置仿真参数
调用格式为:
set_param(modname,property,value,…)
其中 modname为设置的模型名,property为要设置的参数,
value是设置值。这里设置的参数可以有很多种,而且和
用 simset设置的内容不尽相同,相关参数的设置可以参考
有关资料。
(2) 控制仿真进程
调用格式为:
set_param(modname,'SimulationCommand','cmd')
其中 mode为仿真模型名称,而 cmd是控制仿真进程的各个命
令,包括 start,stop,pause,comtinue或 update。
在使用这两个函数的时候,需要注意必须先把模型打开。
12.5 子系统及其封装技术
12.5.1 子系统的建立
建立子系统有两种方法:通过 Subsystem模块建立子系统和
通过已有的模块建立子系统。两者的区别是:前者先建立
子系统,再为其添加功能模块;后者先选择模块,再建立
子系统。
1.通过 Subsystem模块建立子系统
操作步骤为:
(1) 先打开 Simulink模块库浏览器,新建一个仿真模型。
(2) 打开 Simulink模块库中的 Ports & Subsystems模块库,将
Subsystem模块添加到模型编辑窗口中。
(3) 双击 Subsystem模块打开一个空白的 Subsystem窗口,将
要组合的模块添加到该窗口中,另外还要根据需要添加输
入模块和输出模块,表示子系统的输入端口和输出端口。
这样,一个子系统就建好了。
2.通过已有的模块建立子系统
操作步骤为:
(1) 先选择要建立子系统的模块,不包括输入端口和输出端
口。
(2) 选择模型编辑窗口 Edit菜单中的 Create Subsystem 命令,
这样,子系统就建好了。在这种情况下,系统会自动把输
入模块和输出模块添加到子系统中,并把原来的模块变为
子系统的图标。
例 12-5 PID控制器是在自动控制中经常使用的模块,试建立
PID控制器的模型并建立子系统。
步骤如下:
(1) 先建立 PID控制器的模型。
(2) 建立子系统。
12.5.2 子系统的条件执行
1.使能子系统
建立使能子系统的方法是:打开 Simulink模块库中的 Ports &
Subsystems模块库,将 Enable模块复制到子系统模型中,
则系统的图标发生了变化。
例 12-6 利用使能子系统构成一个正弦半波整流器。
操作步骤如下:
(1) 打开 Simulink模块库浏览器并新建一个仿真模型。
(2) 将 Sine Wave,Enabled Subsystem,Scope 3个模块拖至
新打开的模型编辑窗口,连接各模块并存盘。其中使能信
号端接 Sine Wave模块。
为了便于比较,除显示半波整流波形外,还显示正弦波,故
在示波器属性窗口将 Number of axes设置为 2。
使能子系统建立好后,可对 Enable模块进行参数设置。
(3) 选择 Simulink菜单中的 Start命令,就可看到半波整流波
形和正弦波形。
2.触发子系统
触发子系统是指当触发事件发生时开始执行子系统。与使能
子系统相类似,触发子系统的建立要把 Ports &
Subsystems模块库中的 Trigger模块添加到子系统中或直
接选择 Triggered Subsystem模块来建立触发子系统。
例 12-7 利用触发子系统将一锯齿波转换成方波。
操作步骤如下:
(1) 用 Signal Generator,Triggered Subsystem和 Scope模块构
成子系统。
(2) 选择 Simulink菜单中的 Start命令,就可看到波形。
3.使能加触发子系统
所谓使能加触发子系统就是把 Enable和 Tirgger模块都加到子
系统中,使能控制信号和触发控制信号共同作用子系统的
执行,也就是前两种子系统的综合。该系统的行为方式与
触发子系统相似,但只有当使能信号为正时,触发事件才
起作用。
12.5.3 子系统的封装
所谓子系统的封装 (Masking),就是为子系统定制对话框和
图标,使子系统本身有一个独立的操作界面,把子系统中
的各模块的参数对话框合成一个参数设置对话框,在使用
时不必打开每个模块进行参数设置,这样使子系统的使用
更加方便。
子系统的封装过程很简单,先选中所要封装的子系统,再选
择模型编辑窗口 Edit菜单中的 Mask subsystem命令,这时
将出现封装编辑器 (Mask Editor)对话框。
Mask Editor对话框中共包括 4个选项卡,Icon,Parameters、
Initialization和 Documentation。子系统的封装主要就是对
这 4页参数进行设置。
12.6 S函数的设计与应用
S函数称为系统函数 (System Function),它有固定的程序格
式。用 MATLAB语言可以编写 S函数,此外还可以采用 C、
C++,FORTRAN和 Ada等语言编写。
12.6.1 用 MATLAB语言编写 S函数
编写 S函数有一套固定的规则,为此,Simulink提供了一个
用 M文件编写 S函数的模板。该模板程序存放在
toolbox\simulink\blocks目录下,文件名为 sfuntmpl.m。用
户可以从这个模板出发构建自己的 S函数。
1.主程序
S函数主程序的引导语句为:
function [sys,x0,str,ts]=fname(t,x,u,flag)
2.子程序
S函数 M文件共有 6个子程序,供 Simulink在仿真的不同阶段
调用。
12.6.2 S函数的应用
例 12-8 采用 S函数实现模块 y=nx,即模块的功能是把一个输
入信号 n倍以后再输出。
(1) 利用 MATLAB语言 M文件。
(2) 模块的封装与测试。