S-Function
function [sys,x0,str,ts] = switch_U(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 3
sys=mdlOutputs(t,x,u);
case {1,2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 6;
sizes.NumInputs = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];
% end mdlInitializeSizes
%
%=============================================================================
% mdlOutputs
% 计算输出
%=============================================================================
%
function sys=mdlOutputs(t,x,u)
if(u(1)==1&&u(2)==1)
k=1;
elseif(u(1)==1&&u(2)==0)
k=2;
elseif(u(1)==0&&u(2)==1)
k=3;
elseif(u(1)==0&&u(2)==0)
k=4;
end
switch u(3)
case 1
if(k==1)
sa=1;
sb=1;
sc=0;
elseif(k==2)
sa=1;
sb=0;
sc=1;
elseif(k==3)
sa=0;
sb=1;
sc=0;
elseif(k==4)
sa=0;
sb=0;
sc=1;
end
case 2
if(k==1)
sa=0;
sb=1;
sc=0;
elseif(k==2)
sa=1;
sb=0;
sc=0;
elseif(k==3)
sa=0;
sb=1;
sc=1;
elseif(k==4)
sa=1;
sb=0;
sc=1;
end
case 3
if(k==1)
sa=0;
sb=1;
sc=1;
elseif(k==2)
sa=1;
sb=1;
sc=0;
elseif(k==3)
sa=0;
sb=0;
sc=1;
elseif(k==4)
sa=1;
sb=0;
sc=0;
end
case 4
if(k==1)
sa=0;
sb=0;
sc=1;
elseif(k==2)
sa=0;
sb=1;
sc=0;
elseif(k==3)
sa=1;
sb=0;
sc=1;
elseif(k==4)
sa=1;
sb=1;
sc=0;
end
case 5
if(k==1)
sa=1;
sb=0;
sc=1;
elseif(k==2)
sa=0;
sb=1;
sc=1;
elseif(k==3)
sa=1;
sb=0;
sc=0;
elseif(k==4)
sa=0;
sb=1;
sc=0;
end
case 6
if(k==1)
sa=1;
sb=0;
sc=0;
elseif(k==2)
sa=0;
sb=0;
sc=1;
elseif(k==3)
sa=1;
sb=1;
sc=0;
elseif(k==4)
sa=0;
sb=1;
sc=1;
end
end
if(sa==1)
a1=1;
a2=0;
elseif(sa==0)
a1=0;
a2=1;
end
if(sb==1)
b1=1;
b2=0;
elseif(sb==0)
b1=0;
b2=1;
end
if(sc==1)
c1=1;
c2=0;
elseif(sc==0)
c1=0;
c2=1;
end
sys=[a1;a2;b1;b2;c1;c2];
% end mdlOutputs