9.1Simulink仿真基础
项目的创建
- 在新建按钮的位置可以直接新建Simulink文件
- 在打开的窗口可以新建Simulink项目
- 可以点击彩色的Simulink Library Brower 按钮,选择对应的模块。模块大体分为2类:专业模块库和Simulink模块库
- 将不同的模块拖到窗口上并进行连接,就可以构成Simulink仿真系统
Simulink模块的操作
- 模块的添加:首先要在Simulink模块库中找到该模块,然后用鼠标将这个模块拖曳到模型编辑窗口中即可
- 模块的删除和复制:和一般的编辑操作相同
- 两个模块的连接:利用鼠标可以将一个模块的输出端与另一个模块的输入端相连接,当连接线为实线时,释放鼠标表示连接成功
- 连线的分支:连好一条线以后,把鼠标指针移动到分支点的位置,按下Ctrl键,按住鼠标拖曳到目标模块的输入端,释放鼠标和Ctrl即可
模型存盘
- 左上角File-Save即可
模块参数的设置
- 模块参数的设置:双击要设置的模块即可
- 不同的模块,由不同的参数,需要根据实际要求进行设计
仿真参数的设置
- 点击齿轮按进入仿真参数的设置
- 可以在Solver菜单下,设置仿真算法为变步长或者是固定步长
9.2子系统的建立与封装
子系统的创建
- 通过Subsystem模块建立子系统,拖入到模型编辑窗口,双击即可编辑子系统
- 将已有的模块转换为子系统:先选择构成子系统的全部模块,然后执行创建子系统的命令,这样原来的全部模块变为一个子系统
子系统的封装
- 子系统的封装指为子系统定制对话框和图标,使其本身有一个独立的操作界面,将其参数的设置合成在一个对话框内,使子系统的使用更加方便
- 对四个封装选项卡进行设置,就可以完成对子系统的封装
子系统的条件执行
- 受控制信号执行的子系统,被称为条件执行子系统
使能子系统:使能子系统表示控制信号由负变正时系统开始执行,直到控制信号再次变为负时结束。其外观上有一个“使能”控制信号输入端口。
触发子系统:触发子系统是指当触发事件发生时开始执行子系统。与使能子系统类似,触发子系统的建立可直接选择Triggered Subsystem模块或者展开已有系统,添加Ports & Subsystems 库中的Trigger模块,将该子系统转换为出发子系统。触发子系统每次出发开始的值,都是上一次触发结束时的值。
使能触发子系统:就是当使能控制信号和触发信号共同作用时执行子系统
- 触发子系统的四种触发方式
9.3 S函数的设计与应用
S函数
- S函数全称为System Function,是指采用以中程序设计语言描述的一个功能模块
- 用户可以采用MATLAB语言,也可以采用C,C++,FORTRAN等语言来编写S函数(需要编译成可执行文件)
- S函数能够接收来自Simulink求解算法的相关信息,并对求解算法发出的命令作出适当相应,这种交互作用类似于Simulink系统模块与求解算法的相互作用
编写S函数
- 在MATLAB命令行窗口输入命令edit sfuntmpl.m,打开模板文件
function [sys, x0, str, ts ] = fname(t, x, u, flag )
- fname是S函数的函数名
- 输入形参t, x, u, flag 分别为仿真时间、状态向量、输入向量和子函数调用标志
- 输出形参sys代表一种返回参数;x0是初始状态值;对于M文件S函数,str将被制成一个空阵;ts是一个两列矩阵
%采用S函数实现y=kx+b。
%主函数
function [sys,x0,str,ts]=timekb(t,x,u,flag,k,b)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes; %初始化
case 3
sys=mdlOutputs(t,x,u,k,b); %计算输出量
case {1,2,4,9}
sys=[];
otherwise %出错处理
error(num2str(flag))
end
%②初始化子函数
function [sys,x0,str,ts]=mdlInitializeSizes()
sizes=simsizes; %返回一个结构
sizes.NumContStates=0; %无连续状态
sizes.NumDiscStates=0; %无离散状态
sizes.NumOutputs=1; %有一个输出量
sizes.NumInputs=1; %有一个输入信号
sizes.DirFeedthrough=1; %输出量中含有输入量
sizes.NumSampleTimes=1; %单个采样周期
sys=simsizes(sizes);
%给其他返回参数赋值
x0=[]; %设置初始状态为零状态
str=[]; %将str变量设置为空字符串
ts=[-1,0]; %假定继承输入信号的采样周期
%输出子函数
function sys=mdlOutputs(t,x,u,k,b)
sys=k*u+b;
S函数的应用
- 必须添加S函数模块
- 在S函数的模块中添加S函数文件名(双击打开参数对话框)
- 在模型编辑窗口,选中S模块,设置封装
- 即可完成设置
9.4 Simulink仿真应用实例
这里留个坑,之后做个好玩的东西