function [sys,x0,str,ts] = sa_sb_sc(t,x,u,flag)
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 9,
sys=mdlTerminate(t,x,u);%结束,调用“仿真结束”子函数
otherwise
error(['Unhandled flag = ',num2str(flag)]);%其他
end
%模块初始化子函数:(返回大小、初始条件和样本)
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;%!!!调用simsizes函数,返回规范格式的sizes构架,不要修改该指令
sizes.NumContStates = 0; %连续状态个数,0是默认值;比如(x(1),x(2))
sizes.NumDiscStates = 0; %离散状态个数,0是默认值
sizes.NumOutputs = 3; %输出个数,0是默认值;比如x(1)
sizes.NumInputs = 3; %输入个数,0是默认值
sizes.DirFeedthrough = 1; %直通前向馈路个数,1是默认值,表示存在代数环(0表示不存在);输入输出不存在直接的比例关系(1表示存在)
sizes.NumSampleTimes = 1; % 采样时间个数,至少需要1个样本时间
sys = simsizes(sizes);%!!!初始化后的构架sizes经simsizes函数处理后向sys赋值,不要修改该指令
x0 = [];%给模块初始值变量赋值,【】为默认值
str = [];%!!!系统保留变量,勿修改
ts = [0 0];%“二元对”描述采用时间及偏移量。【0 0】是默认值,适用于连续系统;【-1 0】表示该模块采用时间继承其前的模块采样时间设置
function sys=mdlDerivatives(t,x,u)
sys=[]
% 填写计算导数向量的指令(给出连续系统的状态方程),【】为默认值(这里sys表示状态导数即dx),sys(1)=dx(1)
function sys=mdlUpdate(t,x,u)
sys = [];
%填写计算离散状态向量的指令(给出离散系统的状态方程),【】为默认值(这里sys表示下一个离散状态即x(k+1))
function sys=mdlOutputs(t,x,u)
if(u(2)==1)
if(u(3)==1)
switch (u(1)),
case 1,
sys(1)=1;sys(2)=1;sys(3)=0;
case 2,
sys(1)=1;sys(2)=1;sys(3)=0;
case 3,
sys(1)=0;sys(2)=1;sys(3)=0;
case 4,
sys(1)=0;sys(2)=1;sys(3)=0;
case 5,
sys(1)=0;sys(2)=1;sys(3)=1;
case 6,
sys(1)=0;sys(2)=1;sys(3)=1;
case 7,
sys(1)=0;sys(2)=0;sys(3)=1;
case 8,
sys(1)=0;sys(2)=0;sys(3)=1;
case 9,
sys(1)=1;sys(2)=0;sys(3)=1;
case 10,
sys(1)=1;sys(2)=0;sys(3)=1;
case 11,
sys(1)=1;sys(2)=0;sys(3)=0;
case 12,
sys(1)=1;sys(2)=0;sys(3)=0;
otherwise
error(['setor! = 1 2 3 4 5 6']);
end
end
if(u(3)==0)
switch (u(1)),
case 1,
sys(1)=1;sys(2)=1;sys(3)=1;
case 2,
sys(1)=0;sys(2)=0;sys(3)=0;
case 3,
sys(1)=1;sys(2)=1;sys(3)=1;
case 4,
sys(1)=0;sys(2)=0;sys(3)=0;
case 5,
sys(1)=1;sys(2)=1;sys(3)=1;
case 6,
sys(1)=0;sys(2)=0;sys(3)=0;
case 7,
sys(1)=1;sys(2)=1;sys(3)=1;
case 8,
sys(1)=0;sys(2)=0;sys(3)=0;
case 9,
sys(1)=1;sys(2)=1;sys(3)=1;
case 10,
sys(1)=0;sys(2)=0;sys(3)=0;
case 11,
sys(1)=1;sys(2)=1;sys(3)=1;
case 12,
sys(1)=0;sys(2)=0;sys(3)=0;
otherwise
error(['setor! = 1 2 3 4 5 6']);
end
end
if(u(3)==-1)
switch (u(1)),
case 1,
sys(1)=1;sys(2)=0;sys(3)=1;
case 2,
sys(1)=1;sys(2)=0;sys(3)=0;
case 3,
sys(1)=1;sys(2)=0;sys(3)=0;
case 4,
sys(1)=1;sys(2)=1;sys(3)=0;
case 5,
sys(1)=1;sys(2)=1;sys(3)=0;
case 6,
sys(1)=0;sys(2)=1;sys(3)=0;
case 7,
sys(1)=0;sys(2)=1;sys(3)=0;
case 8,
sys(1)=0;sys(2)=1;sys(3)=1;
case 9,
sys(1)=0;sys(2)=1;sys(3)=1;
case 10,
sys(1)=0;sys(2)=0;sys(3)=1;
case 11,
sys(1)=0;sys(2)=0;sys(3)=1;
case 12,
sys(1)=1;sys(2)=0;sys(3)=1;
otherwise
error(['setor! = 1 2 3 4 5 6']);
end
end
end
if(u(2)==-1)
if(u(3)==1)
switch (u(1)),
case 1,
sys(1)=0;sys(2)=1;sys(3)=0;
case 2,
sys(1)=0;sys(2)=1;sys(3)=1;
case 3,
sys(1)=0;sys(2)=1;sys(3)=1;
case 4,
sys(1)=0;sys(2)=0;sys(3)=1;
case 5,
sys(1)=0;sys(2)=0;sys(3)=1;
case 6,
sys(1)=1;sys(2)=0;sys(3)=1;
case 7,
sys(1)=1;sys(2)=0;sys(3)=1;
case 8,
sys(1)=1;sys(2)=0;sys(3)=0;
case 9,
sys(1)=1;sys(2)=0;sys(3)=0;
case 10,
sys(1)=1;sys(2)=1;sys(3)=0;
case 11,
sys(1)=1;sys(2)=1;sys(3)=0;
case 12,
sys(1)=0;sys(2)=1;sys(3)=0;
otherwise
error(['setor! = 1 2 3 4 5 6']);
end
end
if(u(3)==0)
switch (u(1)),
case 1,
sys(1)=0;sys(2)=0;sys(3)=0;
case 2,
sys(1)=1;sys(2)=1;sys(3)=1;
case 3,
sys(1)=0;sys(2)=0;sys(3)=0;
case 4,
sys(1)=1;sys(2)=1;sys(3)=1;
case 5,
sys(1)=0;sys(2)=0;sys(3)=0;
case 6,
sys(1)=1;sys(2)=1;sys(3)=1;
case 7,
sys(1)=0;sys(2)=0;sys(3)=0;
case 8,
sys(1)=1;sys(2)=1;sys(3)=1;
case 9,
sys(1)=0;sys(2)=0;sys(3)=0;
case 10,
sys(1)=1;sys(2)=1;sys(3)=1;
case 11,
sys(1)=0;sys(2)=0;sys(3)=0;
case 12,
sys(1)=1;sys(2)=1;sys(3)=1;
otherwise
error(['setor! = 1 2 3 4 5 6']);
end
end
if(u(3)==-1)
switch (u(1)),
case 1,
sys(1)=0;sys(2)=0;sys(3)=1;
case 2,
sys(1)=0;sys(2)=0;sys(3)=1;
case 3,
sys(1)=1;sys(2)=0;sys(3)=1;
case 4,
sys(1)=1;sys(2)=0;sys(3)=1;
case 5,
sys(1)=1;sys(2)=0;sys(3)=0;
case 6,
sys(1)=1;sys(2)=0;sys(3)=0;
case 7,
sys(1)=1;sys(2)=1;sys(3)=0;
case 8,
sys(1)=1;sys(2)=1;sys(3)=0;
case 9,
sys(1)=0;sys(2)=1;sys(3)=0;
case 10,
sys(1)=0;sys(2)=1;sys(3)=0;
case 11,
sys(1)=0;sys(2)=1;sys(3)=1;
case 12,
sys(1)=0;sys(2)=1;sys(3)=1;
otherwise
error(['setor! = 1 2 3 4 5 6']);
end
end
end;
% 填写计算模块输出向量的指令(给出系统的输出方程),【】为默认值(这里sys表示输出,即y)
function sys = mdlTerminate(t,x,u)
sys = [];;%!!!默认设置