Estrategia basica de control predictivo con Scilab

Simulaciones de la estrategia basica de control predictivo con scilab y(k)=y(k-1)-0.25*y(k-2)+0.333*u(k-1)+0.1666*u(k-2)
El proceso normal
salida normal del proceso y(k)=y(k-1)-0.25*y(k-2)+0.333*u(k-1)+0.1666*u(k-2)
El proceso con control predictivo:


El proceso con control predictivo:
Estrategia Control predictivo adaptativo
El proceso con control predictivo:
Control predictivo adaptativo
Comparacion para los distintod valores de la salida deseada del control predictivo
Salida deseada del control predictivo
Comparacion para los distintod valores de la salidas obtenidas del control predictivo
Salidas del proceso con el control predictivo

Programa en Scilab de la simulacion de la estrategia de control predictivo
clear();
alfa1a=[0.95,0];
beta1a=[0.05,0];
a=[1,-0.25];
b=[0.333,0.1666];
u=[0,zeros(1,29),ones(1,40),zeros(1,131)] //entrada escalon en k=31 y vuelve a 0 en  k=71
y=zeros(1,201);
ysp=[zeros(1,130),ones(1,40),zeros(1,31)] //Comienzo control predictivo consigna valor 0 en k=101, consigna a 1 en k=131 y vuelve a 0 en  k=171
y(1)=0;
u(1)=0;
y(2)=0;
for k=3:201
    y(k)=a(1)*y(k-1)+a(2)*y(k-2)+b(1)*u(k-1)+b(2)*u(k-2); //Salida del proceso
end
y
scf(1);
clf(1);
subplot(2,1,1)
plot(y);
xtitle('y(k)');
subplot(2,1,2)
plot(u);
xtitle('u(k)');
yda=zeros(1,201);
y2a=y;
u2a=u;
yda(100)=y(100);
yda(99)=y(99);
for kt=101:201
    yda(kt+1)=alfa1a(1)*yda(kt)+alfa1a(2)*yda(kt-1)+beta1a(1)*ysp(kt)+beta1a(2)*ysp(kt-1); //Trayectoria deseada
    u2a(1,kt)=(yda(kt+1)-a(1)*y2a(kt)-a(2)*y2a(kt-1)-b(2)*u2a(1,kt-1))/b(1)// Control adaptativo
    y2a(kt)=a(1)*y2a(kt-1)+a(2)*y2a(kt-2)+b(1)*u2a(kt-1)+b(2)*u2a(kt-2)
end
scf(2);
clf(2);
subplot(4,1,1)
plot(y2a);
xtitle('y(k) alfa1=0.95 Beta1=0.05');
subplot(4,1,2)
plot(yda(1,:));
xtitle('yd(k+1/k) alfa1=0.95 Beta1=0.05');
subplot(4,1,3)
plot(u2a);
xtitle('u1(k) alfa1=0.95 Beta1=0.05');
subplot(4,1,4)
plot(ysp);
xtitle('ysp(k)');
alfa1b=[0.9,0];
beta1b=[0.1,0];
a=[1,-0.25];
b=[0.333,0.1666];
u=[0,zeros(1,29),ones(1,40),zeros(1,131)] //entrada escalon en k=31 y vuelve a 0 en  k=71
y=zeros(1,201);
ysp=[zeros(1,130),ones(1,40),zeros(1,31)] //Comienzo control predictivo consigna valor 0 en k=101, consigna a 1 en k=131 y vuelve a 0 en  k=171
y(1)=0;
u(1)=0;
y(2)=0;
for k=3:201
    y(k)=a(1)*y(k-1)+a(2)*y(k-2)+b(1)*u(k-1)+b(2)*u(k-2); //Salida del proceso
