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

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 执行过程在仿真开始时,执行mdlinitializesizes若系统包含连续部分,则调用mdlderivatives;若系统包含离散部分,则调用mdlupdate调用mdloutputs,产生输出若满足条件,则执行mdlgettimeofnextvarhit循环执行1--3,直至仿真停止执行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';
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 二阶模型对于如下被控对象,其传递函数为:
仿真结果:曲线重合,三种模型表达方式相同
4.2 简单自适应控制系统(mrac)4.2.1 系统模型与证明
s-function input
function [sys,x0,str,ts]=mdlinitializesizessizes = 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]=mdlinitializesizessizes = 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]=mdlinitializesizessizes = 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估计值与真实值

modbus转profinet网关连接5台台达ME300变频器案例
骁龙855对比a12
三星GalaxyS8怎样更换电池
华为在自动驾驶等领域正式成立了智能车解决方案BU部门
CPU正式退位 属于GPU的高光时刻来了
S-function详解与模型参考自适应仿真案例
视觉效果公司选择NVIDIA Omniverse开展远程实时协作
恒温孵育箱调控温电路
酒精生产线DCS控制系统的设计
是德科技推出USB4™2.0版解决方案,优化设计性能、确保标准合规性
NI虚拟仪器技术在多核/并行测试系统的应用研究
现场测试VNA校验探讨
CS5220资料,CS5220规格书,HDMI转VGA(内置Flash可更新FW)方案
在宇宙的眼眸下如何正确地关心东数西算
可调电阻器的接线方法
2.4G无线游戏耳机兼容问题及解决方案|天惠微科技
联发科因工艺产能限制或无缘5nm工艺,难以冲击高端手机芯片市场
诺基亚8.2 5G曝光搭载骁龙735处理器和新一代AI引擎
振荡器的操作流程说明
推出“一小时特征电网”规划 东莞智能电网扬帆起航