matlab的M-文件 S-函数的标准模板

更新时间:2023-09-26 12:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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 [SIZES,X0,STR,TS] 模块初始化 % 1 DX 计算模块导数 % 2 DS 更新模块离散状态 % 3 Y 计算模块输出

% 4 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

本文来源:https://www.bwwdw.com/article/giqd.html

Top