我是靠谱客的博主 务实悟空,最近开发中收集的这篇文章主要介绍Simulink里的S函数介绍(Matlab-1),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在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 = [00]; %初始状态的值,初始为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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部