function [sys,x0,str,ts] = csfunc(t,x,u,flag,m,a,b,Iz,B1,C1,D1,D2,E1)
B1=10.3;C1=1.3;D1=-8.153599999999999e+03;E1=-1.05;D2=-4.390499999999999e+03;%后轮439.04
Iz=3885;m=1500;a=1.463;b=1.585;
switch flag, %根据参数flag切换操作
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(B1,C1,D1,D2,E1); %初始化模块,如果flag=0,调用mdlInitializeSizes函数,传递参数t,x,u,输出为sys,x0,str,ts
case 1,
sys=mdlDerivatives(t,x,u,m,a,b,Iz,B1,C1,D1,D2,E1); %连续状态计算模块,如果flag=1,调用mdlDerivatives函数,传递参数t,x,u,输出为sys
case 3,
sys=mdlOutputs(t,x,u); %输出模块,如果flag=3,调用mdlOutputs函数,传递参数t,x,u,输出为sys
case{2,4,9}
sys=[];
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));%如果flag不是上述值,提示输入错误
end
function [sys,x0,str,ts]=mdlInitializeSizes(B1,C1,D1,D2,E1)
sizes = simsizes; %用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates = 4;%2个连续状态
sizes.NumDiscStates = 0;%0个离散状态
sizes.NumOutputs = 4;%1个输出变量
sizes.NumInputs = 1;%1个输入变量
sizes.DirFeedthrough = 1;%没有直接馈通
sizes.NumSampleTimes = 1;%采用时间个数
sys = simsizes(sizes);
x0 = [0 0 0 25];%状态变量初值
str = [];%固定格式,对str预留空间
ts = [0 0];%[0 0]适用于连续系统
function sys=mdlDerivatives(t,x,u,m,a,b,Iz,B1,D2,C1,D1,E1)
Fyf=D1*sin(C1*atan(B1*((atan((x(1)+a*x(2))./x(4))-u(1)))-E1*(B1*((atan((x(1)+a*x(2))./x(4))-u(1)))-atan(B1*((atan((x(1)+a*x(2))./x(4))-u(1)))))))
Fyr=D2*sin(C1*atan(B1*((atan((x(1)+a*x(2))./x(4))-u(1)))-E1*(B1*((atan((x(1)+a*x(2))./x(4))-u(1)))-atan(B1*((atan((x(1)+a*x(2))./x(4))-u(1)))))))
Fxf=0*(t<1.3)+1620.*(t>=1.3&t<=10/3+1.1);%减速8m/s2 Fxf=0*(t<1)-12800.*(t>=1&t<=10/3+1.1);加速0.5m/s2 Fxf=0*(t<1)+820.*(t>=1&t<=10/3+1.1);
Fxr=0;
sys = [(Fyf*cos(u)+Fyr)/m-x(4)*x(2)
(Fyf*a*cos(u)-Fyr*b)/Iz
x(2)
x(1)*x(2)+(Fxf-Fyf*sin(u))/m];
function sys=mdlOutputs(t,x,u)
sys = [x(1),x(2),x(3),x(4)];