0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

S-function详解与模型参考自适应仿真案例

冬至子 ? 来源:控我所思VS制之以衡 ? 作者:控我所思 ? 2023-06-30 17:03 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1前言

S-Function是system-function系统函数的缩写,是指采用非图形化的方式描述的一个功能块。S-Function提供给用户自己编写程序来满足自己要求模型的接口

2 s-function总体架构

S-function包括主函数和6个子函数,子函数包括

1.mdlInitializeSizes(初始化)

2.mdlDerivatives(连续状态微分)

3.mdlUpdate(离散状态更新)

4.mdlOutputs(模块输出)

5.mdlGetTimeOfNextVarHit(计算下次采样时刻)

6.mdlTerminate(仿真结束)。

2.1 s-function 执行过程

  1. 在仿真开始时,执行mdlInitializeSizes
  2. 若系统包含连续部分,则调用mdlDerivatives;若系统包含离散部分,则调用mdlUpdate
  3. 调用mdlOutputs,产生输出
  4. 若满足条件,则执行mdlGetTimeOfNextVarHit
  5. 循环执行1--3,直至仿真停止
  6. 执行mdlTerminate,仿真停止

2.2 s-function 输入输出参数与状态变量

function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag)

S-function是基于状态空间表达式而设置的仿真模块,需要了解这个仿真模块的输入输出和内部的状态变量。

输入变量:

t :系统时间

x :系统状态

u : 系统输入,即在simulink models中连接至S-function的线上的数据。注意区分x和u

flag : 系统状态,由系统自动生成,决定了系统应当执行哪个S-function子函数

除了这四个必须有的变量,还可以自行根据需要添加变量,供子函数调用

输出变量:

sys : 系统本身,可以理解为下一时刻的系统;同时sys的前几个数值(sys[1]等)是系统的输出,即在simulink中S-function伸出线上的数据

x0 : 系统初始状态

str : 状态排序字符串,通常指定为[]。

ts : 可认为是采样时间

(simStateCompliance 不用管)

3 子函数

3.1 mdlInitializeSizes函数

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes

% 不需要更改的内容
sizes = simsizes;

% 需要更改的内容:状态、输出、输入的数量
sizes.NumContStates = 0; %连续状态的数量
sizes.NumDiscStates = 0; %离散状态的数量
sizes.NumOutputs = 0; %输出的数量
sizes.NumInputs = 0; %输入的数量
sizes.DirFeedthrough = 1; %输出y和输入u是否是直通(输出的向量中是否直接含有输入)
sizes.NumSampleTimes = 1; %采样时间

sys = simsizes(sizes);

% 需要更改的内容:状态变量的初始值
x0  = [];

% 不需要更改的内容
str = [];

% 按需要更改,ts的第一个数字表示采样时间,第二个数字表示偏移量;连续系统不需要改
% [0 0]——表示默认采样时间(默认为0.2秒采样一次);
% [-1 0] ——表示根据连接模块的采样频率进行采样;
ts  = [0 0];

% 按需要更改
simStateCompliance = 'UnknownSimState';

1.jpg

3.3 mdlOutputs函数

function sys=mdlOutputs(t,x,u)

sys = [];

3.4 mdlGetTimeOfNextVarHit函数

function sys=mdlGetTimeOfNextVarHit(t,x,u)
% 计算下一个采样点的绝对时间,只有当在mdlInitializeSizes中指定了变步长离散采样时间时,才使用该程序
sampleTime = 1;    %  Example, set the next hit to be one second later.
sys = t + sampleTime;

3.5 mdlTerminate函数

function sys=mdlTerminate(t,x,u)
% 终止函数,可添加当Simulink终止时所需执行内容

sys = [];

4 举例

4.1 二阶模型

对于如下被控对象,其传递函数为:

1.jpg

图片

仿真结果:曲线重合,三种模型表达方式相同

图片

4.2 简单自适应控制系统(MRAC)

4.2.1 系统模型与证明

1.jpg

图片

s-function input

function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 3;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0  = [0.5,0];
str = [];
ts  = [];
function sys=mdlDerivatives(t,x,u)
r=sin(4*t);
nmn1=10;
nmn2=25;
sys(1)=x(2);
sys(2)=-nmn1*x(2)-nmn2*x(1)+nmn2*r;
function sys=mdlOutputs(t,x,u)
r=sin(4*t);
nmn1=10;
nmn2=25;
xm=x(1);
dxm=x(2);
ddxm=-nmn1*x(2)-nmn2*x(1)+nmn2*r;
sys(1)=xm;
sys(2)=dxm;
sys(3)=ddxm;

s-function controller