end
y
scf(1);
clf(1);
subplot(2,1,1)
plot(y);
xtitle('y(k)');
subplot(2,1,2)
plot(u);
xtitle('u(k)');
ydb=zeros(1,201);
y2b=y;
u2b=u;
ydb(100)=y(100);
ydb(99)=y(99);
for kt=101:201
    ydb(kt+1)=alfa1b(1)*ydb(kt)+alfa1b(2)*ydb(kt-1)+beta1b(1)*ysp(kt)+beta1b(2)*ysp(kt-1); //Trayectoria deseada
    u2b(1,kt)=(ydb(kt+1)-a(1)*y2b(kt)-a(2)*y2b(kt-1)-b(2)*u2b(1,kt-1))/b(1)// Control adaptativo
    y2b(kt)=a(1)*y2b(kt-1)+a(2)*y2b(kt-2)+b(1)*u2b(kt-1)+b(2)*u2b(kt-2)
end
scf(3);
clf(3);
subplot(4,1,1)
plot(y2b);
xtitle('y(k) alfa1=0.9 Beta1=0.1');
subplot(4,1,2)
plot(ydb(1,:));
xtitle('yd(k+1/k) alfa1=0.9 Beta1=0.1');
subplot(4,1,3)
plot(u2b);
xtitle('u1(k) alfa1=0.9 Beta1=0.1');
subplot(4,1,4)
plot(ysp);
xtitle('ysp(k)');
alfa1c=[0.8,0];
beta1c=[0.1,0];
a=[1,-0.25];
b=[0.333,0.1666];
u=[0,zeros(1,29),ones(1,40),zeros(1,131)] //entrada escalon en k=31 y vuelve a 0 en  k=71
y=zeros(1,201);
ysp=[zeros(1,130),ones(1,40),zeros(1,31)] //Comienzo control predictivo consigna valor 0 en k=101, consigna a 1 en k=131 y vuelve a 0 en  k=171
y(1)=0;
u(1)=0;
y(2)=0;
for k=3:201
    y(k)=a(1)*y(k-1)+a(2)*y(k-2)+b(1)*u(k-1)+b(2)*u(k-2); //Salida del proceso
end
y
scf(1);
clf(1);
subplot(2,1,1)
plot(y);
xtitle('y(k)=y(k-1)-0.25*y(k-2)+0.333*u(k-1)+0.1666*u(k-2)');
subplot(2,1,2)
plot(u);
xtitle('u(k)');
ydc=zeros(1,201);
y2c=y;
u2c=u;
ydc(100)=y(100);
ydc(99)=y(99);
for kt=101:201
    ydc(kt+1)=alfa1c(1)*ydc(kt)+alfa1c(2)*ydc(kt-1)+beta1c(1)*ysp(kt)+beta1c(2)*ysp(kt-1); //Trayectoria deseada
    u2c(1,kt)=(ydc(kt+1)-a(1)*y2c(kt)-a(2)*y2c(kt-1)-b(2)*u2c(1,kt-1))/b(1)// Control adaptativo
    y2c(kt)=a(1)*y2c(kt-1)+a(2)*y2c(kt-2)+b(1)*u2c(kt-1)+b(2)*u2c(kt-2)
end
scf(4);
clf(4);
subplot(4,1,1)
plot(y2c);
xtitle('y(k) alfa1=0.8 Beta1=0.1');
subplot(4,1,2)
plot(ydc(1,:));
xtitle('yd(k+1/k) alfa1=0.8 Beta1=0.1');
subplot(4,1,3)
plot(u2c);
xtitle('u(k) alfa1=0.8 Beta1=0.1');
subplot(4,1,4)
plot(ysp);
xtitle('ysp(k)');
scf(5);
clf(5);
x=1:202;
plot(x,yda,'ro-');
plot(x,ydb,'bs:');
plot(x,ydc,'g');
legend(["yd alfa1=0.95 beta=0.05";"yd alfa1=0.9 beta=0.1";"yd alfa1=0.8 beta=0.1"],opt=3);
scf(6);
clf(6);
plot(x,ydb),'b';
scf(6);
clf(6);
x=1:201;
plot(x,y2a,'ro-');
plot(x,y2b,'bs:');
plot(x,y2c,'g');
legend(["y(k) alfa1=0.95 beta=0.05";"y(k) alfa1=0.9 beta=0.1";"y(k) alfa1=0.8 beta=0.1"],opt=2);

No hay comentarios: