Vai al contenuto
ELECTRONICS ENGINEERINGelectronics-engineering.com
Consigliata dall'autore MATLAB Controllo dei Processi

Predisposizione dei controllori nei sistemi multivariabili: relè, Niederlinski, metodo sequenziale e BLT

Taratura dei PID decentralizzati sulla colonna di Wood e Berry: RGA e indice di Niederlinski con dimostrazione, prova a relè e funzione descrittiva, Ziegler-Nichols che diventa instabile, metodo sequenziale, BLT di Luyben, detuning, codice Python verificato.

https://www.electronics-engineering.com/articolo_1952-predisposizione_dei_controllori_nei_sistemi_multivariabili.htm

Ti è stata utile questa pagina? Votala:
media 5,0 su 1 voto

Negli impianti di processo (colonne di distillazione, reattori, caldaie) la maggior parte dei sistemi ha più ingressi e più uscite, eppure quasi sempre si controllano con PID separati, uno per anello: è il controllo decentralizzato. È semplice, ogni operatore capisce cosa fa ogni regolatore e, se un anello va in manuale, gli altri continuano a lavorare. Il prezzo è che gli anelli si disturbano a vicenda: un PID tarato bene da solo può rendere instabile l’impianto quando anche gli altri anelli sono chiusi. Questo approfondimento mostra come si predispongono (si tarano) i PID in questo caso: l’identificazione con il relè, la verifica dell’accoppiamento con RGA e indice di Niederlinski, il metodo sequenziale, il metodo BLT con la dimostrazione del criterio e i metodi di detuning, tutto sull’esempio classico della colonna di Wood e Berry, con il codice Python che riproduce i numeri. La lezione collegata spiega i concetti di accoppiamento, RGA e disaccoppiamento.

Il tema è stato oggetto della tesi di laurea di Eliana Li Santi all’Università di Pisa (relatori Aldo Balestrino e Alberto Landi, 2004), che confronta i metodi in simulazione: i capitoli sono in fondo alla pagina.

L’esempio: la colonna di Wood e Berry

È il processo di prova più usato nella letteratura sul controllo multivariabile: una colonna di distillazione metanolo-acqua in cui si controllano la purezza del distillato y_1 e quella del fondo y_2 agendo sulla portata di riflusso u_1 e sul vapore al ribollitore u_2. Il modello identificato (tempi in minuti) è

    \[ G(s) = \begin{pmatrix} \dfrac{12{,}8\,e^{-s}}{16{,}7s + 1} & \dfrac{-18{,}9\,e^{-3s}}{21s + 1} \\ \dfrac{6{,}6\,e^{-7s}}{10{,}9s + 1} & \dfrac{-19{,}4\,e^{-3s}}{14{,}4s + 1} \end{pmatrix} \]

Ogni elemento è un primo ordine con ritardo: ogni ingresso agisce su entrambe le uscite, con ritardi diversi.

Accoppiamento. Il guadagno relativo dell’abbinamento u_1 \to y_1, u_2 \to y_2 è

    \[ \lambda_{11} = \frac{1}{1 - \dfrac{K_{12}K_{21}}{K_{11}K_{22}}} = \frac{1}{1 - \dfrac{(-18{,}9)(6{,}6)}{(12{,}8)(-19{,}4)}} = 2{,}01 \]

