software:qview:qview_6:qcl_library:ot21pidreg

no way to compare when less than two revisions

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.


software:qview:qview_6:qcl_library:ot21pidreg [2019/08/29 17:01] (versione attuale) – creata - modifica esterna 127.0.0.1
Linea 1: Linea 1:
 +====== OT21PidReg ======
 +
 +**O = **//Output digitale//
 +
 +**T = **//Funzioni di Controllo//
 +
 +La funzione OT21PidReg __implementa un regolatore generico PID__. Oltre a fornire in uscita il valore di regolazione, la funzione gestisce due segnali digitali che sono modulati in larghezza d'impulso per gestire la rappresentare rispettivamente positiva e negativa dell'uscita di regolazione.
 +
 +===== IMPLEMENTAZIONE =====
 +
 +**OT21PidReg ( aswParReg , aswParUsr, gwSetPoint, gwMeasure, gfEnaReg, aglOutReg )**
 +
 +Parametri:
 +
 +^IN/OUT^TIPOVARIABILE^NOME DI ESEMPIO^DIM^^
 +|IN|ARRSYS|aswParReg [1]|W|Tempo di campionamento regolatore PID (msec) [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|aswParUsr [1]|W|Guadagno proporzionale.(''‰'')[0÷9999]|
 +|IN|ARRSYS|aswParUsr [2]|W|Tempo integrale (msec) [0÷9999]|
 +|IN|ARRSYS|aswParUsr [3]|W|Tempo derivativo (msec) [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 (msec.) [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)|
 +|IN|GLOBAL|gfEnaReg|F|Abilitazione regolazione [0÷1]\\ 0=regolatore disabilitato\\ 1=regolatore abilitato|
 +|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 0 = stato uscita pwm per regolazione positiva \\ bit 1 = stato uscita pwm per regolazione negativa \\ 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
 +
 +=== Esempio ===
 +
 +<code QCL>
 +;---------------------------------------------
 +; Example
 +;---------------------------------------------
 + aswParReg [0]=500 ; tempo campionamento = 500ms
 + aswParReg [1]=10000 ; fondo scala superiore  = 10000
 + aswParReg [2]=0         ; fondo scala inferiore  = 0
 + aswParReg [3]=500 ; Valore massimo uscita regolatore
 + aswParReg [4]=0         ; Valore minimo uscita regolatore
 +
 +        aswParUsr[1] = 100 ; Guadagno proporzionale = 0.1
 +        aswParUsr[2] = 200 ; Tempo integrale = 0.2 sec.
 +
 +        gfEnaReg = 1 ;Abilita Regolazione
 +MAIN:
 + gwSetPoint = 800
 +        OT20PidReg ( aswParReg , aswParUsr, gwSetPoint, gwMeasure, gfEnaReg, aslOutReg )
 +        ofOutPow = aslOutReg[7] ANDB &H01
 +WAIT 1
 +JUMP MAIN
 +</code>
 +
 +==== 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 ms). 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).
 +
 +=== DIFFERENZE RISPETTO ALLE VECCHIE RELEASE ===
 +  * (dalla 20 alla 21) Aggiunto uno stato di esecuzione regolazione. ? Evitato un errore ""division by zero" alla prima esecuzione ? Evitato di azzerare l'uscita integrale OUTI se ti=0. Questo serve per poter sospendere l'esecuzione del pid e riprenderla senza che il registro integrale venga alterato.
  
  • Ultima modifica: 2019/08/29 17:01