SFunction 使用及应用举例.docx
- 文档编号:5404230
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:20
- 大小:23.88KB
SFunction 使用及应用举例.docx
《SFunction 使用及应用举例.docx》由会员分享,可在线阅读,更多相关《SFunction 使用及应用举例.docx(20页珍藏版)》请在冰豆网上搜索。
SFunction使用及应用举例
S-Function使用及应用举例
【说明】近来在论坛中很多朋友问及Simulink下的S-函数的编写及使用方法,在西安交大BBS上,hii_yzf网友发表了有关S-函数使用的文章,举例比较详尽,相信对关心S-函数的网友会有很大帮助。
发信人:
hii_yzf(叶子,信区:
MathTools
标题:
S-FUNCTIONS的书写之一
发信站:
交通大学思源BBS站(MonApr1616:
35:
092001,站内信件
S-FUNCTIONS的书写之一
s-function也就是system-function的缩写。
说得简单,s-function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。
要了解s-function,必须了解以下知识:
(1directfeedthrough
(2dynamicallysizedinputs
(3settingsampletimesandoffsets
[由于我也不知道怎么把上面三句话精确的翻译成中文,因此在此不加翻译,大家自己理解,也许更好]由于上面三部分的重要性,在此详细进行分析。
一.directfeedthrough
directfeedthrough意思是说系统的输出或可变采样时间是否受到输入的控制。
大家清楚有的系统是受到输入控制如:
y=k*u(u是输入,k是放大因子,y是输出
而有的系统输出是不受到输入影响,如:
输出:
y=x
dx=u
x表示状态
二.dynamicallysizedinputs
主要是给出:
输入连续状态数目(size.NumContStates,离散状态数目(size.NumDiscStates
输出数目(size.NumOutputs,输入数目(size.NumInputs,DirectFeedthrough(size.DirFeedthrough。
三.settingsampletimesandoffsets
settingsmapletimesandoffsets主要设置采样时间MATLAB为了用户方便,已经书写了S-FUNCTIONS模板函数sfuntmpl.m。
为了更好的写S-FUNCTIONS,大家来看一下,该函数sfuntmpl.m内容如下:
(我通过在该内容加注释来说明,以$开头
function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag
$输出变量就此四个,大家必须注意它的顺序。
$输入变量可以为t,x,u,flag,p1,...,pn等,但是前面的四个变量不能变,特此说明。
%SFUNTMPLGeneralM-fileS-functiontemplate
%WithM-fileS-functions,youcandefineyouownordinarydifferential%equations(ODEs,discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.
%
$上面是其功能
%ThegeneralformofanM-FileS-functionsyntaxis:
%[SYS,X0,STR,TS]=SFUNC(T,X,U,FLAG,P1,...,Pn
%
$调用格式
%WhatisreturnedbySFUNCatagivenpointintime,T,dependsonthe%valueoftheFLAG,thecurrentstatevector,X,andthecurrent
%inputvector,U.
%
%FLAGRESULTDESCRIPTION
%-------------------------------------------------------
%0[SIZES,X0,STR,TS]Initialization,returnsystemsizesinSYS,
%initialstateinX0,stateorderingstrings
%inSTR,andsampletimesinTS.
$具体怎样实现,大家参看后面的函数mdlInitializeSizes
%1DXReturncontinuousstatederivativesinSYS.
%2DSUpdatediscretestatesSYS=X(n+1
%3YReturnoutputsinSYS.
%4TNEXTReturnnexttimehitforvariablestepsample
%timeinSYS.
%5Reservedforfuture(rootfinding.
%9[]Termination,performanycleanupSYS=[].
%
$参看后面相应函数
%
%Thestatevectors,XandX0consistsofcontinuousstatesfollowed
%bydiscretestates.
%
%Optionalparameters,P1,...,PncanbeprovidedtotheS-functionand%usedduringanyFLAGoperation.
%
%WhenSFUNCiscalledwithFLAG=0,thefollowinginformation
%shouldbereturned:
%
%SYS(1=Numberofcontinuousstates.
%SYS(2=Numberofdiscretestates.
%SYS(3=Numberofoutputs.
%SYS(4=Numberofinputs.
%AnyofthefirstfourelementsinSYScanbespecified
%as-1indicatingthattheyaredynamicallysized.The
%actuallengthforallotherflagswillbeequaltothe
%lengthoftheinput,U.
%SYS(5=Reservedforrootfinding.Mustbezero.
%SYS(6=Directfeedthroughflag(1=yes,0=no.Thes-function
%hasdirectfeedthroughifUisusedduringtheFLAG=3
%call.Settingthisto0isakintomakingapromisethat
%UwillnotbeusedduringFLAG=3.Ifyoubreakthepromise
%thenunpredictableresultswilloccur.
%SYS(7=Numberofsampletimes.ThisisthenumberofrowsinTS.%
$需要说明的是sys的顺序不能乱
%
%X0=Initialstateconditionsor[]ifnostates.
%
%STR=Stateorderingstringswhichisgenerallyspecifiedas[].
%
%TS=Anm-by-2matrixcontainingthesampletime
%(period,offsetinformation.Wherem=numberofsample
%times.Theorderingofthesampletimesmustbe:
%
%TS=[00,:
Continuoussampletime.
%01,:
Continuous,butfixedinminorstep
%sampletime.
%PERIODOFFSET,:
Discretesampletimewhere
%PERIOD>0&OFFSET〈PERIOD.
%-20];:
Variablestepdiscretesampletime
%whereFLAG=4isusedtogettimeof
%nexthit.
%
%Therecanbemorethanonesampletimeproviding
%theyareorderedsuchthattheyaremonotonically
%increasing.Onlytheneededsampletimesshouldbe
%specifiedinTS.Whenspecifyingthanone
%sampletime,youmustcheckforsamplehitsexplicitlyby
%seeingif
%abs(round((T-OFFSET/PERIOD-(T-OFFSET/PERIOD
%iswithinaspecifiedtolerance,generally1e-8.This
%toleranceisdependentuponyourmodel'ssamplingtimes
%andsimulationtime.
%
%YoucanalsospecifythatthesampletimeoftheS-function
%isinheritedfromthedrivingblock.Forfunctionswhich
%changeduringminorsteps,thisisdoneby
%specifyingSYS(7=1andTS=[-10].Forfunctionswhich
%areheldduringminorsteps,thisisdonebyspecifying
%SYS(7=1andTS=[-1-1].
%Copyright(c1990-1998byTheMathWorks,Inc.AllRightsReserved.
%$Revision:
1.12$
%
%ThefollowingoutlinesthegeneralstructureofanS-function.
%
switchflag,
%%%%%%%%%%%%%%%%%%
%Initialization%
%%%%%%%%%%%%%%%%%%
case0,[sys,x0,str,ts]=mdlInitializeSizes;
$大家是不是觉得此函数名太长,当然可以根据自己的爱好加以改变,不过后面的相应改。
%%%%%%%%%%%%%%%
%Derivatives%
%%%%%%%%%%%%%%%
case1,sys=mdlDerivatives(t,x,u;
%%%%%%%%%%
%Update%
%%%%%%%%%%
case2,sys=mdlUpdate(t,x,u;
%%%%%%%%%%%
%Outputs%
%%%%%%%%%%%
case3,sys=mdlOutputs(t,x,u;
%%%%%%%%%%%%%%%%%%%%%%%
%GetTimeOfNextVarHit%
%%%%%%%%%%%%%%%%%%%%%%%
case4,sys=mdlGetTimeOfNextVarHit(t,x,u;
%%%%%%%%%%%%%
%Terminate%
%%%%%%%%%%%%%
case9,sys=mdlTerminate(t,x,u;
%%%%%%%%%%%%%%%%%%%%
%Unexpectedflags%
%%%%%%%%%%%%%%%%%%%%
otherwise,error(['Unhandledflag=',num2str(flag];
end
%endsfuntmpl
%
%==============================================================
===============
%mdlInitializeSizes
%Returnthesizes,initialconditions,andsampletimesfortheS-function.
%=============================================================================
%
function[sys,x0,str,ts]=mdlInitializeSizes
%
%callsimsizesforasizesstructure,fillitinandconvertittoa
%sizesarray.
%
%Notethatinthisexample,thevaluesarehardcoded.Thisisnota
%recommendedpracticeasthecharacteristicsoftheblockaretypically
%definedbytheS-functionparameters.
%
$关于函数simsizes大家必须遵循,因为把是内部函数,不得随便改变,其作用是返回未初始化的size结构。
sizes=simsizes;
$numberofcontinuousstates
sizes.NumContStates=0;
$numberofdiscretestates
sizes.NumDiscStates=0;
$numberofoutputs
sizes.NumOutputs=0;
$numberofinputs
sizes.NumInputs=0;
$Flagfordirectfeedthrough
sizes.DirFeedthrough=1;
$numberofsampletimes
sizes.NumSampleTimes=1;
%atleastonesampletimeisneeded
$
sys=simsizes(sizes;
%
%initializetheinitialconditions
%
x0=[];
%
%strisalwaysanemptymatrix
%
str=[];
%
%initializethearrayofsampletimes
%
ts=[00];
%endmdlInitializeSizes
%
%=============================================================================
%mdlDerivatives
%Returnthederivativesforthecontinuousstates.
%=============================================================================
%
functionsys=mdlDerivatives(t,x,u
sys=[];%endmdlDerivatives
%
%=============================================================================
%mdlUpdate
%Handlediscretestateupdates,sampletimehits,andmajortimestep
%requirements.
%=============================================================================
%
functionsys=mdlUpdate(t,x,u
sys=[];%endmdlUpdate
%
%=============================================================================
%mdlOutputs
%Returntheblockoutputs.
%=============================================================================
%
functionsys=mdlOutputs(t,x,u
sys=[];%endmdlOutputs
%
%=============================================================================
%mdlGetTimeOfNextVarHit
%Returnthetimeofthenexthitforthisblock.Notethattheresultis
%absolutetime.Notethatthisfunctionisonlyusedwhenyouspecifya
%variablediscrete-timesampletime[-20]inthesampletimearrayin
%mdlInitializeSizes.
%=============================================================================
%
functionsys=mdlGetTimeOfNextVarHit(t,x,u
sampleTime=1;%Example,setthenexthittobeonesecondlater.
sys=t+sampleTime;%endmdlGetTimeOfNextVarHit
%
%=============================================================================
%mdlTerminate
%Performanyendofsimulationtasks.
%=============================================================================
%
functionsys=mdlTerminate(t,x,u
sys=[];%endmdlTerminate
在下面我将写几个具体的实例。
之二、连续系统例子:
function[sys,x0,str,ts]=csfunc(t,x,u,flag
%CSFUNCAnexampleM-fileS-functionfordefiningacontinuoussystem.
%ExampleM-fileS-functionimplementingcontinuousequations:
%x'=Ax+Bu
%y=Cx+Du
%
%Seesfuntmpl.mforageneralS-functiontemplate.
%
%SeealsoSFUNTMPL.
%Copyright(c1990-1998byTheMathWorks,Inc.AllRightsReserved.
%$Revision:
1.5$
A=[-0.09-0.01;10];
B=[1-7;0-2];
C=[02;1-5];
D=[-30;10];
switchflag,
%%%%%%%%%%%%%%%%%%
%Initialization%
%%%%%%%%%%%%%%%%%%
case0,[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D;
%%%%%%%%%%%%%%%
%Derivatives%
%%%%%%%%%%%%%%%
case1,sys=mdlDerivatives(t,x,u,A,B,C,D;
%%%%%%%%%%%
%Outputs%
%%%%%%%%%%%
case3,sys=mdlOutputs(t,x,u,A,B,C,D;
%%%%%%%%%%%%%%%%%%%
%Unhandledflags%
%%%%%%%%%%%%%%%%%%%
case{2,4,9},sys=[];
%%%%%%%%%%%%%%%%%%%%
%Unexpectedflags%
%%%%%%%%%%%%%%%%%%%%
otherwise,error(['Unhandledflag=',num2str(flag];
end
%endcsfunc
%
%=============================================================================
%mdlInitializeSizes
%Returnthesizes,initialconditions,andsampletimesfortheS-function.
%=============================================================================
%
function[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D
sizes=simsizes;
sizes.NumContStates=2;sizes.Nu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SFunction 使用及应用举例 使用 应用 举例