logo资料库

matlabS-函数的标准模板.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag) % SFUNTMPL 是 M-文件 S 函数模板 % % 能 % % % % % % % % % % % % 通过剪裁,用户可以生成自己的 S 函数,不过一定要重新命名 利用 S 函数可以生成连续、离散混合系统等,实现任何模块的功 M-文件 S 函数的语法为: [SYS,X0,STR,TS] = SFUNC(T,X,U,FLAG,P1,...,Pn) 参数含义: t 是当前时间 x 是 S 函数相应的状态向量 u 是模块的输入 flag 是所要执行的任务 FLAG 结果 ----- ------ 功能 ------------- ------------------------------- % % 0 1 模块导数 % 2 [SIZES,X0,STR,TS] 模块初始化 DX DS 计算 更新
模块离散状态 % 3 模块输出 % 4 个采样时间点 Y TNEXT % 9 [] 计算 计算下一 结束 仿真 % % % % 动 % 用户切勿改动输出参数的顺序、名称和数目 输入参数的数目不能小于 1,这四个参数的名称和排列顺序不能改 用户可以根据自己的要求添加额外的参数,位置依次为第 5,6,7, 8,9 等。 % S 函数的 flag 参数是一个标记变量,具有 6 个不同值,分别为 0, 1,2,3,4,9 % % flag 的 6 个值分别指向 6 个不同的子函数 flag 所指向的子函数也成为回调方法(Callback Methods) switch flag, %初始化,调用“模块初始化”子程序% case 0, [sys,x0,str,ts]=mdlInitializeSizes; %连续状态变量计算,调用“计算模块导数”子函数% case 1, sys=mdlDerivatives(t,x,u);
%更新,调用“更新模块离散状态”子函数% case 2, sys=mdlUpdate(t,x,u); %输出,调用“计算模块输出”子函数% case 3, sys=mdlOutputs(t,x,u); %计算下一时刻采样点,调用“计算下一个采样时刻点”子函数% case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); %结束,调用“结束仿真”子函数% case 9, sys=mdlTerminate(t,x,u); %其他的 flag% otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end % end sfuntmpl %============================================================================= % “模块初始化”子函数 % 返回大小、初始条件和样本 function [sys,x0,str,ts]=mdlInitializeSizes % % 调用 simsizes 函数,返回规范格式的 sizes 构架 这条指令不要修改 sizes = simsizes; % % 模块的连续状态个数,0 是默认值 用户可以根据自己的要求进行修改 sizes.NumContStates = 0; % % 模块的离散状态个数,0 是默认值 用户可以根据自己的要求进行修改 sizes.NumDiscStates = 0; % % 模块的输出个数,0 是默认值 用户可以根据自己的要求进行修改 sizes.NumOutputs = 0; % % 模块的输入个数,0 是默认值 用户可以根据自己的要求进行修改 sizes.NumInputs = 0; % % 模块中包含的直通前向馈路个数,1 是默认值 用户可以根据自己的要求进行修改 sizes.DirFeedthrough = 1;
% % 模块中采样时间的个数,1 是默认值,至少需要一个样本时间 用户可以根据自己的要求进行修改 sizes.NumSampleTimes = 1; % % 初始化后的构架 sizes 经 simsizes 函数处理后向 sys 赋值 这条指令不要修改 sys = simsizes(sizes); % % x0 % % 给模块初始值变量赋值,[]是默认值 用户可以根据自己的要求进行修改 = []; 系统保留变量 切勿改动,保持为空 str = []; % % % “二元对”描述采样时间及偏移量。[0 0]是默认值 [0 0]适用于连续系统 [-1 0]则表示该模块采样时间继承其前的模块采样时间设置 ts = [0 0]; % end mdlInitializeSizes %============================================================================= % 计算导数向量 function sys=mdlDerivatives(t,x,u) % % % 此处填写计算导数向量的指令 []是模块的默认值 用户必须把算得的离散状态的导数向量赋给 sys sys = []; % end mdlDerivatives %============================================================================= % 计算离散状态向量 function sys=mdlUpdate(t,x,u) % % % 此处填写计算离散状态向量的指令 []是模块的默认值 用户必须把算得的离散状态向量赋给 sys sys = []; % end mdlUpdate %============================================================================= % 计算模块输出向量 function sys=mdlOutputs(t,x,u)
% % % 此处填写计算模块输出向量的指令 []是模块的默认值 用户必须把算得的模块输出向量赋给 sys sys = []; % end mdlOutputs %============================================================================= % 计算下一采样时刻 function sys=mdlGetTimeOfNextVarHit(t,x,u) % % % 该子函数仅在“采样时间”情况下使用 sampleTime = 1 是模块默认设置,表示在当前时间 1 秒后再调用本模块 用户可以根据自己的要求修改 sampleTime = 1; % % 将计算得到的下一采样时刻赋给 sys 切勿改动 sys = t + sampleTime; % end mdlGetTimeOfNextVarHit %============================================================================= function sys=mdlTerminate(t,x,u) % 模板默认设置,一般情况不要改动 sys = []; % end mdlTerminate
分享到:
收藏