概述
在simulink中,S-函数是系统函数(System Function)的简称,S函数是一种非常有用的一个模块,经常用来描述控制算法,模型方程,是一个比较常见的模块。
S函数包括一个主函数,主函数里面有三个子函数,主函数一般都是如下形式:
function [sys,x0,str,ts] =fun(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case {2, 4, 9 }
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
而子函数包括:模型初始化 Initialization函数;微分函数描述的mdlDerivative函数;mdlOutput输出函数。
以一个简单的二阶系统为例:
也可以写成状态方程表达式:
使用S函数对该系统进行描述,输入为u,输出为速度和位移,假设初始位置和速度均为0;
1.Initialization函数:
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes; % 生成 sizes 数据结构
sizes.NumContStates = 2; % 连续状态数,缺省则为 0,俩个状态为速度和位移。
sizes.NumDiscStates = 0; % 离散状态数,缺省则为 0
sizes.NumOutputs = 2; % 输出量个数,缺省则为 0,俩个输出为速度和位移。
sizes.NumInputs = 1; % 输入量个数,缺省则为 0,输入为u
sizes.DirFeedthrough =0; % 有无直接馈入,有取 1,无取 0,缺省为 1。表示输入信号是否直接在输出端出现。
sizes.NumSampleTimes = 1; % 连续采样时间
sys = simsizes(sizes); % 返回 sizes 数据结构所包含的信息
x0 = [0,0]; %初始状态的值,初始为0.
str = []; % 保留变量,可以忽略
ts = [0 0]; % 采样时间:[采样周期 偏移量],取 0 则表示为连续系统
2.mdlDerivatives函数:
function sys=mdlDerivatives(t,x,u)
m= 3; %设置m
dt = sin(t); %设置d(t)
ut = u(1); %输入u;
sys(1)= x(2);
sys(2)= 1/m * (ut + dt) ; %状态空间表达式
3.mdlOutputs函数
function sys = mdlOutputs(t,x,u)
sys(1)= x(1);
sys(2)= x( 2); %状态空间方程输出
最后
以上就是务实悟空为你收集整理的Simulink里的S函数介绍(Matlab-1)的全部内容,希望文章能够帮你解决Simulink里的S函数介绍(Matlab-1)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复