Passa al contenuto principale

PIDMng, PID management

ll controllo Proporzionale-Integrale-Derivativo, è un sistema in retroazione negativa ampiamente impiegato nei sistemi di controllo, questo FB acquisisce in ingresso un valore da un processo PValue, e lo confronta con un valore di riferimento SetPoint. La differenza, il cosiddetto segnale di errore, viene usata per determinare il valore della variabile di uscita OValue, che è la variabile di gestione del processo. Il PID regola l'uscita in base a 3 azioni:

  • Azione proporzionale (P): Il valore del segnale di errore.

  • Azione integrale (I): I valori passati del segnale di errore.

  • Azione derivativa (D): Quanto velocemente il segnale di errore varia.

Il valore OValue di uscita può variare nel range definito dai parametri OVLow e OVHigh, il segno dell'uscita sarà positivo se SetPoint>PValue o negativo nel caso contrario. Tramite WControl.4 è possibile invertire la polarità.

Il valore di uscita andrà poi opportunamente scalato per la gestione del processo, può essere ad esempio utilizzato per gestire una modulazione PWM su di un riscaldatore e/o per gestire il riferimento di velocità di un motore.

Diagramma PID

Approfondimenti
  • In questo topic sono riportate informazioni sulla ottimizzazione del controllo PID.
  • In questo topic un esempio di test funzionamento FB di gestione PID su simulatore PLC.
  • In questo topic l'utilizzo di un sistema SlimLine come termoregolatore.

Taratura PID con Ziegler-Nichols

Si attiva un controllo esclusivamente proporzionale (ITime e DTime impostati a zero);
Il guadagno KProp viene gradualmente aumentato;
Il guadagno Ku è il valore al quale le oscillazioni del processo non spariscono dopo un transitorio;
Si registra il periodo critico T delle oscillazioni;
Secondo la seguente tabella, si determinano le costanti per il controllore P, PI o PID.

Oscillogramma taratura PID

Tipo regolazioneKPropITimeDTime
ProporzionaleKu*0.500
Proporzionale/IntegrativaKu*0.45T/1.250
Proporzionale/Integrativa/DerivativaKu*06T/2T/8

Descrizione​

Immagine FB_PIDMng

ParametroTipoDescrizione
EnableBOOLAbilitazione regolazione PID, attivando l'ingresso si abilita la regolazione. Disattivandolo si azzera il valore in uscita OValue.
SpyOnBOOLSe attivo permette di spiare il funzionamento della FB (Vedi articolo).
WControlWORDWord di controllo, vedi descrizione.
ManualBOOLComando funzionamento manuale, OValue:=MValue.
MValueREALImpostazione valore uscita manuale, viene trasferito su OValue se Manual attivo (%).
BiasREALImpostazione offset valore uscita, se PID in automatico (%).
SetPointREALSet point, valore di set point (Grandezza fisica).
PValueREALValore acquisito dal processo (Grandezza fisica).
DBandREALBanda morta, valore di errore processo tra le grandezze fisiche SetPoint e PValue entro il quale è azzerato l'errore. Impostando valore 0 si disabilita il controllo.
KPropREALCostante proporzionale, si ricorda che più è elevato il valore più è pronta è la regolazione con un conseguente aumento del valore di overshot. Il valore è un numero.
ITimeREALTempo integrativo, si ricorda che più è elevato il valore meno è veloce la regolazione integrativa a recuperare l'errore (S). Impostando valore 0 si disabilita l'azione integrativa.
DTimeREALTempo derivativo, si ricorda che più è elevato il valore più è veloce la regolazione derivativa a recuperare l'errore (S). Impostando valore 0 si disabilita l'azione derivativa.
ScTimeTIMETempo esecuzione regolazione PID. La regolazione viene eseguita ogni tempo definito.
OVHighREALValore massimo uscita PID (%).
OVLowREALValore minimo uscita PID (%).
EnabledBOOLRegolazione PID abilitata.
WStatusWORDWord di stato, vedi descrizione.
PErrorREALErrore di processo (Grandezza fisica).
PTermREALTermine di correzione proporzionale (%).
ITermREALTermine di correzione integrale (%).
DTermREALTermine di correzione derivativa (%).
OValueREALValore uscita regolazione PID. Questo valore deve essere utilizzato per il comando del processo (%)

WControl

  • WControl.4: Inversione polarità errore di processo.

  • WControl.12: Attiva spionaggio esteso.

WStatus

  • WStatus.4: PID stà operando in modo manuale.

  • WStatus.6: Usato internamente.

  • WStatus.7: Usato internamente.

  • WStatus.8: OValue è in limite basso OVLow.

  • WStatus.9: OValue è in limite alto OVHigh.

  • WStatus.12: Usato internamente.

Trigger di spy​

Se SpyOn attivo  è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Livelli di trigger

TriggerDescrizione
16#10000000Lg: Logs di esecuzione.

Dati in spionaggio

Attivando lo spionaggio nella console ad ogni tempo di scansione definito ScTime, viene ritornato un record in formato CSV con tutti idati interni della regolazione, salvandolo su disco è possibile importarlo in Excel per una analasi approfondita.

