OT30PidReg
O = Output digitale
T = Funzioni di Controllo
La funzione OT30PidReg implementa un regolatore generico PID. Oltre a fornire in uscita il valore di regolazione, la funzione permette di sospendere l'aggiornamento del regolatore mantenendo inalterati i valori dei vari registri di regolazione e dell'uscita di regolazione stessa. Inoltre, è possibile impostare il regolatore in modo che l'uscita di regolazione venga gestita in maniera inversamente proporzionale all'errore.
IMPLEMENTAZIONE
OT30PidReg ( aswParReg , aswParUsr, gwSetPoint, gwMeasure, aglOutReg )
Parametri:
IN/OUT | TIPOVARIABILE | NOME DI ESEMPIO | DIM | |
---|---|---|---|---|
IN | ARRSYS | aswParReg [1] | W | Tempo di campionamento regolatore PID (sec/100) [0÷32767]. |
IN | ARRSYS | aswParReg [2] | W | Limite massimo di scala della variabile da regolare(UM) [-32768÷32767] |
IN | ARRSYS | aswParReg [3] | W | Limite minimo di scala della variabile da regolare(UM) [-32768÷32767] |
IN | ARRSYS | aswParReg [4] | W | Valore massimo uscita di regolazione [-32768 ÷32767] |
IN | ARRSYS | aswParReg [5] | W | Valore minimo uscita di regolazione [-32768 ÷32767] |
IN | ARRSYS | aswParReg [6] | W | Valore di saturazione positivo uscita di regolazione [-32768 ÷32767] |
IN | ARRSYS | aswParReg [7] | W | Valore di saturazione negativo uscita di regolazione [-32768 ÷32767] |
IN | ARRSYS | aswParReg [8] | W | Flags regolazione: bit 0: EnableReg. Abilita il regolatore; con regolatore disabilitato è tutto a 0. bit 1: FreezeReg. Sospende l'aggiornamento del regolatore. bit 2: InvertOut. Inverte l'uscita di regolazione bit 3: DisIntTm Disabilita il timer interno, la funzione deve quindi essere chiamata ogni tempo di campionamento. |
IN | ARRSYS | aswParUsr [1] | W | Guadagno proporzionale.(‰ )[0÷9999] |
IN | ARRSYS | aswParUsr [2] | W | Tempo integrale (sec/100) [0÷9999] |
IN | ARRSYS | aswParUsr [3] | W | Tempo derivativo (sec/100) [0÷9999] |
IN | ARRSYS | aswParUsr [4] | W | Tempo di campionamento della derivata [0÷255] 0=tempo di campionamento regolatore PID 1=2*tempo di campionamento regolatore PID … … n=(n+1)*tempo di campionamento regolatore PID |
IN | ARRSYS | aswParUsr [5] | W | Costante di tempo filtro derivata (sec/100) [0÷9999] |
IN | ARRSYS | aswParUsr [6] | W | Feed Forward (‰) [0÷2000] |
IN | GLOBAL | gwSetPoint | W | Setpoint di regolazione (UM) |
IN | GLOBAL | gwMeasure | W | Valore della variabile da regolare(UM) |
OUT | ARRGBL | aglOutReg[1] | L | Registro uscita PID |
OUT | ARRGBL | aglOutReg[2] | L | Registro uscita proporzionale |
OUT | ARRGBL | aglOutReg[3] | L | Registro uscita integrale |
OUT | ARRGBL | aglOutReg[4] | L | Registro uscita derivativa |
OUT | ARRGBL | aglOutReg[5] | L | Registro uscita feedforward |
OUT | ARRGBL | aglOutReg[6] | L | Registro errore |
OUT | ARRGBL | aglOutReg[7] | L | Stati del regolatore: bit 2 = stato saturazione positiva bit 3 = stato saturazione negativa bit 4 = stato di esecuzione regolazione |
OUT | ARRGBL | aglOutReg[8] | L | Codice Errore |
Errori
Una volta richiamata la funzione la variabile “Codice Errore” in aglOutReg[8] assume determinati valori, il significato di tali valori è riassunto di seguito:
0: Nessun errore
1: errore impostazione tempo di campionamento
2: errore impostazione limite inferiore e/o superiore di scala
3: errore impostazione valore guadagno proporzionale
4: errore impostazione tempo integrale
5: errore impostazione tempo derivativo
6: errore impostazione valore percentuale feed-forward
7: errore impostazione valore minimo e/o valore massimo uscita regolatore
8: errore impostazione tempo di campionamento derivativa
9: errore impostazione costante di tempo filtro derivata
10: impostazione valore saturazione positivo superiore al valore massimo uscita regolatore
11: impostazione valore saturazione negativo inferiore al valore minimo uscita regolatore
Esempio
;--------------------------------------------- ; Example ;--------------------------------------------- aswParReg [1]=500 ; tempo campionamento = 500ms aswParReg [2]=10000 ; fondo scala superiore = 10000 aswParReg [3]=0 ; fondo scala inferiore = 0 aswParReg [4]=5000 ; Valore massimo uscita regolatore aswParReg [5]=0 ; Valore minimo uscita regolatore aswParReg [6]=2000 ; Valore saturazione positiva uscita regolatore aswParReg [7]=0 ; Valore saturazione negativa uscita regolatore aswParUsr[1] = 100 ; Guadagno proporzionale = 0.1 aswParUsr[2] = 200 ; Tempo integrale = 2 sec. aswParReg [8]= aswParReg [8] ORB 1 ; Abilita regolazione MAIN: gwSetPoint = 800 OT30PidReg ( aswParReg , aswParUsr, gwSetPoint, gwMeasure, aslOutReg ) WAIT 1 JUMP MAIN
Definizione di regolatore
Un regolatore legge una variabile di ingresso (gwMeasure), lo confronta con un segnale di riferimento (gwSetPoint) e modifica il valore dell'uscita (aslOutReg[7])per ottenere l'uguaglianza della variabile con il riferimento.
Regolatore PID
Uno dei più diffusi tipi di regolatori è il PID (Proportional, Integral, Derivative).
Azione proporzionale
Questa azione di controllo stabilisce una relazione di proporzionalità diretta tra l'errore (aglOutReg[6]) ed il valore in uscita dal regolatore. Il parametro guadagno proporzionale (aswParUsr [1]) definisce l'entità dell'azione proporzionale; esso è espresso in millesimi per cui per impostare un guadagno pari a 0.5 si deve inserire il valore 500.
La regola che stabilisce il valore di uscita (aslOutReg[7]) definisce che: con guadagno unitario (1000), l'uscita di regolazione sarà massima quando l'errore è pari alla differenza tra “ Limite massimo di scala ” e “ Limite massimo di scala ” ovvero al risultato tra aswParReg [2] - aswParReg [3].
Azione integrale
L'azione integrale del regolatore PID calcola l'integrale dell'errore su un intervallo di tempo impostabile dall'utente tramite il parametro aswParUsr [2] (espresso in centesimi di secondo). Il segnale di uscita viene aggiornato in modo particolare: ogni volta che l'integratore da un valore in uscita questo è sommato al valore che si trova sul registro, quindi esso continuerà ad incrementarsi o decrementarsi (a seconda del segno dell'errore). Il valore d'uscita è calcolato così: con guadagno proporzionale unitario, il tempo di integrazione (aswParUsr [2]) è il tempo necessario affinché lil registro integrale (aglOutReg[3]) raggiunga il valore del registro proporzionale (aglOutReg[2]). Da quest'ultima affermazione si deduce che l'azione integrale è legata all'azione proporzionale.
Azione derivativa
L'azione derivativa cerca in un certo senso di “anticipare” il comportamento del sistema che si sta controllando. L'uscita prodotta è proporzionale alla variazione del segnale di ingresso. L'entità dell'effetto derivativo è impostabile tramite il parametro tempo derivativo (aswParUsr [3]). Il calcolo dell'azione derivativa si basa sulla seguente convenzione: il tempo derivativo è il tempo necessario affinché, con variazione di errore costante, il registro derivativo (aglOutReg[4]) raggiunga un valore pari al registro proporzionale (aglOutReg[2]). Come per l'azione integrale si evince che anche per l'azione derivativa c'è un legame con l'azione proporzionale. Più alto è il tempo di derivazione dell'errore e più veloce è il sistema nel recupero dell'errore nei transitori. E' evidente comunque che l'azione derivativa non può mai essere utilizzata da sola perché in presenza di errori costanti il suo effetto sarebbe nullo.
Azione feed-forward
In aggiunta al regolatore PID è presente anche l'azione feed-forward: essa genera un'uscita proporzionale al valore di setpoint (come si può dedurre dal nome non sfrutta alcuna retroazione dell'errore). La sua funzione è di ridurre il tempo di risposta del sistema fornendo un'uscita già vicina a quella che il regolatore dovrebbe raggiungere. Il contributo di questa azione è regolabile mediante il parametro feed forward (aswParUsr [6]): questo parametro è espresso come porzione millesimale (quindi per introdurre, ad esempio, 98.5% è necessario impostare il valore 985).
Impostando un valore di 100%, quando il setpoint (gwSetPoint ) sarà pari al “Limite massimo di scala” (aswParReg [2]) il valore dell'uscita feed-forward sarà pari al “valore massimo uscita di regolazione” (aswParReg [4]); quando il setpoint (gwSetPoint ) sarà pari al “Limite minimo di scala” (aswParReg [3]) il valore dell'uscita feed-forward sarà pari al “valore minimo uscita di regolazione” (aswParReg [5]);