附:我的专家控制器
%Expert PID Controller
clear all;
close all;
ts=0.001;
sys=tf(158.91e6,[0.7596 133.728 1.405e4 6.237e5 1.015e7 9.015e6]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0;
y_1=0;y_2=0;y_3=0;y_4=0;y_5=0;
x=[0,0,0]';
x2_1=0;
kp=1.44;
ki=1.28;
kd=0.008;
error_1=0;
for k=1:1:5000
time(k)=k*ts;
rin(k)=1; %Tracing Jieyue Signal
u(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller
%Expert control rule
if abs(x(1))>0.8 %Rule1:Unclosed control firstly
u(k)=0.45;
elseif abs(x(1))>0.40
u(k)=0.30;
elseif abs(x(1))>0.20
u(k)=0.2;
elseif abs(x(1))>0.10
u(k)=0.03;
elseif abs(x(1))<=0.05 %Rule5:Integration separation PI control
u(k)=0.25*x(1)+1.75*x(3);
elseif x(1)*x(2)>0|(x(2)==0) %Rule2
if abs(x(1))>=0.1
u(k)=u_1+1.5*[kp*x(2)+ki*x(1)];
else
u(k)=u_1+0.6*[kp*x(2)+ki*x(1)];
end
elseif x(1)*x(2)<0&x(2)*x2_1<0 %Rule4
if abs(x(1))>=0.1
u(k)=u_1+2*kp*error_1;
else
u(k)=u_1+0.4*kp*error_1;
end
end
if (x(1)*x(2)<0&x(2)*x2_1>0)|(x(1)==0) %Rule3
u(k)=u(k);
end
%Restricting the output of controller
if u(k)>=2
u(k)=2;
end
if u(k)<=0
u(k)=0;
end
%Linear model
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3-den(5)*y_4-den(6)*y_5+num(2)*u_1+num(3)*u_2+num(4)*u_3+num(5)*u_4+num(6)*u_5;
error(k)=rin(k)-yout(k);
%----------Return of PID parameters------------%
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_5=y_4;y_4=y_3;y_3=y_2;y_2=y_1;y_1=yout(k);
x(1)=error(k); % Calculating P
x2_1=x(2);
x(2)=(error(k)-error_1)/ts; % Calculating D
x(3)=x(3)+error(k)*ts; % Calculating I
error_1=error(k);
end
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
grid on;