• Non ci sono risultati.

METODO DI DETUNING ITERATIVO

N/A
N/A
Protected

Academic year: 2021

Condividi "METODO DI DETUNING ITERATIVO"

Copied!
6
0
0

Testo completo

(1)

CAPITOLO 7

METODO DI DETUNING ITERATIVO

7.1 Introduzione

Le tecniche di tuning per sistemi multivariabili descritte nei capitoli 4,5 e 6 si propongono quale obiettivo la ricerca dei valori ottimali per il fattore di detuning e per le costanti di integrazione condizionale utilizzando come criterio di ottimalità l’indice ITAE.

Il valore di quest’ultimo, però, viene calcolato supponendo di avere una variazione di set-point sul primo canale, per cui i parametri trovati risultano ottimali per quanto riguarda tale particolare situazione, ma non è garantito che lo siano in casi diversi, quale ad esempio un segnale a gradino non sul primo, ma sul secondo ingresso.

La tecnica di Luyben, descritta nel capitolo 3, per la ricerca del fattore di detuning, non risente di questa pecca, in quanto, essendo basata sul “biggest log modulus” e non su criteri di tipo integrale, considera il sistema nella sua globalità.

La procedura descritta nel seguito, fondendo la tecnica di Luyben con quelle che utilizzano criteri integrali, risolve il problema ricorrendo ad un approccio di tipo sequenziale.

Più precisamente, dopo aver calcolato i valori iniziali dei diversi fattori di detuning in accordo al metodo di Luyben, calcola dapprima i parametri relativi all’anello caratterizzato da dinamiche più veloci presupponendo un gradino in ingresso, poi i parametri relativi al secondo anello supponendo di avere una variazione di set-point sull’ingresso relativo e così via, fino alla convergenza dei parametri stessi.

7.2 Descrizione dettagliata

Si descrive ora in dettaglio la procedura, prendendo in considerazione, per semplicità, un sistema a due ingressi e due uscite. Essa consta di 7 passi.

1. Si calcola il fattore di detuning F in accordo alla tecnica di Luyben

2. Si calcolano i valori F1 e F2 per i due anelli che minimizzano la funzione

max

2 cm

LN

dove max max 20 log10 1 cm W L W ⎛ ⎞ = +

⎝ ⎠⎟ e N è l’ordine del sistema ( in questo caso 2), imponendo il vincolo che entrambi restino compresi nell’intervallo

[ ]

1, F .

3. Si pone: 1 2 0 0 γ γ = = 4. Si ordinano i canali in base alla velocità di risposta.

5. Si pone un ingresso a gradino sul canale più veloce ( sia esso l’i-esimo) e si calcolano i valori di Fi e γi che minimizzano l’indice di ottimalità ITAE.

(2)

6. Si riporta a zero il segnale in ingresso al canale considerato al punto 5 e si pone un ingresso a gradino sul canale restante (sia questo il j-esimo), quindi si calcolano i valori di Fj e γj che minimizzano l’indice ITAE.

7. Si torna al punto 5 e si continua il ciclo sino alla convergenza dei parametri.

7.3 Implementazione

Il programma Matlab che realizza la procedura sopra descritta è contenuto nello script iterative, di cui si riporta il codice:

[ZN,p]=zntuneit; %calcola i parametri di Ziegler-Nichols e l’ “ultimate period” di ogni loop lu=getf(ZN); %calcola il fattore di Luyben

lui=ottim(lu); %calcola F1 e F2 lui1=lui(1);

lui2=lui(2); if p(1)<p(2)

gb(1)=lui2 %inizializza i parametri gb(2)=0

g=[0,0]; gprec=[-3,-3]; gbprec=[-5,-5];

while abs([gprec,gbprec]'-[g,gb]')>0.1 %ciclo terminante con la convergenza dei parametri r1=1; %gradino sul primo canale

r2=0; gprec=g

g=fg(ZN,lui1,gb) r1=0;

r2=1; %gradino sul secondo canale gbprec=gb gb=fg1(ZN,lui2,g) end else gb(1)=0 %inizializza i parametri gb(2)=0 g=[lui1,0]; gprec=[-3,-3]; gbprec=[-5,-5];

while abs([gprec,gbprec]'-[g,gb]')>0.1 %ciclo terminante con la convergenza dei parametri r1=0; %gradino sul primo canale

r2=1; gbprec=gb gb=fg1(ZN,lui2,g)

(3)

r2=0; gprec=g

g=fg(ZN,lui1,gb) end

end

La prima funzione invocata nel precedente codice è la zntuneit, che differisce dalla zntune, già ampiamente utilizzata e descritta in precedenza, solo per il fatto che restituisce quale ulteriore parametro di uscita, un vettore contenente i periodi critici (ovvero corrispondenti a fase -π ) dei due loop considerati l’uno indipendentemente dall’altro.

Tali valori consentiranno di stabilire quale dei due loop è il più veloce.