function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 1;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 6;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0  = [0];
str = [];
ts  = [];
function sys=mdlDerivatives(t,x,u)
xm=u(1);
dxm=u(2);
ddxm=u(3);
x1=u(4);
dx1=u(5);
e=x1-xm;
de=dx1-dxm;
nmn=6;
s=de+nmn*e;
v=ddxm-2*nmn*de-nmn^2*e;
gama=0.5;
sys(1)=-gama*v*s;
function sys=mdlOutputs(t,x,u)
xm=u(1);
dxm=u(2);
ddxm=u(3);
x1=u(4);
dx1=u(5);
e=x1-xm;
de=dx1-dxm;
nmn=6;
mp=x(1);
ut=mp*(ddxm-2*nmn*de-nmn^2*e);
sys(1)=mp;
sys(2)=ut;

s-function plant

function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 3;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0  = [0.5,0];
str = [];
ts  = [0 0];
function sys=mdlDerivatives(t,x,u) 
m=2;
ut=u(2);
sys(1)=x(2);
sys(2)=1/m*ut;
function sys=mdlOutputs(t,x,u)
m=2;
sys(1)=x(1);
sys(2)=x(2);
sys(3)=m;

理想位置输出与真实位置输出

图片

参数m估计值与真实值

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    1043

    浏览量

    85630
  • 状态机
    +关注

    关注

    2

    文章

    494

    浏览量

    28363
  • MRAC
    +关注

    关注

    0

    文章

    4

    浏览量

    7230
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    模型自适应控制在永磁同步电机转速中的仿真研究

    的可行性和有效性。 纯分享帖,点击下方附件免费获取完整资料~~~ *附件:无模型自适应控制在永磁同步电机转速中的仿真研究.pdf 【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时
    发表于 06-25 13:01

    s-function的概念

    s-function是一个动态系统的计算机语言描述,在MATLAB里,用户可以选择用m文件编写,也可以用c或mex文件编写,在这里只给大家介绍如何用m文件编写s-function
    发表于 07-13 14:15

    建立m文件s-function

    输出参数,最好不做修改。接下去的工作就是根据所编s-function要完成的任务,用相应的代码去替代模板里各个子函数的代码即可。Simulink在每个仿真阶段都会对s-function进行调用,在调用
    发表于 07-13 14:16

    横润科技《MATLAB的S-Function编写指导

    横润科技《MATLAB的S-Function编写指导pdf格式100页,介绍simulink中s函数的编写。
    发表于 08-05 10:04

    搭建最基本的S-function模块

    simulink中搭建模型,都是先搭simulink中有的东西,然后碰到simulink中没有的才会去建S-function,那么在这个时候,你就很清楚你的S-function具体是干什么的,他应该有什么输出,有
    发表于 12-24 12:22

    matlab原版 developing S-function

    matlab原版 developing S-function
    发表于 11-14 11:31

    simulink仿真问题:s_function

    我在仿真时,用一个FCN,就是z形式的传递函数,运行是可以的。但是当我用s-function,即离散化语言来表达这个传递函数, 替换原来的FCN,其他的都没变,现象就出不来了。有大牛知道是怎么回事嘛???谢谢了
    发表于 08-17 15:52

    S-function的工作原理解析

    S-function函数S-function工作原理
    发表于 12-31 06:17

    什么是s-function

    S-function一、什么是s-function(1)非图形化地实现一个动态系统(2)支持多种语言编写(3)s-function是以现代控制理论的状态方程为基础的二、如何编写一个自己
    发表于 08-30 08:10

    如何去实现S-Function与Simulink的数据交互呢

    什么是S-Function?如何使用S-Function函数呢?如何去实现S-Function与Simulink的数据交互呢?
    发表于 11-22 07:48

    基于MATLAB的时变系统自适应控制的仿真

    本文介绍了基于MATLAB 的仿真工具SIMULINK,对于线性时变系统的模型参考自适应控制的仿真研究,并给出了仿真结果。关键词: MATL
    发表于 06-13 08:59 ?36次下载

    基于MATLAB S-Function的飞行器运动系统建模与

    本文讲述了使用Matlab/S-Function 建模与仿真的一种方法。主要介绍如何对飞行器的运动学方程进行S 函数建模,并分析了S 函数各模块的编写及功能。分析表明对于复杂的运动系
    发表于 12-16 13:36 ?60次下载

    MATLAB的S-Function编写指导

    S-Function(系统函数)为扩展Simulink®的性能提供了一个有力的工具。以下下节阐述了什么是S-Function,为什么可以使用S-Function,以及怎样编写自己的S-
    发表于 08-16 16:39 ?146次下载

    SIMULINK s-function的设计

    SIMULINK  s-function的设计Simulink为用户提供了许多内置的基本库模块,通过这些模块进行连接而构成系统的模型。对于那些经常使用的模块进行组合并封装可以构
    发表于 06-19 12:55 ?2372次阅读

    使用Simulink进行S-Function建模的教程PPT课件免费下载

    本文档的主要内容详细介绍的是使用Simulink进行S-Function建模的教程PPT课件免费下载包括了:1 Simulink S函数仿真应用,2 M-file S-functi
    发表于 10-08 08:00 ?0次下载
    使用Simulink进行<b class='flag-5'>S-Function</b>建模的教程PPT课件免费下载