• Non ci sono risultati.

Esercitazione 9

N/A
N/A
Protected

Academic year: 2021

Condividi "Esercitazione 9"

Copied!
17
0
0

Testo completo

(1)

Esercitazione 9

Corso di Strumentazione e Controllo di impianti chimici Prof. Davide Manca

PSE-Lab

(2)

Problema

Esercitazione 9

𝐹𝐹𝑖𝑖 = 9.4𝑚𝑚2

𝑠𝑠 𝐴𝐴1 = 30 𝑚𝑚2 𝐴𝐴2 = 50 𝑚𝑚2 𝑅𝑅1 = 1.2 𝑠𝑠

𝑚𝑚20 = 3 𝑚𝑚 𝐶𝐶𝑑𝑑 = 1.43 Dati

Lab

(3)

Time [s]

0 100 200 300 400 500 600 700

Level [m]

0 5 10 15 20 25 30 35 40

Open loop

Livello serbatoio 1 Livelloserbatoio 2 Set point

Anello aperto

Lab

Time [s]

0 100 200 300 400 500 600 700

Portata in ingresso [m3 /s]

8 10 12 14 16 18 20

Come reagisce il sistema al disturbo a gradino ( in assenza di controllore)?

(4)

Problema

Caratteristiche del closed-loop:

• Variabile Controllata = Livello

• Variabile Manipolata = Portata uscente dal 2° serbatoio 𝑦𝑦𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑖𝑖𝑝𝑝𝑠𝑠 = 6.6 𝑚𝑚

Lab

(5)

Azione P

Final offset: ε > 0

Time [s]

0 100 200 300 400 500 600 700

Level [m]

2 3 4 5 6 7 8

Closed loop - P controller

Livello serbatoio 2 Set Point Livello

Qual è l’effetto del controllore di tipo proporzionale?

Legge di controllo:

𝑐𝑐 𝑡𝑡 = 𝑐𝑐𝑠𝑠 + 𝑘𝑘𝑐𝑐 � 𝜀𝜀

Lab

(6)

Time [s]

0 100 200 300 400 500 600 700

Level [m]

2 3 4 5 6 7 8 9 10 11

Closed loop - PI controller

Livello serbatoio 2 Set Point Livello

Azione PI

Presenza di un «overshoot»

Time [min]

0 100 200 300 400 500 600 700

Fout [m3/s]

0 10 20 30 40 50 60

Variabile manipolata

Legge di controllo:

𝑐𝑐 𝑡𝑡 = 𝑐𝑐𝑠𝑠 + 𝑘𝑘𝑐𝑐 � 𝜀𝜀 + 𝑘𝑘𝑐𝑐 � � 𝜀𝜀 𝑑𝑑𝑡𝑡

Qual è l’effetto del controllore di tipo proporzionale-integrale?

Lab

(7)

Azione proporzionale:

• Garantisce PRONTEZZA della risposta

• Non garantisce PRECISIONE DELLA REGOLAZIONE

Azione proporzionale - integrale:

• Garantisce PRECISIONE DELLA REGOLAZIONE

• All’aumento del rapporto Kc/tau I aumenta la velocità della risposta ma è possibile avere instabilità nel sistema

• L’ordine della risposta è aumentato

Effetto Azione P vs PI

Time [s]

0 100 200 300 400 500 600 700

Level [m]

2 3 4 5 6 7 8 9 10 11

Confronto curve VC

Controllore P Controllore PI Set Point Livello

Lab

(8)

Cambio Set point

Time [s]

0 100 200 300 400 500 600 700

Level [m]

2 3 4 5 6 7 8 9 10

Closed loop - P controller

Livello serbatoio 2 Set Point 1 Set Point 2

Time [s]

0 100 200 300 400 500 600 700 800 900

Level [m]

2 3 4 5 6 7 8 9

Closed loop - PI controller

Livello serbatoio 2 Set Point 1 Set Point 2

Lab

(9)

How to

Lab

function Ese_9 clc

close all clear all

global R1 A1 A2 livelloSetPoint Kc tDisturbo coeffScarico h0 tau_

% Data

% Serbatoio 1

A1 = 30.; % [m2] area serbatoio 1 A2 = 50.; % [m2] area serbatoio 2

R1 = 1.2; % [s/m2] resistenza al flusso -> Fout = (h1-h2)/r Fin = 9.4; % [m3/s]

h0 = 3.; % [m] livello iniziale nei due serbatoi

% Serbatoio 2

coeffScarico = 1.43; % [m2/s] La legge prevede: Fo = 1.43*h2

livelloSetPoint = 6.6; % [m]

tDisturbo = 350.; %[s] tempo al qual introduco il disturbo a gradino sulla portata IN Fin

(10)

How to

Lab

% Comando OPEN LOOP

tspan = [0:0.1:700];

[t,L] = ode23s(@ODELivelloSerbatoi,tspan,[h0 h0]);

for i = 1: length(t)

LivelloSetPoint(i) = livelloSetPoint;

end

figure(1) hold on

title('Open loop','Fontsize',18) set(gca,'fontsize',13)

plot(t,L(:,1),'LineWidth',1.5) plot(t,L(:,2),'LineWidth',1.5)

plot(t,LivelloSetPoint,'k--','LineWidth',1.5) xlabel('Time [s]','Fontsize',18)

ylabel('Level [m]','Fontsize',18)

legend('Livello serbatoio 1','Livelloserbatoio 2','Set point') xlim([0 tspan(length(tspan))])

(11)

How to

Lab

% Grafico portata IN

indexDisturbo = find(t >=tDisturbo);

for i = 1:length(tspan)

if i <= indexDisturbo(1) Fin(i) = 9.4;

else

Fin(i) = 9.4*2;

end end

figure(5)

