S 函数使用及应用举例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%
% 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:
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. % $上面是其功能
setting smaple times and offsets 主要设置采样时间 MATLAB 为了用户方便,已经书写了 S-FUNCTIONS 模板函数 sfuntmpl.m。为了 更好的写 S-FUNCTIONS,大家来看一下,该函数 sfuntmpl.m 内容如下:(我通过在该内容加注释来说明,以$开头)
% 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
%
%
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.
% by discrete states.
%
% Optional parameters, P1,...,Pn can be provided to the S-function and
% used during any FLAG operation.
%ຫໍສະໝຸດ Baidu
% When SFUNC is called with FLAG = 0, the following information
%
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
% 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 [].
% 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
一.direct feedthrough direct feedthrough 意思是说系统的输出或可变采样时间是否受到输入的控制。大家清楚有的系统是受到输入控制如: y=k*u (u 是输入,k 是放大因子,y 是输出) 而有的系统输出是不受到输入影响,如: 输出:y=x dx=u x 表示状态
二.dynamically sized inputs 主要是给出:输入连续状态数目(size.NumContStates),离散状态数目(size.NumDiscStates) ,输出数目(size.NumOutputs),输入数目(size.NumInputs),Direct Feedthrough(size.Dir Feedthrough)。 三.setting sample times and offsets
%
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
%
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 $
% 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.
S-FUNCTIONS 的书写之一
s-function 也就是 system-function 的缩写。说得简单,s-function 就是用 MATLAB 所提供的模型不能完全满足用户,而提供给用户自 己编写程序来满足自己要求模型的接口。要了解 s-function,必须了解以下知识: (1)direct feedthrough (2)dynamically sized inputs (3)setting sample times and offsets [由于我也不知道怎么把上面三句话精确的翻译成中文,因此在此不加翻译,大家自己理解,也许更好]由于上面三部分的重要性,在 此详细进行分析。
% % 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
% 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
%
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
S-Function 使用及应用举例
【说明】近来在论坛中很多朋友问及 Simulink 下的 S-函数的编写及使用方法,在西安交大 BBS 上,hii_yzf 网友发表了有关 S-函 数使用的文章,举例比较详尽,相信对关心 S-函数的网友会有很大帮助。
发信人: hii_yzf (叶子), 信区: MathTools 标 题: S-FUNCTIONS 的书写之一 发信站: 交通大学思源 BBS 站 (Mon Apr 16 16:35:09 2001) , 站内信件
%
-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
% value of the FLAG, the current state vector, X, and the current
% input vector, U.
%
% FLAG RESULT
DESCRIPTION
% ----- ------
--------------------------------------------
%
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.
%
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
%
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
%
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