📄 chap6_5.m
字号:
%DRNN Tunning PID Controler for coupling plant
clear all;
close all;
u1_1=0.0;u1_2=0.0;u1_3=0.0;
u2_1=0.0;u2_2=0.0;u2_3=0.0;
y1_1=0;y2_1=0;
wd1=rands(7,1);
wo1=rands(7,1);
wi1=rands(3,7);
wd1_1=wd1;wo1_1=wo1;wi1_1=wi1;
x1=zeros(7,1);
x1_1=x1;
wd2=rands(7,1);
wo2=rands(7,1);
wi2=rands(3,7);
wd2_1=wd2;wo2_1=wo2;wi2_1=wi2;
xitei1=0.40;xited1=0.40;xiteo1=0.40;
xitei2=0.40;xited2=0.40;xiteo2=0.40;
alfa1=0.04;alfa2=0.04;
x2=zeros(7,1);
x2_1=x2;
error1_1=0;error1_2=0;
error2_1=0;error2_2=0;
kp1=0.30;ki1=0.150;kd1=0.2;
kp2=0.30;ki2=0.150;kd2=0.2;
kp1_1=kp1;kd1_1=kd1;ki1_1=ki1;
kp2_1=kp2;kd2_1=kd2;ki2_1=ki2;
xitekp1=0.5;xitekd1=0.3;xiteki1=0.001;
xitekp2=0.5;xitekd2=0.3;xiteki2=0.0001;
ei1=0;ei2=0;
ts=1;
for k=1:1:1500
time(k)=k*ts;
%Step Signal
R=[1;0];
%R=[0;1];
%Coupling Plant
yout1(k)=1.0/(1+y1_1)^2*(0.8*y1_1+u1_2+0.2*u2_3);
yout2(k)=1.0/(1+y2_1)^2*(0.9*y2_1+0.3*u1_3+u2_2);
In1=[u1_1,yout1(k),1]';
for j=1:1:7
si(j)=In1'*wi1(:,j)+wd1(j)*x1(j);
end
for j=1:1:7
x1(j)=(1-exp(-si(j)))/(1+exp(-si(j)));
end
Pi=0*x1;
for j=1:1:7
Pi(j)=wo1(j)*(1+x1(j))*(1-x1(j))*x1_1(j);
end
Qi=0*wi1;
for j=1:1:7
for i=1:1:3
Qi(i,j)=wo1(j)*(1+x1(j))*(1-x1(j))*In1(i);
end
end
ym=0;
for j=1:1:7
ym=ym+x1(j)*wo1(j);
end
ymout1(k)=ym;
wo1=wo1+xiteo1*(yout1(k)-ymout1(k))*x1+alfa1*(wo1-wo1_1);
wd1=wd1+xited1*(yout1(k)-ymout1(k))*Pi+alfa1*(wd1-wd1_1);
for j=1:1:7
if abs(wd1(j))>1
wd1(j)=0.5*sign(wd1(j));
end
end
wi1=wi1+xitei1*(yout1(k)-ymout1(k))*Qi+alfa1*(wi1-wi1_1);
yu=0;
for j=1:1:7
yu=yu+wo1(j)*wi1(1,j)*(1+x1(j))*(1-x1(j));
end
dyout1(k)=yu;
error1(k)=R(1)-yout1(k);
xc1(1)=error1(k); %Calculating P
xc1(2)=error1(k)-error1_1; %Calculating D
ei1=ei1+error1(k)*ts;
xc1(3)=ei1; %Calculating I
kp1(k)=kp1_1+xitekp1*error1(k)*xc1(1);
kd1(k)=kd1_1+xitekd1*error1(k)*xc1(2);
ki1(k)=ki1_1+xiteki1*error1(k)*xc1(3);
kp1(k)=kp1_1+xitekp1*error1(k)*xc1(1)*dyout1(k);
kd1(k)=kd1_1+xitekd1*error1(k)*xc1(2)*dyout1(k);
ki1(k)=ki1_1+xiteki1*error1(k)*xc1(3)*dyout1(k);
if kp1(k)<0
kp1(k)=0;
end
if kd1(k)<0
kd1(k)=0;
end
if ki1(k)<0
ki1(k)=0;
end
u1(k)=kp1(k)*xc1(1)+kd1(k)*xc1(2)+ki1(k)*xc1(3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
In2=[u2_1,yout2(k),1]';
for j=1:1:7
si(j)=In1'*wi2(:,j)+wd2(j)*x2(j);
end
for j=1:1:7
x2(j)=(1-exp(-si(j)))/(1+exp(-si(j)));
end
Pi=0*x2;
for j=1:1:7
Pi(j)=wo2(j)*(1+x2(j))*(1-x2(j))*x2_1(j);
end
Qi=0*wi2;
for j=1:1:7
for i=1:1:3
Qi(i,j)=wo2(j)*(1+x2(j))*(1-x2(j))*In2(i);
end
end
ym=0;
for j=1:1:7
ym=ym+x2(j)*wo2(j);
end
ymout2(k)=ym;
wo2=wo2+xiteo2*(yout2(k)-ymout2(k))*x2+alfa2*(wo2-wo2_1);
wd2=wd2+xited2*(yout2(k)-ymout2(k))*Pi+alfa2*(wd2-wd2_1);
for j=1:1:7
if abs(wd2(j))>1
wd2(j)=0.5*sign(wd2(j));
end
end
wi2=wi2+xitei2*(yout2(k)-ymout2(k))*Qi+alfa2*(wi2-wi2_1);
yu=0;
for j=1:1:7
yu=yu+wo2(j)*wi2(1,j)*(1+x2(j))*(1-x2(j));
end
dyout2(k)=yu;
error2(k)=R(2)-yout2(k);
xc2(1)=error2(k); %Calculating P
xc2(2)=error2(k)-error2_1; %Calculating D
ei2=ei2+error2(k)*ts;
xc2(3)=ei2; %Calculating I
kp2(k)=kp2_1+xitekp2*error2(k)*xc2(1)*dyout2(k);
kd2(k)=kd2_1+xitekd2*error2(k)*xc2(2)*dyout2(k);
ki2(k)=ki2_1+xiteki2*error2(k)*xc2(3)*dyout2(k);
if kp2(k)<0
kp2(k)=0;
end
if kd2(k)<0
kd2(k)=0;
end
if ki2(k)<0
ki2(k)=0;
end
u2(k)=kp2(k)*xc2(1)+kd2(k)*xc2(2)+ki2(k)*xc2(3);
%Return of PID parameters
error1_2=error1_1;
error1_1=error1(k);
error2_2=error2_1;
error2_1=error2(k);
wd1_1=wd1;wo1_1=wo1;wi1_1=wi1;
wd2_1=wd2;wo2_1=wo2;wi2_1=wi2;
u1_4=u1_3;u1_3=u1_2;u1_2=u1_1;u1_1=u1(k);
u2_4=u2_3;u2_3=u2_2;u2_2=u2_1;u2_1=u2(k);
y1_1=yout1(k);
y2_1=yout2(k);
end
figure(1);
plot(time,dyout1,'r');
xlabel('time(s)');ylabel('Jacobian');
hold on;
plot(time,dyout2,'b');
xlabel('time(s)');ylabel('Jacobian');
figure(2);
plot(time,R(1),'b',time,yout1,'r');
hold on;
plot(time,R(2),'r',time,yout2,'b');
xlabel('time(s)');ylabel('rin,yout');
figure(3);
plot(time,kp1,'r',time,ki1,'b',time,kd1,'k');
xlabel('time(s)');ylabel('kp1 ki1 kd1');
figure(4);
plot(time,kp2,'r',time,ki2,'b',time,kd2,'k');
xlabel('time(s)');ylabel('kp2 ki2 kd2');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -