第 9章 MATLAB环境下的仿真软件 Simulink
9.1 Simulink的基本操作
9.2 Simulink的几类基本模块
9.3 仿真模型参数的设置
9.4 子系统的建立与封装
9.5 在命令窗口中创建模型
9.6 S-函数的设计和应用
9.7 仿真系统的线性化分析
9.1 Simulink的基本操作
9.1.1 Simulink的启动与退出
1,Simulink的启动启动 Simulink的方法有 3种:
(1)在 MATLAB的命令窗口直接键入 simulink。
(2)单击 MATLAB命令窗口工具栏上的 Simulink模块库浏览器命令按钮 。
(3)在 MATLAB命令窗口 File菜单中选择 New菜单项下的
Model命令 。
2,Simulink的退出为了退出 Simulink,只要关闭所有模型窗口和 Simulink
模块库窗口即可 。
9.1.2 Simulink模块的操作
1,选取模块
2,复制与删除模块
3,模块的参数和属性设置
4,模块外形的调整
5,模块名的处理
6,模块的连接
7,在连线上反映信息 。
9.2 Simulink的几类基本模块
9.3 仿真模型参数的设置
9.3.1 通过菜单命令设置仿真模型参数选择模型窗口 Simulation菜单中的 Parameter命令,将出现仿真参数对话框 。 对话框分四个选项卡,Solver(算法 )、
Workspace I/O(工作空间输入输出 ),Diagnostics(诊断 )和
Real-TimeWorkshop(实时工作间 )。
9.3.2 在命令窗口调用函数设置仿真模型参数
1,sim 函数其调用格式为:
[t,x,y ] =sim(modname,timespan,options,data);
2,simset函数它有如下 4种用法:
(1)options=simset(property,value,… )
(2)options=simset(old_opstruct,property,value,… )
(3)options=simset(old_opstruct,new_opstruct)
(4)simset
例 9.1以图 9.15所示的仿真模型为例,说明 simset函数的用法 。
(1)在命令窗口输入命令:
option=simset('OutputVariables','x','OutputPoints','all','Finalstate
Name','date');
[t,x,y]=sim('mode1',[1,10],option)
(2)在命令窗口中输命令:
optionl=simset('OutputVariables','xy','OutputPoints','all');
[t,x,y]=sim('Simul',[2,4,6,8],option1);
3,simget函数该函数有如下 3种用法:
(1)struct=simget(model)
(2)value=simget(model,property)
(3)value=simget(Option,Structure,property)
4.set_param函数
(1)设置仿真参数调用格式为,set_param(mode,property,value,… )
(2)控制仿真进程调用格式为:
set_param(mode,'SimulationCommand','cmd')
例 9.2 假设从实际应用领域 (力学,电学,生态或社会 )中,抽象出有初始状态为 0的二阶微分方程 x"+0.2x'+0.4x=0.2u (t),u(t)是单位阶跃函数 。
用 积 分 器 直 接 构 造 求 解 微 分 方 程 的 模 型
exm1.mdl。
步骤如下:
(1)改写微分方程 。 把原方程改写为,x"=0.2u(t)-
0.2x'-0.4x
(2)利用 Simulink模块库中的标准模块构作模型 。
(3)仿真操作 。
(4)保存在 MATLAB工作空间中的数据 。
例 9.3利用传递函数模块建模 。
步骤如下:
(1)根据系统传递函数构造系统模型
(2)仿真操作 。
例 9.4利用状态方程模块建模 。
(1)利用构造仿真模型
(2)仿真
9.4 子系统的建立与封装
9.4.1 子系统的建立
1,通过 Subsystem模块建立子系统操作步骤为:
(1)先打开 Simulink模块库浏览器,新建一个仿真模型 。
(2)打开 Simulink模块库中的 Signals & Systems模块库,复制 Subsystem模块到新的模型窗口中 。
(3)用鼠标左 键双 击 Subsystem模块 打开一 个空 白的
Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要复制一个或多个 Input和 Output模块,
表示子系统的输入和输出端口 。 这样,一个子系统就建好了 。
2,通过已有的模块建立子系统操作步骤为:
(1)先选择要建立子系统的模块,不包括输入端口和输出端口 。
(2)选择模型窗口 Edit菜单中的 Create Subsystem 命令,这样,子系统就建好了 。 在这种情况下,系统会自动把
Input模块和 Output模块添加到子系统中,并把原来的模块变为子系统的图标 。
9.4.2 子系统的条件执行
1,使能子系统建立使能子系统的方法是:打开 Simulink模块库中的
Signals & Systems模块库,将 Enable模块复制到子系统模型中,则系统的图标发生了变化 。
例 9.5利用使能原理构成一个正弦半波整流器 。
操作步骤如下:
(1)打开 Simulink模块库浏览器以及新建一个模型窗口 。
(2)双击空子系统模块 Subsystem,打开其结构模型窗 。
(3)将 Simulink浏览库中的 In输入口模块,Out输出口模块,
Enable使能模块拖至子系统的结构模型窗;把 In模块的输出直接送到 Out模块的输入端; Enable模块无须进行任何连接,且采用它的缺省设置实现题目所需使能子系统 。
(4)完成新建模型窗口中各模块间的连接并存盘 。
(5)双击示波器模块,打开显示窗 。 然后选择 Simulink菜单中的 Start命令,就可看到半波整流波形 。
2,触发子系统触发子系统是指当触发事件发生时开始执行子系统 。 与使能子系统相类似,触发子系统的建立要把 Signals &
Systems模块库中的 Trigger模块拷贝到子系统中 。
例 9.6 利用触发子系统原理将一锯齿波转换成方波 。
操作步骤如下:
(1)用 Signal Generator,Subsystem和 Scope模块构成一子系统,双击 Signal Generator模块图标在 Wave from的下拉列表框中选择 sawtooth,即锯齿波 。
(2)将上例中的 Enable模块换成 Trigger触发模块 。 双击该模块并选 Trigger type触发事件形式为 either,即上跳沿或下跳没触发 。
(3)完成新建模型窗口中各模块间的连接,并存盘 。
(4)双击示波器模块,然后选择 Simulink菜单中的 start命令,
就可看到方波 。
3,使能加触发子系统所谓使能加触发子系统就是把 Enable和 Tirgger模块都加到子系统中,使能控制信号和触发控制信号共同作用子系统的执行,也就是前两种子系统的综合 。 该系统的行为方式与触发子系统相似,但只有当使能信号为正时,触发事件才起作用 。
9.4.3 子系统的封装子系统的封装过程很简单:先选中所要封装的子系统,
再选择模型窗口 Edit菜单中的 Mask Subsystem命令,这时将出现 MaskEditor对话框 。
Mask Editor 对 话 框 中 共 包 括 3 个 选 项 卡,Icon,
Initialization和 Documentation。 子系统的封装主要就是对这 3页参数进行设置 。
9.5 在命令窗口中创建模型
9.5.1 构造模型的命令
9.5.2 设置参数
9.6 S-函数的设计和应用
9.6.1 S-函数概述
9.6.2 用 M文件编写 S-函数
(1)MATLAB5.3为用户提供了一个模板,只要在必要的子程序里编写代码并输入参数就可以了 。
(2)从 Function & Tables子库里把 S-Function系统的功能模块复制过来,输入程序的文件名,以供调用 。
例 9.7利用 M文件来写一个限幅积分器的 S-函数,并借助 S-
函数模块来调用此文件 。 限幅积分器的数学模型如下:
操作步骤如下:
(1)根据数学模型,编写 S-函数 sfun97.m。
function[sys,x0,str,ts] = sfun97(t,x,u,flag,lb,ub,xi)
switchflag,
case0,
[sys,x0,srt,ts] = mdlInitializeSizes(xi);
case1,
sys= mdlDerivatives(t,x,u,lb,ub);
case2,
sys= mdlUpdate(t,x,u);
case3,
sys= mdlOutputs(t,x,u);
case4,
sys= mdlGetTimeOfNextVarHit(t,x,u);
case9,
sys= mdlTerminate(t,x,u);
(2)完成 S-函数的编写后,接着建立 Simulink模型,
将功能模块 S-function复制到设计区域,打开其参数页,输入 S-函数的文件名 sfun97.m和 S-函数的参数 lb,ub,xi。
(3)编写主程序 。
clear;
lb=-0.5;
ub=0.5;
xi=0;
sim(‘sfun97’);
(4)在命令窗口运行主程序,并双击示波器,即可查看到输入波形及限幅积分的结果 。
9.7 仿真系统的线性化分析
9.7.1 连续系统的线性化线性化分析函数 linmod用来提取非线性系统的近似线性模型,也可以用来获取线性系统的数学模型 。 linmod函数的调用格式为:
[A,B,C,D]=linmod ('sys')
[A,B,C,D]=linmod ('sys',x,u)
[A,B,C,D]=linmod ('sys',x,u,pert)
[A,B,C,D]=linmod ('sys',x,u,pert,xpert,upert)
9.7.2离散系统的线性化
dlinmod能够以任意给定的采样时间对离散系统,多速率系统以及连续和离散混合系统进行线性化 。 除了第 2个选项需要插入采样时间来对系统线性化外,dlinmod的调用格式和 linmod
是相同的:
[A,B,C,D]=dlinmod ('sys',Ts,x,u)
9.7.4 平衡分析在给定输入,输出及状态条件下,Simulink提供的函数 trim
可以用来确定系统的稳态平衡点 。 其调用格式为:
[x,u,y,dx]=trim('sys')
[x,u,y,dx]=trim('sys',x0,u0,y0,ix,iu,iy)
其中 x,u,y,dx分别代表状态向量,输入向量,输出向量和状态向量的导数 。 sys是模型名 。 x0,u0,y0分别为状态向量 x、
输入向量 u和输出向量 y的初始猜测值,它们的输入格式必须是列向量形式 。 ix是向量,它的元素是那些在寻找过程中,要求保持其值固定不变 (等于初始猜测值 )的那些状态变量的序号 。 iu,iy与 ix类似,分别适用于 u和 y。
9.1 Simulink的基本操作
9.2 Simulink的几类基本模块
9.3 仿真模型参数的设置
9.4 子系统的建立与封装
9.5 在命令窗口中创建模型
9.6 S-函数的设计和应用
9.7 仿真系统的线性化分析
9.1 Simulink的基本操作
9.1.1 Simulink的启动与退出
1,Simulink的启动启动 Simulink的方法有 3种:
(1)在 MATLAB的命令窗口直接键入 simulink。
(2)单击 MATLAB命令窗口工具栏上的 Simulink模块库浏览器命令按钮 。
(3)在 MATLAB命令窗口 File菜单中选择 New菜单项下的
Model命令 。
2,Simulink的退出为了退出 Simulink,只要关闭所有模型窗口和 Simulink
模块库窗口即可 。
9.1.2 Simulink模块的操作
1,选取模块
2,复制与删除模块
3,模块的参数和属性设置
4,模块外形的调整
5,模块名的处理
6,模块的连接
7,在连线上反映信息 。
9.2 Simulink的几类基本模块
9.3 仿真模型参数的设置
9.3.1 通过菜单命令设置仿真模型参数选择模型窗口 Simulation菜单中的 Parameter命令,将出现仿真参数对话框 。 对话框分四个选项卡,Solver(算法 )、
Workspace I/O(工作空间输入输出 ),Diagnostics(诊断 )和
Real-TimeWorkshop(实时工作间 )。
9.3.2 在命令窗口调用函数设置仿真模型参数
1,sim 函数其调用格式为:
[t,x,y ] =sim(modname,timespan,options,data);
2,simset函数它有如下 4种用法:
(1)options=simset(property,value,… )
(2)options=simset(old_opstruct,property,value,… )
(3)options=simset(old_opstruct,new_opstruct)
(4)simset
例 9.1以图 9.15所示的仿真模型为例,说明 simset函数的用法 。
(1)在命令窗口输入命令:
option=simset('OutputVariables','x','OutputPoints','all','Finalstate
Name','date');
[t,x,y]=sim('mode1',[1,10],option)
(2)在命令窗口中输命令:
optionl=simset('OutputVariables','xy','OutputPoints','all');
[t,x,y]=sim('Simul',[2,4,6,8],option1);
3,simget函数该函数有如下 3种用法:
(1)struct=simget(model)
(2)value=simget(model,property)
(3)value=simget(Option,Structure,property)
4.set_param函数
(1)设置仿真参数调用格式为,set_param(mode,property,value,… )
(2)控制仿真进程调用格式为:
set_param(mode,'SimulationCommand','cmd')
例 9.2 假设从实际应用领域 (力学,电学,生态或社会 )中,抽象出有初始状态为 0的二阶微分方程 x"+0.2x'+0.4x=0.2u (t),u(t)是单位阶跃函数 。
用 积 分 器 直 接 构 造 求 解 微 分 方 程 的 模 型
exm1.mdl。
步骤如下:
(1)改写微分方程 。 把原方程改写为,x"=0.2u(t)-
0.2x'-0.4x
(2)利用 Simulink模块库中的标准模块构作模型 。
(3)仿真操作 。
(4)保存在 MATLAB工作空间中的数据 。
例 9.3利用传递函数模块建模 。
步骤如下:
(1)根据系统传递函数构造系统模型
(2)仿真操作 。
例 9.4利用状态方程模块建模 。
(1)利用构造仿真模型
(2)仿真
9.4 子系统的建立与封装
9.4.1 子系统的建立
1,通过 Subsystem模块建立子系统操作步骤为:
(1)先打开 Simulink模块库浏览器,新建一个仿真模型 。
(2)打开 Simulink模块库中的 Signals & Systems模块库,复制 Subsystem模块到新的模型窗口中 。
(3)用鼠标左 键双 击 Subsystem模块 打开一 个空 白的
Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要复制一个或多个 Input和 Output模块,
表示子系统的输入和输出端口 。 这样,一个子系统就建好了 。
2,通过已有的模块建立子系统操作步骤为:
(1)先选择要建立子系统的模块,不包括输入端口和输出端口 。
(2)选择模型窗口 Edit菜单中的 Create Subsystem 命令,这样,子系统就建好了 。 在这种情况下,系统会自动把
Input模块和 Output模块添加到子系统中,并把原来的模块变为子系统的图标 。
9.4.2 子系统的条件执行
1,使能子系统建立使能子系统的方法是:打开 Simulink模块库中的
Signals & Systems模块库,将 Enable模块复制到子系统模型中,则系统的图标发生了变化 。
例 9.5利用使能原理构成一个正弦半波整流器 。
操作步骤如下:
(1)打开 Simulink模块库浏览器以及新建一个模型窗口 。
(2)双击空子系统模块 Subsystem,打开其结构模型窗 。
(3)将 Simulink浏览库中的 In输入口模块,Out输出口模块,
Enable使能模块拖至子系统的结构模型窗;把 In模块的输出直接送到 Out模块的输入端; Enable模块无须进行任何连接,且采用它的缺省设置实现题目所需使能子系统 。
(4)完成新建模型窗口中各模块间的连接并存盘 。
(5)双击示波器模块,打开显示窗 。 然后选择 Simulink菜单中的 Start命令,就可看到半波整流波形 。
2,触发子系统触发子系统是指当触发事件发生时开始执行子系统 。 与使能子系统相类似,触发子系统的建立要把 Signals &
Systems模块库中的 Trigger模块拷贝到子系统中 。
例 9.6 利用触发子系统原理将一锯齿波转换成方波 。
操作步骤如下:
(1)用 Signal Generator,Subsystem和 Scope模块构成一子系统,双击 Signal Generator模块图标在 Wave from的下拉列表框中选择 sawtooth,即锯齿波 。
(2)将上例中的 Enable模块换成 Trigger触发模块 。 双击该模块并选 Trigger type触发事件形式为 either,即上跳沿或下跳没触发 。
(3)完成新建模型窗口中各模块间的连接,并存盘 。
(4)双击示波器模块,然后选择 Simulink菜单中的 start命令,
就可看到方波 。
3,使能加触发子系统所谓使能加触发子系统就是把 Enable和 Tirgger模块都加到子系统中,使能控制信号和触发控制信号共同作用子系统的执行,也就是前两种子系统的综合 。 该系统的行为方式与触发子系统相似,但只有当使能信号为正时,触发事件才起作用 。
9.4.3 子系统的封装子系统的封装过程很简单:先选中所要封装的子系统,
再选择模型窗口 Edit菜单中的 Mask Subsystem命令,这时将出现 MaskEditor对话框 。
Mask Editor 对 话 框 中 共 包 括 3 个 选 项 卡,Icon,
Initialization和 Documentation。 子系统的封装主要就是对这 3页参数进行设置 。
9.5 在命令窗口中创建模型
9.5.1 构造模型的命令
9.5.2 设置参数
9.6 S-函数的设计和应用
9.6.1 S-函数概述
9.6.2 用 M文件编写 S-函数
(1)MATLAB5.3为用户提供了一个模板,只要在必要的子程序里编写代码并输入参数就可以了 。
(2)从 Function & Tables子库里把 S-Function系统的功能模块复制过来,输入程序的文件名,以供调用 。
例 9.7利用 M文件来写一个限幅积分器的 S-函数,并借助 S-
函数模块来调用此文件 。 限幅积分器的数学模型如下:
操作步骤如下:
(1)根据数学模型,编写 S-函数 sfun97.m。
function[sys,x0,str,ts] = sfun97(t,x,u,flag,lb,ub,xi)
switchflag,
case0,
[sys,x0,srt,ts] = mdlInitializeSizes(xi);
case1,
sys= mdlDerivatives(t,x,u,lb,ub);
case2,
sys= mdlUpdate(t,x,u);
case3,
sys= mdlOutputs(t,x,u);
case4,
sys= mdlGetTimeOfNextVarHit(t,x,u);
case9,
sys= mdlTerminate(t,x,u);
(2)完成 S-函数的编写后,接着建立 Simulink模型,
将功能模块 S-function复制到设计区域,打开其参数页,输入 S-函数的文件名 sfun97.m和 S-函数的参数 lb,ub,xi。
(3)编写主程序 。
clear;
lb=-0.5;
ub=0.5;
xi=0;
sim(‘sfun97’);
(4)在命令窗口运行主程序,并双击示波器,即可查看到输入波形及限幅积分的结果 。
9.7 仿真系统的线性化分析
9.7.1 连续系统的线性化线性化分析函数 linmod用来提取非线性系统的近似线性模型,也可以用来获取线性系统的数学模型 。 linmod函数的调用格式为:
[A,B,C,D]=linmod ('sys')
[A,B,C,D]=linmod ('sys',x,u)
[A,B,C,D]=linmod ('sys',x,u,pert)
[A,B,C,D]=linmod ('sys',x,u,pert,xpert,upert)
9.7.2离散系统的线性化
dlinmod能够以任意给定的采样时间对离散系统,多速率系统以及连续和离散混合系统进行线性化 。 除了第 2个选项需要插入采样时间来对系统线性化外,dlinmod的调用格式和 linmod
是相同的:
[A,B,C,D]=dlinmod ('sys',Ts,x,u)
9.7.4 平衡分析在给定输入,输出及状态条件下,Simulink提供的函数 trim
可以用来确定系统的稳态平衡点 。 其调用格式为:
[x,u,y,dx]=trim('sys')
[x,u,y,dx]=trim('sys',x0,u0,y0,ix,iu,iy)
其中 x,u,y,dx分别代表状态向量,输入向量,输出向量和状态向量的导数 。 sys是模型名 。 x0,u0,y0分别为状态向量 x、
输入向量 u和输出向量 y的初始猜测值,它们的输入格式必须是列向量形式 。 ix是向量,它的元素是那些在寻找过程中,要求保持其值固定不变 (等于初始猜测值 )的那些状态变量的序号 。 iu,iy与 ix类似,分别适用于 u和 y。