Simulink框图和S-函数

介绍

创建模型步骤

Simulink框图和S-函数_第1张图片

Simulink框图和S-函数_第2张图片

 

 

模块集

使用模块创建框图:将需要的模块拖拽出来并连接

Simulink框图和S-函数_第3张图片

Simulink框图和S-函数_第4张图片

Simulink框图和S-函数_第5张图片

 

 

子系统及其封装

选中并右击,进行子系统封装

Simulink框图和S-函数_第6张图片

Simulink框图和S-函数_第7张图片

 

 

S-函数

Level-1 M文件型:创建sfuntest.m文件,实现y=-x功能

%​​sfuntest:S-函数的函数名
%t:当前仿真时间
%x:状态向量
%u:输入向量
%flag:用来标示仿真步骤,调用不同的回调函数
%sys:不同flag意义不同。0-系统描述、1-微分结果、2-更新结果、3-输出结果、4-下一个采样点、9-控制
%x0:输出状态值(只有flag为0时返回)
%str:状态字符串(只有flag为0时返回)
%ts:采样时间(只有flag为0时返回)
%(level-1的规定格式,照做就行了,除了函数名不要去改动)
function [sys,x0,str,ts,simStateCompliance] = sfuntest(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  case 1,
    sys=mdlDerivatives(t,x,u);
  case 2,
    sys=mdlUpdate(t,x,u);
  case 3,
    sys=mdlOutputs(t,x,u);
  case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
  case 9,
    sys=mdlTerminate(t,x,u);
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end

%初始化
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;       %连续状态个数
sizes.NumDiscStates  = 0;       %离散状态个数
sizes.NumOutputs     = 1;       %输出数目
sizes.NumInputs      = 1;       %输入数目
sizes.DirFeedthrough = 1;       %有无直接反馈(输出=k*输入,表示有直接反馈;输出=k*状态,表示相反)
sizes.NumSampleTimes = 1;       %采样时间个数,至少一个采样时间
sys = simsizes(sizes);
x0  = [];       %初始状态
str = [];       %状态字符串
ts  = [0 0];    %采样时间,[0 0]连续采样时间、[0 1]连续采样时间并以最小步长运算、
                %[period offset]采样时间Tm=m*period+offset、[-2 0]变步长离散采样时间,由flag=4设置、
                %[-1 0]最小步长内改变的函数并采用驱动模块的采样时间、[-1 1]最小步长内不改变的函数并采用驱动模块的采样时间
simStateCompliance = 'UnknownSimState';

%状态导数函数
function sys=mdlDerivatives(t,x,u)
sys = [];

%状态表示函数
function sys=mdlUpdate(t,x,u)
sys = [];

%输出函数
function sys=mdlOutputs(t,x,u)
sys = -1 * u;

%下一步采样时间
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;     %采样步长
sys = t + sampleTime;

%采样结束
function sys=mdlTerminate(t,x,u)
sys = [];

Simulink框图和S-函数_第8张图片

Simulink框图和S-函数_第9张图片

Simulink框图和S-函数_第10张图片

 

 

 

 

 

 

 

你可能感兴趣的:(MATLAB)