+ All Categories
Home > Documents > Ese 09 - Soluzione - Lab · Time [s] 0 100 200 300 400 500 600 700. Level [m] 0 5 10 15 20 25 30 35...

Ese 09 - Soluzione - Lab · Time [s] 0 100 200 300 400 500 600 700. Level [m] 0 5 10 15 20 25 30 35...

Date post: 15-Jul-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
17
Esercitazione 9 Corso di Strumentazione e Controllo di impianti chimici Prof. Davide Manca PSE-Lab
Transcript
Page 1: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Esercitazione 9Corso di Strumentazione e Controllo di impianti chimici

Prof. Davide Manca

PSE-Lab

Page 2: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Problema

Esercitazione 9

𝐹𝐹𝑖𝑖 = 9.4𝑚𝑚2

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

𝑅𝑅1 = 1.2𝑠𝑠𝑚𝑚2 ℎ0 = 3 𝑚𝑚 𝐶𝐶𝑑𝑑 = 1.43

Dati

Lab

© PSE-Lab – Corso di SECDIC

Page 3: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Time [s]0 100 200 300 400 500 600 700

Leve

l [m

]

0

5

10

15

20

25

30

35

40Open loop

Livello serbatoio 1

Livelloserbatoio 2

Set point

LabAnello aperto

Time [s]0 100 200 300 400 500 600 700

Por

tata

in in

gres

so [m

3/s

]

8

10

12

14

16

18

20

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

© PSE-Lab – Corso di SECDIC

Page 4: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Problema

Caratteristiche del closed-loop:• Variabile Controllata = Livello

• Variabile Manipolata = Portata uscente dal 2° serbatoio

𝑦𝑦𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑖𝑖𝑝𝑝𝑠𝑠 = 6.6 𝑚𝑚

Lab

© PSE-Lab – Corso di SECDIC

Page 5: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Azione P

Final offset: ε > 0

Time [s]0 100 200 300 400 500 600 700

Leve

l [m

]

2

3

4

5

6

7

8Closed loop - P controller

Livello serbatoio 2

Set Point Livello

Qual è l’effetto del controllore di tipo proporzionale?

Legge di controllo:

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

Lab

© PSE-Lab – Corso di SECDIC

Page 6: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Time [s]0 100 200 300 400 500 600 700

Leve

l [m

]

2

3

4

5

6

7

8

9

10

11Closed 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

© PSE-Lab – Corso di SECDIC

Page 7: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

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

Leve

l [m

]

2

3

4

5

6

7

8

9

10

11Confronto curve VC

Controllore P

Controllore PI

Set Point Livello

Lab

© PSE-Lab – Corso di SECDIC

Page 8: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

Cambio Set point

Time [s]0 100 200 300 400 500 600 700

Leve

l [m

]

2

3

4

5

6

7

8

9

10Closed loop - P controller

Livello serbatoio 2

Set Point 1

Set Point 2

Time [s]0 100 200 300 400 500 600 700 800 900

Leve

l [m

]

2

3

4

5

6

7

8

9Closed loop - PI controller

Livello serbatoio 2

Set Point 1

Set Point 2

Lab

© PSE-Lab – Corso di SECDIC

Page 9: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

function Ese_9 clcclose allclear allglobal R1 A1 A2 livelloSetPoint Kc tDisturbo coeffScarico h0 tau_

% Data% Serbatoio 1

A1 = 30.; % [m2] area serbatoio 1A2 = 50.; % [m2] area serbatoio 2R1 = 1.2; % [s/m2] resistenza al flusso -> Fout = (h1-h2)/rFin = 9.4; % [m3/s]h0 = 3.; % [m] livello iniziale nei due serbatoi

% Serbatoio 2coeffScarico = 1.43; % [m2/s] La legge prevede: Fo =

1.43*h2livelloSetPoint = 6.6; % [m]tDisturbo = 350.; %[s] tempo al qual introduco il disturbo a

gradino sulla portata IN Fin

© PSE-Lab – Corso di SECDIC

Page 10: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

% Comando OPEN LOOPtspan = [0:0.1:700];[t,L] = ode23s(@ODELivelloSerbatoi,tspan,[h0 h0]);

for i = 1: length(t)LivelloSetPoint(i) = livelloSetPoint;

end

figure(1)hold ontitle('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))])

© PSE-Lab – Corso di SECDIC

Page 11: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

% Grafico portata INindexDisturbo = 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)

© PSE-Lab – Corso di SECDIC

Page 12: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

% 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 onset(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))])

© PSE-Lab – Corso di SECDIC

Page 13: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

% 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;

endfigure(3)

hold onset(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))])

© PSE-Lab – Corso di SECDIC

Page 14: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

% 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;elseFout(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© PSE-Lab – Corso di SECDIC

Page 15: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

function dy = ODELivelloSerbatoi(t,y)

global R1 A1 A2 livelloSetPoint Kc tDisturbocoeffScarico% % 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

© PSE-Lab – Corso di SECDIC

Page 16: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

function dy = ODELivelloSerbatoiControlloP(t,y)

global R1 A1 A2 livelloSetPoint Kc tDisturbo coeffScarico h0epsi = y(2) - livelloSetPoint ;

if t < tDisturboFin = 9.4;Fout = coeffScarico*y(2);

elseFin = 2*9.4;Fin_ss = 9.4;% VM = Fout

Fout = Fin_ss + Kc*epsi;end% [y(1)] = livello serbatoio 1% [y(2)] = livello serbatoio 2dy(1,:) = 1/A1*( Fin - (y(1)-y(2))/R1);dy(2,:) = 1/A2*((y(1)-y(2))/R1 - Fout);end

© PSE-Lab – Corso di SECDIC

Page 17: Ese 09 - Soluzione - Lab · 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. Lab. Anello aperto.

LabHow to

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 dtepsi = y(2) - livelloSetPoint ;if t < tDisturbo

Fin = 9.4;Fout = coeffScarico*y(2);

elseFin = 2*9.4;% VM = Fout ( portata uscente dal secondo serbatoio)

Fout = 9.4 + Kc*epsi + Kc/tau_I *y(3);enddy(1,:) = 1/A1*( Fin - (y(1)-y(2))/R1);dy(2,:) = 1/A2*((y(1)-y(2))/R1 - Fout);dy(3,:) = epsi;end

© PSE-Lab – Corso di SECDIC


Recommended