Viene poi calcolato il fattore di Luyben utilizzando la funzione getf, per la cui descrizione si rimanda al capitolo 3.

La funzione ottim effettua la ricerca di due diversi fattori di detuning per i due loop, usando ancora il criterio di Luyben.

function lui=ottim(lu)

f0=[1 1]; %assegno ai parametri i valori iniziali lui= fmincon(@getdbm,f0,[],[],[],[],[1,1],[lu,lu])

La funzione Matlab fmincon calcola i parametri che minimizzano la funzione obiettivo interni all’intervallo [1,lu], dove con lu si intende il fattore di detuning calcolato con la tecnica di Luyben. La funzione obiettivo è implementata attraverso la getdbm, che prendendo in ingresso un vettore contenente i due fattori di detuning, calcola il valore della funzione . Se ne riporta il codice per completezza, con gli opportuni commenti.

max

4 cm

L

function dbm=getdbm(f)

%calcola il fattore di detuning in accordo alla tecnica di Luyben

k=[0.7795, 0.2402, 0; 0.1801, 0.0196, 0]; %parametri di Ziegler-Nichols i=sqrt(-1); w=logspace(-1,0.8,200); s=i*w; f1=f(1) f2=f(2) dbmax=-100; k(1,1)=k(1,1)/f1; k(1,2)=k(1,2)/f1; k(2,1)=k(2,1)/f2; k(2,2)=k(2,2)/f2;

%costruisce la matrice di trasferimento del sistema in ciclo aperto G*C gc=mca(k);

nwtot=length(w);

for nw=1:nwtot

(4)

dbc(nw)=logeval(gc,s(nw)); end

[dbmax,nmax]=max(dbc);

%calcola il valore della funzione obiettivo dbm=abs(dbmax-4)

Si procede ora con la descrizione dello script iterative.

Il controllo if ha lo scopo di stabilire quale dei due anelli è più veloce.

Fatto ciò comincia il ciclo “while”, nel cui corpo viene invocata la funzione fg per il calcolo dei parametri F e γ relativi all’anello più veloce, e la funzione fg1 per il calcolo dei parametri relativi a quello più lento. Tali funzioni sono analoghe, salvo piccole ovvie differenze, per cui se ne descrive in dettaglio solo una, e se ne riporta il codice.

function G=fg(ZN,lui,g) kp1=ZN(1,1);

ki1=ZN(1,2); kp2=ZN(2,1); ki2=ZN(2,2);

Fgamma0=[lui 0]; %assegna ai parametri i valori iniziali

options=optimset('LargeScale','off','Display','iter','TolX',0.001,'TolFun',0.001); Fgamma=lsqnonlin(@cfg,Fgamma0,[lui,0],[inf,inf],options,ZN,g) F1=Fgamma(1); g1=Fgamma(2); F2=g(1) g2=g(2) G=[F1,g1] opt=simset('solver','ode15s','SrcWorkspace','Current'); [tout,xout,yout]=sim('LuybenW',[0,100],opt); figure(1) plot(L1(:,1),L1(:,2),'k','LineWidth',1.5) hold on plot(L2(:,1),L2(:,2),'r','LineWidth',1.5) hold on

La funzione fg prende in ingresso la matrice contenente i parametri di Ziegler-Nichols, il fattore di detuning calcolato con Luyben e un vettore contenente i valori di F e di γ non coinvolti attualmente nella ottimizzazione, in quanto relativi all’altro anello. Il parametro di uscita è costituito da un vettore contenente i valori ottimali dei coefficienti relativi al loop considerato.

La funzione Matlab utilizzata per la ottimizzazione è la ormai nota lsqnonlin, il cui compito è di calcolare i parametri che minimizzano la funzione obiettivo, rappresentata dall’indice di ottimalità ITAE e implementata attraverso la cfg, di seguito riportata.

function E= cfg(Fgamma,ZN,g) F1=Fgamma(1)

F2=g(1); g2=g(2);

(5)

g1=Fgamma(2); %assegna le variabili ai parametri del modello kp1=ZN(1,1);

ki1=ZN(1,2); kp2=ZN(2,1); ki2=ZN(2,2);

% decide il risolutore e il workspace in cui eseguire la simulazione opt=simset('solver','ode5','SrcWorkspace','Current');

[tout,xout,yout]=sim('LuybenW',[0 100],opt); E=yout; % segnale errore

7.4 Simulazioni

Applicando la procedura appena descritta al sistema di Wood e Berry, si ottengono per le due uscite gli andamenti mostrati nelle figure 7.1 e 7.2.

In particolare la prima figura mostra le riposte ad un gradino applicato sul primo ingresso, la seconda quelle relative all’applicazione di un gradino sul secondo ingresso.

I valori calcolati per i fattori di detuning e per le costanti di integrazione condizionale risultano essere: 1 2 1 2.5601 2 2.5601 9.4587 0 F F γ γ = = = = Figura 7.1

(6)

Riferimenti

Documenti correlati