02:38:32(9000)|PIDMng:Lg|Mode; MValue; Bias; SPoint; PValue; ActError; PTerm; ITerm; DTerm; OValue
02:38:32( 0)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 0.000; 0.000; 1.000
02:38:33(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 0.000; 0.000; 1.000
02:38:34(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 0.000; 0.000; 1.000
02:38:35(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 0.000; 0.000; 1.000
02:38:36(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 0.000; 0.000; 1.000
02:38:37(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 0.000; 0.000; 1.000

Attivando il bit WControl.12 è possibile avere un record esteso.

02:36:27(----)|PIDMng:Lg|Mode; MValue; Bias; SPoint; PValue; PrError; ActError; PTerm; ITerm; DTerm; OVHigh; OVLow; OValue
02:36:27( 0)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 1.000; 0.000; 0.000; 100.000; -100.000; 1.000
02:36:28(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 1.000; 0.000; 0.000; 100.000; -100.000; 1.000
02:36:29(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 1.000; 0.000; 0.000; 100.000; -100.000; 1.000
02:36:30(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 1.000; 0.000; 0.000; 100.000; -100.000; 1.000
02:36:31(1000)|PIDMng:Lg|Auto; 0.000; 0.000; 5.000; 4.000; 1.000; 1.000; 1.000; 0.000; 0.000; 100.000; -100.000; 1.000

Caratteristiche del regolatore PID​

  • Deadband: Banda morta utilizzata per prevenire oscillazioni o ripetuti cicli di attivazione-disattivazione dell'attuatore.

  • Anti-Reset Windup: Funzione che impedisce alla regolazione integrale di continuare a crescere quando la somma tra la regolazione PID ed il Bias raggiungono i limiti definiti in OVLow/OVHigh.

  • Manual mode with bumpless transfer: Nel funzionamento manuale (Attivando l'ingresso Manual) viene esclusa la regolazione PID e l'uscita Out viene impostata con il valore definito in MValue. Nel passaggio da manuale ad automatico viene calcolata l'azione integrale richiesta per avere un passaggio bumpless.

  • Feed forward o Bias: Il feed forward è una tecnica di previsione che stima l'output del PID senza attendere la risposta dell'algoritmo. Questo permette di ridurre l'errore più velocemente o mantenere l'errore più piccolo rispetto alla sola regolazione PID.

Esempi​

Come utilizzare gli esempi.
FBD_PIDMng_v3: Viene gestita la termoregolazione di un forno. Una sonda Pt100 acquisisce il valore di temperatura, e l'uscita del FB tramite il FB PWMOut gestisce il forno. La funzione oscilloscopio di LogicLabpermette di verificare il funzionamento e procedere alla ottimizzazione dei valori per ottenere la regolazione migliore.

ST_PIDMngTest: Viene simulato un caso reale di regolazione PID. L'uscita del FB è connessa ad un FB LRamp che simula il processo. Da debug è possibile gestire il passaggio bumpless da regolazione automatica a manuale e viceversa.

LogicLab (Ptp114, FBD_PIDMng)
PROGRAM FBD_PIDMng
VAR
Enable : BOOL := TRUE; (* PID enable *)
SetPoint : REAL; (* PID Set point *)
PValue : REAL; (* PID process value *)
KProp : REAL := 1.0; (* Proportional coefficent (Nr) *)
ITime : REAL := 20.0; (* Integrative time (Sec) *)
DTime : REAL := 5.0; (* Derivative time (Sec) *)
ScTime : TIME := T#200ms; (* Scansion time *)
AIn : SysGetAnInp; (* Analog input acquisition *)
PIDFb : PIDMng_v3; (* PID function block *)
POut : PWMOut_v1; (* PWM out command *)
END_VAR

Immagine FBD_PIDMng_v2

LogicLab (Ptp114, ST_PIDMngTest)
PROGRAM ST_PIDMngTest
VAR
Enable : BOOL := TRUE; (* PID enable *)
SetPoint : REAL; (* PID Set point *)
PValue : REAL; (* PID process value *)
KProp : REAL := 1.0; (* Proportional coefficent (Nr) *)
ITime : REAL := 20.0; (* Integrative time (Sec) *)
DTime : REAL := 5.0; (* Derivative time (Sec) *)
ScTime : TIME := T#200ms; (* Scansion time *)
AIn : SysGetAnInp; (* Analog input acquisition *)
PIDFb : PIDMng_v3; (* PID function block *)
Ramp : LRamp; (* Ramp FB *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_PIDMngTest"
// *****************************************************************************
// This program realizes a simply PID temperature regulation.
// -----------------------------------------------------------------------------

// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Initialize all FBs.

IF (SysFirstLoop) THEN

// Initialize PID FB.

PIDFb.Bias:=0.0; //Bias value (%)
PIDFb.DBand:=0.0; //Dead Band (Nr)
PIDFb.OVHigh:=100.0; //Output value high (%)
PIDFb.OVLow:=0.0; //Output value low (%)

// Initialize ramp FB.

Ramp.UPSlope:=1.0; //Up slope
Ramp.DWSlope:=1.0; //Dw slope
END_IF;

// -------------------------------------------------------------------------
// PID REGULATION
// -------------------------------------------------------------------------
// Manage the PID.

PIDFb.Enable:=Enable; //PID enable
PIDFb.ScTime:=ScTime; //Scansion time
PIDFb.KProp:=KProp; //Proportional coefficent (Nr)
PIDFb.ITime:=ITime; //Integrative time (Sec)
PIDFb.DTime:=DTime; //Derivative time (Sec)
PIDFb.PValue:=Ramp.Out; //Process value
PIDFb(); //PID function block

// Auto/Manual actions to avoid bumping.
// If PID on Auto mode transfer the Out to MValue.
// If PID on Manual mode transfer the PValue to SetPoint.

IF NOT(PIDFb.Manual) THEN PIDFb.MValue:=PIDFb.OValue; END_IF;
IF (PIDFb.Manual) THEN PIDFb.SetPoint:=PIDFb.PValue; END_IF;

// Execute the ramp to simulate the process.

Ramp.In:=PIDFb.OValue; //Input value
Ramp(Enable:=TRUE); //Execute the ramp
PValue:=Ramp.Out; //PID process value

// [End of file]