Positivo, quindi l’abbinamento è quello giusto, ma lontano da 1: chiudere l’anello 2 dimezza il guadagno che l’anello 1 vede (\lambda_{11} = \frac{\text{guadagno ad anelli aperti}}{\text{guadagno con l'altro anello chiuso}}). Un PID tarato sull’anello 1 da solo risulterà circa il doppio più aggressivo del previsto, se l’altro è chiuso.

Indice di Niederlinski. Per un sistema con regolatori a azione integrale su ogni anello,

    \[ NI = \frac{\det G(0)}{\prod_i G_{ii}(0)} \]

Teorema (Niederlinski). Se NI \lt  0, con quell’abbinamento il controllo decentralizzato con azione integrale non può funzionare in sicurezza: o il sistema è instabile con tutti gli anelli chiusi, o diventa instabile quando uno degli anelli viene aperto (messo in manuale, o saturato). I regolatori hanno guadagni dello stesso segno dei rispettivi G_{ii}(0), come sempre nella pratica.

Dimostrazione (caso dei regolatori lenti). Si considerino regolatori puramente integrali molto lenti, C_i(s) = \varepsilon k_i/s con \varepsilon piccolo: è la taratura più prudente possibile. I poli lenti dell’anello chiuso sono vicini all’origine, dove G(s) \approx G(0); l’equazione caratteristica diventa \det\big(sI + \varepsilon\,G(0)K\big) = 0, con K = \text{diag}(k_i), quindi i poli lenti sono s = -\varepsilon\mu, con \mu gli autovalori di G(0)K. Il prodotto degli autovalori è \det(G(0)K) = \det G(0)\prod k_i. Poiché k_i ha il segno di G_{ii}(0), il prodotto \prod k_i ha il segno di \prod G_{ii}(0) e quindi \det(G(0)K) ha il segno di NI. Se NI \lt  0 il determinante è negativo: una matrice reale con determinante negativo ha un numero dispari di autovalori reali negativi, quindi almeno un \mu \lt  0 e un polo s = -\varepsilon\mu \gt  0. Il sistema è instabile anche con la taratura più lenta. Il risultato generale, per qualunque taratura, è di Grosdidier, Morari e Holt (1985). ∎

Per la colonna NI = \frac{(12{,}8)(-19{,}4) - (-18{,}9)(6{,}6)}{(12{,}8)(-19{,}4)} = 0{,}498 \gt  0: l’abbinamento non è escluso. Per un sistema 2×2 vale sempre NI = 1/\lambda_{11}, e qui infatti 1/2{,}01 = 0{,}498.

Identificazione con il relè

Per tarare un PID con le regole di Ziegler-Nichols servono il guadagno critico K_u e il periodo critico P_u. Portare un impianto al limite di stabilità aumentando il guadagno è pericoloso; Åström e Hägglund (1984) hanno proposto di sostituire il regolatore con un relè: l’uscita del regolatore commuta tra +d e -d a seconda del segno dell’errore. L’anello entra in un’oscillazione stabile di ampiezza controllata (si sceglie d), da cui si ricavano K_u e P_u. È la base della funzione di autotaratura presente in quasi tutti i regolatori industriali.

La prova a relè
Il regolatore è sostituito da un relè che dà più d o meno d a seconda del segno dell’errore; l’anello oscilla e dall’oscillazione dell’uscita y si ricavano guadagno e periodo critici.

Teorema (funzione descrittiva del relè). Se l’uscita y oscilla in modo quasi sinusoidale con ampiezza a, allora

    \[ K_u \approx \frac{4d}{\pi a},\qquad P_u \approx \text{periodo dell'oscillazione} \]

Dimostrazione. L’uscita del relè è un’onda quadra di ampiezza d. La sua serie di Fourier è \frac{4d}{\pi}\left(\sin\omega t + \frac{1}{3}\sin 3\omega t + \dots\right). Il processo è un filtro passa-basso: le armoniche superiori sono attenuate e conta solo la prima, di ampiezza \frac{4d}{\pi}. Il relè si comporta quindi come un guadagno equivalente N(a) = \frac{4d}{\pi a} (rapporto tra prima armonica dell’uscita e ampiezza dell’ingresso), in fase. Un’oscillazione si autosostiene quando N(a)G(j\omega) = -1: la fase di G deve essere -180° e |G(j\omega)| = 1/N(a). Ma questa è proprio la definizione della frequenza critica e del guadagno critico: K_u = 1/|G(j\omega_u)| = N(a). ∎

La prova a relè sull'anello 1 della colonna
L’ingresso u, viola, è un’onda quadra di ampiezza d = 1 (qui disegnata a metà scala); l’uscita y, blu, oscilla con ampiezza a, linea rossa, e con un periodo di circa 3,9 minuti.

Quanto è precisa? Simulando la prova sui due anelli della colonna (codice più sotto) e confrontandola con il calcolo esatto dalla risposta in frequenza:

K_u esattoK_u relèP_u esattoP_u relè
anello 12,0991,7093,91 min3,89 min
anello 20,4220,34911,13 min10,97 min

Il periodo è quasi esatto; il guadagno è sottostimato del 17-19 %, perché con un ritardo piccolo rispetto alla costante di tempo l’uscita è più triangolare che sinusoidale (lo si vede nel grafico) e l’ipotesi della prima armonica è approssimata. L’errore va nella direzione prudente: si ottiene un regolatore un po’ meno aggressivo. I regolatori commerciali correggono la stima o aggiungono un’isteresi al relè per renderla robusta al rumore.

Ziegler-Nichols anello per anello

Con K_u e P_u esatti, le regole di Ziegler-Nichols per il PI (K_c = K_u/2{,}2, T_I = P_u/1{,}2) danno

  • anello 1: K_{c1} = 0{,}954, T_{I1} = 3{,}26 min;
  • anello 2: K_{c2} = -0{,}192, T_{I2} = 9{,}28 min (negativo perché K_{22} \lt  0).

Ciascuno, da solo, funziona. Ma chiudendo entrambi gli anelli il sistema diventa instabile: nella simulazione l’oscillazione dopo il gradino di riferimento non si spegne e la sua ampiezza cresce lentamente (0,248, 0,257, 0,266 in tre intervalli successivi di 100 minuti). È la conseguenza di \lambda_{11} = 2: ciascun anello vede un processo diverso da quello su cui è stato tarato.

Il metodo sequenziale

Si tarano gli anelli uno alla volta, chiudendoli in ordine: prima l’anello più veloce (qui l’anello 1, P_u = 3{,}9 min), con la prova a relè e le regole di taratura; poi, con l’anello 1 chiuso, si fa la prova a relè sull’anello 2, che vede così il processo “efficace” che comprende l’effetto dell’altro anello. Se ci sono più anelli si continua, e si può ripetere il giro finché i parametri non cambiano più. Vantaggio: ogni prova a relè tiene conto delle interazioni reali dell’impianto. Svantaggi: il risultato dipende dall’ordine, e il primo anello, tarato quando gli altri erano aperti, può dover essere ritarato.

Il metodo BLT

Luyben (1986) ha proposto un metodo semplice e molto usato, chiamato BLT (biggest log-modulus tuning):

1. Si calcolano le impostazioni di Ziegler-Nichols di ciascun anello, K_{ZN,i} e T_{ZN,i}.

2. Si sceglie un unico fattore di detuning F \gt  1 e si pongono K_{c,i} = K_{ZN,i}/F, T_{I,i} = F\,T_{ZN,i}: tutti gli anelli diventano più lenti nella stessa proporzione.

3. Si calcola la funzione

    \[ W(j\omega) = -1 + \det\big(I + G(j\omega)G_c(j\omega)\big),\qquad L_c(\omega) = 20\log_{10}\left|\frac{W}{1 + W}\right| \]

4. Si sceglie F in modo che il massimo di L_c sia 2N dB, con N il numero di anelli.

Perché funziona. Per il teorema di Nyquist multivariabile, il sistema ad anelli chiusi è stabile se il diagramma di \det(I + GG_c) non circonda l’origine (con processo e regolatori stabili ad anello aperto). W è definita in modo che \det(I + GG_c) = 1 + W: la condizione diventa “W non circonda -1“, come nel Nyquist di un solo anello con funzione d’anello W. Allora \frac{W}{1 + W} gioca il ruolo della funzione di sensitività complementare, e il suo picco (il modulo di risonanza in anello chiuso) misura quanto il diagramma si avvicina a -1. Per un solo anello la regola pratica è un picco di +2 dB; per N anelli Luyben usa 2N dB perché W contiene i prodotti di N funzioni d’anello e cresce più in fretta. ∎

Per la colonna, con N = 2 si cerca un picco di 4 dB:

F122,53
picco di L_c50,1 dB6,5 dB4,2 dB2,6 dB

Con F = 1 (Ziegler-Nichols senza correzione) il picco è altissimo: il diagramma passa quasi su -1, coerente con l’oscillazione che non si smorza. Risolvendo per 4 dB si trova F = 2{,}545 (Luyben lo arrotonda a 2,55), cioè

  • anello 1: K_{c1} = 0{,}375, T_{I1} = 8{,}29 min;
  • anello 2: K_{c2} = -0{,}075, T_{I2} = 23{,}6 min,

gli stessi valori pubblicati da Luyben.

Il modulo logaritmico di Luyben per tre fattori di detuning
Con F = 1,6, grigio tratteggiato, il picco supera 9 dB; con F = 2,55, blu, tocca esattamente il limite di 4 dB, linea rossa; con F = 4, verde, resta molto sotto e gli anelli sono più lenti del necessario.
Gradino di riferimento sull'uscita 1
Con le tarature di Ziegler-Nichols, grigio, l’uscita 1 oscilla senza smorzarsi; con le tarature BLT, blu, arriva a 1 con una sovraelongazione del 10 % in circa 20 minuti, mentre l’uscita 2, arancione tratteggiata, subisce un disturbo massimo di 0,67 che il suo regolatore riporta a zero.

Nella simulazione del gradino di riferimento su y_1, con le tarature BLT y_1 ha una sovraelongazione del 10 % e y_2 un disturbo massimo di 0,67; l’integrale dell’errore assoluto (IAE, somma sulle due uscite in 120 minuti) è 19,7, contro 76,3 di Ziegler-Nichols, che però continuerebbe a crescere perché il sistema è instabile.

Altri metodi di detuning

Il fattore unico del BLT è prudente ma non ottimale: rallenta allo stesso modo anche l’anello che non ne avrebbe bisogno. I metodi successivi, confrontati anche nella tesi citata, cercano compromessi migliori:

  • detuning con criteri integrali: si sceglie F minimizzando un indice come IAE o ISE calcolato in simulazione sul sistema completo, invece che con il picco di L_c;
  • detuning con fattori diversi: un fattore per ogni anello, F_1, F_2, \dots, scelti con lo stesso criterio; gli anelli più accoppiati vengono rallentati di più;
  • detuning iterativo: si parte da F = 1 e lo si aumenta a passi sull’impianto vero, finché la risposta non è accettabile; non richiede il modello ma solo prove;
  • integrazione condizionale: è l’anti-windup. Quando l’uscita di un regolatore satura (una valvola tutta aperta), l’integrale smette di accumulare; senza questa precauzione, nei sistemi multivariabili un anello in saturazione trascina gli altri in lunghe oscillazioni.

Nella pratica dell’industria la sequenza tipica è: RGA e Niederlinski per scegliere gli abbinamenti, prova a relè per ogni anello, BLT per una taratura sicura di partenza, ritocchi sull’impianto. Se l’accoppiamento è troppo forte (\lambda molto diverso da 1) si passa ai disaccoppiatori o al controllo predittivo (MPC), descritti nella lezione.

Il codice Python

Il programma calcola RGA e Niederlinski, il guadagno e il periodo critici esatti, simula la prova a relè, trova il fattore BLT:

import numpy as np
from scipy.optimize import brentq

# colonna di Wood-Berry: G_ij = K e^{-theta s} / (tau s + 1), tempi in minuti
K = np.array([[12.8, -18.9], [6.6, -19.4]])
TAU = np.array([[16.7, 21.0], [10.9, 14.4]])
TH = np.array([[1.0, 3.0], [7.0, 3.0]])

def G(s):
    return K * np.exp(-TH * s) / (TAU * s + 1)

l11 = 1 / (1 - K[0, 1] * K[1, 0] / (K[0, 0] * K[1, 1]))
NI = np.linalg.det(K) / (K[0, 0] * K[1, 1])
print(f"RGA lambda11 = {l11:.3f}, Niederlinski = {NI:.3f}")

# guadagno e periodo critici esatti (fase = -180 gradi) e regole di Ziegler-Nichols per il PI
ZN = []
for i in range(2):
    fase = lambda w: -TH[i, i] * w - np.arctan(TAU[i, i] * w) + np.pi
    wu = brentq(fase, 1e-3, 10)
    Ku = np.sqrt(1 + (TAU[i, i] * wu) ** 2) / abs(K[i, i])
    Pu = 2 * np.pi / wu
    ZN.append((np.sign(K[i, i]) * Ku / 2.2, Pu / 1.2))
    print(f"anello {i+1}: Ku = {Ku:.3f}, Pu = {Pu:.2f} min, PI: Kc = {ZN[i][0]:.3f}, TI = {ZN[i][1]:.2f}")

# prova a relè simulata (d = 1, Eulero con passo 2 ms, ritardo come coda di campioni)
def rele(i, d=1.0, dt=0.002, T=150):
    n, nd = int(T / dt), int(round(TH[i, i] / dt))
    u_coda, y, ys = np.zeros(n + nd), 0.0, np.zeros(n)
    for k in range(n):
        u_coda[k + nd] = -d * np.sign(K[i, i]) if y > 0 else d * np.sign(K[i, i])
        y += dt * (-y + K[i, i] * u_coda[k]) / TAU[i, i]
        ys[k] = y
    coda = ys[n // 2:]
    a = (coda.max() - coda.min()) / 2
    salite = np.where(np.diff(np.sign(coda)) > 0)[0]
    return 4 * d / (np.pi * a), np.mean(np.diff(salite)) * dt

for i in range(2):
    Ku_r, Pu_r = rele(i)
    print(f"relè anello {i+1}: Ku = {Ku_r:.3f}, Pu = {Pu_r:.2f} min")

# BLT: picco del modulo logaritmico di Luyben uguale a 2N = 4 dB
def picco_Lc(F):
    picco = -np.inf
    for w in np.logspace(-3, 1, 4000):
        s = 1j * w
        Gc = np.diag([ZN[j][0] / F * (1 + 1 / (F * ZN[j][1] * s)) for j in range(2)])
        W = -1 + np.linalg.det(np.eye(2) + G(s) @ Gc)
        picco = max(picco, 20 * np.log10(abs(W / (1 + W))))
    return picco

F = brentq(lambda F: picco_Lc(F) - 4.0, 1.2, 5)
print(f"BLT: F = {F:.3f}")
for j in range(2):
    print(f"anello {j+1}: Kc = {ZN[j][0] / F:.3f}, TI = {ZN[j][1] * F:.2f} min")

L’esecuzione stampa \lambda_{11} = 2{,}009, NI = 0{,}498, i valori critici e di Ziegler-Nichols della tabella, F = 2{,}545 e le tarature BLT. In MATLAB lo stesso calcolo si fa con tf con la proprietà InputDelay, allmargin per i valori critici e freqresp per L_c.

La tesi originale

I capitoli della tesi di Eliana Li Santi, *Predisposizione dei controllori nei sistemi multivariabili*, Università di Pisa, 2004, con le implementazioni e i confronti in simulazione:

Iscriviti
Notificami
guest
1 commento
Vecchi
Più recenti Le più votate
1
0
Esprimete la vostra opinione commentando.x