概述
介绍
创建模型步骤
模块集
使用模块创建框图:将需要的模块拖拽出来并连接
子系统及其封装
选中并右击,进行子系统封装
S-函数
Level-1 M文件型:创建sfuntest.m文件,实现y=-x功能
%sfuntest:S-函数的函数名
%t:当前仿真时间
%x:状态向量
%u:输入向量
%flag:用来标示仿真步骤,调用不同的回调函数
%sys:不同flag意义不同。0-系统描述、1-微分结果、2-更新结果、3-输出结果、4-下一个采样点、9-控制
%x0:输出状态值(只有flag为0时返回)
%str:状态字符串(只有flag为0时返回)
%ts:采样时间(只有flag为0时返回)
%(level-1的规定格式,照做就行了,除了函数名不要去改动)
function [sys,x0,str,ts,simStateCompliance] = sfuntest(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts,simStateCompliance]=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);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
%初始化
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0; %连续状态个数
sizes.NumDiscStates = 0; %离散状态个数
sizes.NumOutputs = 1; %输出数目
sizes.NumInputs = 1; %输入数目
sizes.DirFeedthrough = 1; %有无直接反馈(输出=k*输入,表示有直接反馈;输出=k*状态,表示相反)
sizes.NumSampleTimes = 1; %采样时间个数,至少一个采样时间
sys = simsizes(sizes);
x0 = []; %初始状态
str = []; %状态字符串
ts = [0 0]; %采样时间,[0 0]连续采样时间、[0 1]连续采样时间并以最小步长运算、
%[period offset]采样时间Tm=m*period+offset、[-2 0]变步长离散采样时间,由flag=4设置、
%[-1 0]最小步长内改变的函数并采用驱动模块的采样时间、[-1 1]最小步长内不改变的函数并采用驱动模块的采样时间
simStateCompliance = 'UnknownSimState';
%状态导数函数
function sys=mdlDerivatives(t,x,u)
sys = [];
%状态表示函数
function sys=mdlUpdate(t,x,u)
sys = [];
%输出函数
function sys=mdlOutputs(t,x,u)
sys = -1 * u;
%下一步采样时间
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; %采样步长
sys = t + sampleTime;
%采样结束
function sys=mdlTerminate(t,x,u)
sys = [];
最后
以上就是忧伤白开水为你收集整理的Simulink框图和S-函数的全部内容,希望文章能够帮你解决Simulink框图和S-函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复