MATLAB:【9】Simulink系统仿真

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 )

  1. fname是S函数的函数名
  2. 输入形参t, x, u, flag 分别为仿真时间、状态向量、输入向量和子函数调用标志
  3. 输出形参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仿真应用实例

这里留个坑,之后做个好玩的东西

猜你喜欢

转载自blog.csdn.net/Alex497259/article/details/104598741