title('Disturbo a gradino','Fontsize',18)

plot(tspan,Fin,'Color','k','Marker','o','LineWidth',1.5) xlabel('Time [s]','Fontsize',18)

ylabel('Portata in ingresso [m^3/s]','Fontsize',18) xlim([0 700])

set(gca,'fontsize',13)

(12)

How to

Lab

% Comando Controllore P Kc = 20;

tspan = [0 :0.1: 700];

[t1,L1] = ode23s(@ODELivelloSerbatoiControlloP,tspan,[h0 h0]);

for i = 1: length(t1)

LivelloSetPoint(i) = livelloSetPoint;

end

figure(2) hold on

set(gca,'fontsize',12)

title('Closed loop - P controller','Fontsize',18) plot(t1,L1(:,2),'LineWidth',1.5)

plot(t1,LivelloSetPoint,'k--','LineWidth',1.5) xlabel('Time [s]','Fontsize',18)

ylabel('Level [m]','Fontsize',18)

legend('Livello serbatoio 2','Set Point Livello') xlim([0 tspan(length(tspan))])

(13)

How to

Lab

% Comando Controllore PI Kc = 10;

tau_I = 100;

tspan = [0 :0.1: 700];

[t2,L2] =

ode23s(@ODELivelloSerbatoiControlloPI,tspan,[h0 h0 0]);

for i = 1: length(t1)

LivelloSetPoint(i) = livelloSetPoint;

end

figure(3) hold on

set(gca,'fontsize',12)

title('Closed loop - PI controller','Fontsize',18) plot(t2,L2(:,2),'LineWidth',1.5)

plot(t2,LivelloSetPoint,'k--','LineWidth',1.5) xlabel('Time [s]','Fontsize',18)

ylabel('Level [m]','Fontsize',18)

legend('Livello serbatoio 2','Set Point Livello') xlim([0 tspan(length(tspan))])

(14)

How to

Lab

% Grafico PORTATA Fout

indexDisturbo = find(t2 >= tDisturbo);

for i = 1: length(t2)

epsi(i) = + L2(i,2) - livelloSetPoint;

if i <= indexDisturbo(1) Fout(i) = 9.4;

else

Fout(i) = 9.4 + Kc * epsi(i) + Kc / tau_I *L2(length(L2(:,3)),3);

end end

figure(10)

plot(t2,Fout,'LineWidth',1.5)

xlabel('Time [min]','Fontsize',18) ylabel('Fout [m3/s]','Fontsize',18) end % chiudo la function Ese_9

(15)

How to

Lab

function dy = ODELivelloSerbatoi(t,y)

global R1 A1 A2 livelloSetPoint Kc tDisturbo coeffScarico

% %

if t < tDisturbo Fin = 9.4;

else

Fin = 2*9.4;

end

% Fin = 9.4;

% [y(1)] = livello serbatoio 1

% [y(2)] = livello serbatoio 2

dy(1,:) = 1/A1*(Fin - (y(1)-y(2))/R1);

dy(2,:) = 1/A2*((y(1)-y(2))/R1 - coeffScarico*y(2));

end

(16)

How to

Lab

function dy = ODELivelloSerbatoiControlloP(t,y)

global R1 A1 A2 livelloSetPoint Kc tDisturbo coeffScarico h0

epsi = y(2) - livelloSetPoint ;

if t < tDisturbo Fin = 9.4;

Fout = coeffScarico*y(2);

else

Fin = 2*9.4;

Fin_ss = 9.4;

% VM = Fout

Fout = Fin_ss + Kc*epsi;

end

% [y(1)] = livello serbatoio 1

% [y(2)] = livello serbatoio 2

dy(1,:) = 1/A1*( Fin - (y(1)-y(2))/R1);

dy(2,:) = 1/A2*((y(1)-y(2))/R1 - Fout);

end

(17)

How to

Lab

function dy = ODELivelloSerbatoiControlloPI(t,y)

global R1 A1 A2 livelloSetPoint Kc tDisturbo coeffScarico h0 tau_I

% [y(1)] = livello serbatoio 1

% [y(2)] = livello serbatoio 2

% [y(3)] = Integrale di epsi in dt epsi = y(2) - livelloSetPoint ; if t < tDisturbo

Fin = 9.4;

Fout = coeffScarico*y(2);

else

Fin = 2*9.4;

% VM = Fout ( portata uscente dal secondo serbatoio) Fout = 9.4 + Kc*epsi + Kc/tau_I *y(3);

end

dy(1,:) = 1/A1*( Fin - (y(1)-y(2))/R1);

dy(2,:) = 1/A2*((y(1)-y(2))/R1 - Fout);

dy(3,:) = epsi;

end

Riferimenti

Documenti correlati

Si caratterizzi mediante il solo bilancio di massa il seguente problema relativo al riempimento di un serbatoio di stoccaggio. Si risolva il problema mediante l’ausilio

Calcolare inoltre la potenza termica che sarebbe necessario scambiare in ogni istante in modo da mantenere la temperatura del serbatoio costante, a fronte delle dispersioni

Al fine di mantenere la temperatura del serbatoio costante, viene introdotto un controllore proporzionale-integrale di temperatura che regola la portata di vapore necessaria per

Si simuli quindi la dinamica del sistema ad anello aperto, riscaldato con la portata di vapore appena calcolata, verificando che il serbatoio raggiunga la temperatura di 70

[r]

[r]

Sull’uscita  del  secondo  serbatoio  è  posto  un  controllore  di  livello  il  cui  set  point  è  di  6.6  m,  condizione  stazionaria  in  assenza  di 

Con  riferimento  alle  ipotesi  e  assunzioni  di  idealità  discusse  nel  corso  delle  esercitazioni  precedenti,  si  caratterizzi  mediante  il  solo