关键词不能为空

当前您在: 主页 > 英语 >

S-Function 使用及应用举例.

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-24 15:35
tags:

-

2021年2月24日发(作者:nude)



S-Function


使用及应用举例



【说明】近来在论坛中很多朋友问及


Simulink


下的


S-


函数的编写及使用方法


,


在西安交大


BBS



, hii_yzf


网友发表了有 关


S-


函数使用的文章


,


举例比较详尽


,


相信


对关心


S-


函数的网友会有很大帮助。



发信人


: hii_yzf (


叶子


,


信区


: MathTools


标题


: S-FUNCTIONS


的书写之一



发信站


:


交通大学思源


BBS



(Mon Apr 16 16:35:09 2001 ,


站内信件



S-FUNCTIONS


的书写之一



s-function


也就是


syst em-function


的缩写。说得简单


,s-functi on


就是用


MATLAB


所提供的模型 不能完全满足用户


,


而提供给用户自己编写程序来满足自己


要求模型的接口。要了解


s-function,


必须了解以下知识


:


(1direct feedthrough


(2dynamically sized inputs


(3setting sample times and offsets


[


由于我也不知道怎么把上面三句话精确的翻译成中文

< br>,


因此在此不加翻译


,


大家


自己理解


,


也许更好


]


由于上面三部分的重要性


,


在此详 细进行分析。




.direct feedthrough


direct feedthrough

意思是说系统的输出或可变采样时间是否受到输入的控制。


大家清楚有的系统是受到 输入控制如


:


y=k*u (u


是输 入


,k


是放大因子


,y


是输出



而有的系统输出是不受到输入影响

< p>
,



:




输出


:y=x


dx=u


x


表示状态




.dynamically sized inputs < /p>


主要是给出


:


输入连续状态数目


(tStates,


离散状态数目


(cStat es


,


输出数目


(puts,


输入数目


(uts,Direct Feedthrough(


Feedthrough


。三


.setti ng sample times and offsets


setting smaple times and offsets


主要设置采样时间


MATLAB


为了用户方便


,


已经


书写了


S-FUNCTIONS


模板函数


s funtmpl.m


。为了更好的写


S-FUNCTIONS,


大家来


看一下


,


该函数


sfuntmpl.m


内容如下


:(


我通过在该内容加注释来说明


,



$$


开头



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


$$


输出变量就此四 个


,


大家必须注意它的顺序。


$$


输入变量可以为


t,x,u,flag,p1,...,pn



,


但是前面的四个变量不能变


,


特此说明。



%SFUNTMPL General M-file S-function template


% With M-file S-functions, you can define you own ordinary differential %


equations (ODEs, discrete system equations, and/or just about


% any type of algorithm to be used within a Simulink block diagram.


%


$$


上面是其功能



% The general form of an M-File S-function syntax is:




% [SYS,X0,STR,TS] = SFUNC(T,X,U,FLAG,P1,...,Pn


%


$$


调用格式



% What is returned by SFUNC at a given point in time, T, depends on the % value


of the FLAG, the current state vector, X, and the current


% input vector, U.


%


% FLAG RESULT DESCRIPTION


% ----- ------ --------------------------------------------


% 0 [SIZES,X0,STR,TS] Initialization, return system sizes in SYS,


% initial state in X0, state ordering strings


% in STR, and sample times in TS.


$$


具体怎样实现


,


大家参看后面的函数


mdlInitializeSizes


% 1 DX Return continuous state derivatives in SYS.


% 2 DS Update discrete states SYS = X(n+1


% 3 Y Return outputs in SYS.


% 4 TNEXT Return next time hit for variable step sample


% time in SYS.


% 5 Reserved for future (root finding.




% 9 [] Termination, perform any cleanup SYS=[].


%


$$


参看后面相应函数



%


% The state vectors, X and X0 consists of continuous states followed


% by discrete states.


%


% Optional parameters, P1,...,Pn can be provided to the S-function and % used


during any FLAG operation.


%


% When SFUNC is called with FLAG = 0, the following information


% should be returned:


%


% SYS(1 = Number of continuous states.


% SYS(2 = Number of discrete states.


% SYS(3 = Number of outputs.


% SYS(4 = Number of inputs.


% Any of the first four elements in SYS can be specified


% as -1 indicating that they are dynamically sized. The




% actual length for all other flags will be equal to the


% length of the input, U.


% SYS(5 = Reserved for root finding. Must be zero.


% SYS(6 = Direct feedthrough flag (1=yes, 0=no. The s-function


% has direct feedthrough if U is used during the FLAG=3


% call. Setting this to 0 is akin to making a promise that


% U will not be used during FLAG=3. If you break the promise


% then unpredictable results will occur.


% SYS(7 = Number of sample times. This is the number of rows in TS. %


$$


需要说明的是


sys


的顺序 不能乱



%


% X0 = Initial state conditions or [] if no states.


%


% STR = State ordering strings which is generally specified as [].


%


% TS = An m-by-2 matrix containing the sample time


% (period, offset information. Where m = number of sample


% times. The ordering of the sample times must be:


%




% TS = [0 0, : Continuous sample time.


% 0 1, : Continuous, but fixed in minor step


% sample time.


% PERIOD OFFSET, : Discrete sample time where


% PERIOD > 0 & OFFSET



PERIOD.


% -2 0]; : Variable step discrete sample time


% where FLAG=4 is used to get time of


% next hit.


%


% There can be more than one sample time providing


% they are ordered such that they are monotonically


% increasing. Only the needed sample times should be


% specified in TS. When specifying than one


% sample time, you must check for sample hits explicitly by


% seeing if


% abs(round((T-OFFSET/PERIOD - (T-OFFSET/PERIOD


% is within a specified tolerance, generally 1e-8. This


% tolerance is dependent upon your model's sampling times


% and simulation time.




%


% You can also specify that the sample time of the S-function


% is inherited from the driving block. For functions which


% change during minor steps, this is done by


% specifying SYS(7 = 1 and TS = [-1 0]. For functions which


% are held during minor steps, this is done by specifying


% SYS(7 = 1 and TS = [-1 -1].


% Copyright (c 1990-1998 by The MathWorks, Inc. All Rights Reserved.


% $$Revision: 1.12 $$


%


% The following outlines the general structure of an S-function.


%


switch flag,


%%%%%%%%%%%%%%%%%%


% Initialization %


%%%%%%%%%%%%%%%%%%


case 0,[sys,x0,str,ts]=mdlInitializeSizes;


$$


大家是不是觉得此函数名太长


,


当然可 以根据自己的爱好加以改变


,


不过后面的


相应改。


%%%%%%%%%%%%%%%




% Derivatives %


%%%%%%%%%%%%%%%


case 1,sys=mdlDerivatives(t,x,u;


%%%%%%%%%%


% Update %


%%%%%%%%%%


case 2,sys=mdlUpdate(t,x,u;


%%%%%%%%%%%


% Outputs %


%%%%%%%%%%%


case 3,sys=mdlOutputs(t,x,u;


%%%%%%%%%%%%%%%%%%%%%%%


% GetTimeOfNextVarHit %


%%%%%%%%%%%%%%%%%%%%%%%


case 4,sys=mdlGetTimeOfNextVarHit(t,x,u;


%%%%%%%%%%%%%


% Terminate %


%%%%%%%%%%%%%


case 9,sys=mdlTerminate(t,x,u;




%%%%%%%%%%%%%%%%%%%%


% Unexpected flags %


%%%%%%%%%%%%%%%%%%%%


otherwise, error(['Unhandled flag = ',num2str(flag];


end


% end sfuntmpl


%


%================ ==========================================

< br>====


===============


% mdlInitializeSizes


% Return the sizes, initial conditions, and sample times for the S-function.


%========================== ================================


==== ===============


%


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


%


% call simsizes for a sizes structure, fill it in and convert it to a


% sizes array.




%


% Note that in this example, the values are hard coded. This is not a


% recommended practice as the characteristics of the block are typically


% defined by the S-function parameters.


%


$$


关于函数


simsizes


大家必须遵循< /p>


,


因为把是内部函数


,

< br>不得随便改变


,


其作用是


返回未 初始化的


size


结构。



sizes = simsizes;


$$number of continuous states


tStates = 0;


$$number of discrete states


cStates = 0;


$$number of outputs


puts = 0;


$$ number of inputs


uts = 0;


$$Flag for direct feedthrough


dthrough = 1;


$$number of sample times




pleTimes = 1;


% at least one sample time is needed


$$


sys = simsizes(sizes;


%


% initialize the initial conditions


%


x0 = [];


%


% str is always an empty matrix


%


str = [];


%


% initialize the array of sample times


%


ts = [0 0];


% end mdlInitializeSizes


%




%========================== ================================


==== ===============


% mdlDerivatives


% Return the derivatives for the continuous states.


%=================== =======================================


==== ===============


%


function sys=mdlDerivatives(t,x,u


sys = []; % end mdlDerivatives


%


%========================= =================================


==== ===============


% mdlUpdate


% Handle discrete state updates, sample time hits, and major time step


% requirements.


%======================== ==================================


==== ===============


%


function sys=mdlUpdate(t,x,u


sys = []; % end mdlUpdate




%


%========================================= =================


==== ===============


% mdlOutputs


% Return the block outputs.


%======================= ===================================


==== ===============


%


function sys=mdlOutputs(t,x,u


sys = []; % end mdlOutputs


%


%============== ============================================


==== ===============


% mdlGetTimeOfNextVarHit


% Return the time of the next hit for this block. Note that the result is


% absolute time. Note that this function is only used when you specify a


% variable discrete-time sample time [-2 0] in the sample time array in


% mdlInitializeSizes.


%================== ========================================


==== ===============




%


function sys=mdlGetTimeOfNextVarHit(t,x,u


sampleTime = 1; % Example, set the next hit to be one second later.


sys = t + sampleTime; % end mdlGetTimeOfNextVarHit


%


%========================= =================================


==== ===============


% mdlTerminate


% Perform any end of simulation tasks.


%====================================== ====================


==== ===============


%


function sys=mdlTerminate(t,x,u


sys = []; % end mdlTerminate


在下面我将写几个具体的实例。



之二、连续系统例子


:


function [sys,x0,str,ts] = csfunc(t,x,u,flag


%CSFUNC An example M-file S-function for defining a continuous system.


% Example M-file S-function implementing continuous equations:




% x' = Ax + Bu


% y = Cx + Du


%


% See sfuntmpl.m for a general S-function template.


%


% See also SFUNTMPL.


% Copyright (c 1990-1998 by The MathWorks, Inc. All Rights Reserved.


% $$Revision: 1.5 $$


A=[-0.09 -0.01; 1 0];


B=[ 1 -7; 0 -2];


C=[ 0 2; 1 -5];


D=[-3 0; 1 0];


switch flag,


%%%%%%%%%%%%%%%%%%


% Initialization %


%%%%%%%%%%%%%%%%%%


case 0,[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D;


%%%%%%%%%%%%%%%


% Derivatives %




%%%%%%%%%%%%%%%


case 1,sys=mdlDerivatives(t,x,u,A,B,C,D;


%%%%%%%%%%%


% Outputs %


%%%%%%%%%%%


case 3,sys=mdlOutputs(t,x,u,A,B,C,D;


%%%%%%%%%%%%%%%%%%%


% Unhandled flags %


%%%%%%%%%%%%%%%%%%%


case { 2, 4, 9 },sys = [];


%%%%%%%%%%%%%%%%%%%%


% Unexpected flags %


%%%%%%%%%%%%%%%%%%%%


otherwise, error(['Unhandled flag = ',num2str(flag];


end


% end csfunc


%


%================== ========================================


==== ===============


-


-


-


-


-


-


-


-



本文更新与2021-02-24 15:35,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/670421.html

S-Function 使用及应用举例.的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文