Vai al contenuto
PLC Forum


Esempio Controllo PID Temperatura


Operational Amplifier

Messaggi consigliati

Operational Amplifier

Buongiorno a Tutti,

Il sistema consiste in una regolazione di temperatura tramite PID, come trasduttore viene utilizzato una PT100 e come attuatore per riscaldare vengono utilizzate delle resistenze installate a bordo di uno stampo le quali vengono pilotate da un SSR.

Il seguente codice che ho preso dal manuale di Livio Orsini viene elaborato ogni secondo (il sistema non è veloce ma ha molta inerzia).

 

error = val_cons - AD_Conv;
P = error * Kp;
i_inst = error * Ki;
I = I + i_inst;
D = Kd * (error – old_error);
old_error = error;
Out = P + I + D;

 

Ho alcune domande da esporre ai più esperti in questo argomento:

  1. il seguente codice è ideale anche per la regolazione della temperatura....?
  2. In rete ho trovato un PID che utilizza anche i coefficienti Ti e Td (vedi immagine allegata), come posso implementare questi coefficienti nel modo corretto al codice sopra...?
  3. Come posso verificare una risposta al gradino del sistema...? Imposto l'uscita che comanda l'SSR a 0%, dopo un deltaT imposto l'uscita al 100% e dopo un altro deltaT la reimposto a 0% durante questa prova campiono il valore letto dalla PT100...? Quale è lo scopo di questa prova...?

 

Grazie in Anticipo

 

PID.png

Link al commento
Condividi su altri siti


1 ora fa, Operational Amplifier ha scritto:

il seguente codice è ideale anche per la regolazione della temperatura....?

 

Quello è un canonico regolatore PID generico, può essere per qualsiasi applicazione. Dipende dai coefficienti usati.

 

2 ore fa, Operational Amplifier ha scritto:

i coefficienti Ti e Td (vedi immagine allegata), come posso implementare questi coefficienti nel modo corretto al codice sopra...?

 

Se hai letto il mio tutorial dovresti sapere cosa è il tempo integrale e cosa è il tempo derivativo.

Quei coefficienti non li puoi usare nel regolatore PID generico, perchè in questo regolatore sono usati i guadagni, coefficienti che io trovo più pratici rispetto ai tempi.

Tanto per esemplificare ti ricordo la definizione di Tempo di integrazione (quello che tu riporti come Ti).

Il tempo di integrazione è il tempo impiegato dall'azione integrale ad eguagliare l'azione proporzionale, ad errore costante.

Esempio numerico.

Ammettiamo di avere un errore pari a 5, con un Kp di 3; la correzione proporzionale sarà pari a 15.

Con un tempo di campionamenti di 1" e con Ki pari a 0,5 il tempo di integrazione Ti sarà pari a 6".

 

Sono evidenti 2 "problemi" pratici:

  1. L'errore non può essere costante per definizione, se il sistema non è bloccato, perchè già l'azione proporzionale lo fa diminuire ed anche l'azione integrale, nel momento in cui comincia ad agire, riduce l'errore.
  2. Ogni volta che si modifica il guadagno proporzionale cambia automaiticamente il tempo di integrazione.

Io preferisco tenere separati e distinti i 2 coefficienti, così che risulta molto più semplice l'ottimizzazione del regolatore.

 

2 ore fa, Operational Amplifier ha scritto:

Come posso verificare una risposta al gradino del sistema...?

 

Lo scopo della risposta al gradino è l'ottimizzazione del regolatore. Un regolatore poco smorzato avrà delle sovra e sotto elengazioni attorno al valore di consegna o di riferimento.

Meno è smorzato più sono ampie queste oscillazioni e più a lungo si protraggono nel tempo; addirittura potrebbero diventare persistenti rendendo il sistema instabile.

Se il regolatore è molto smorzato non ci sono sovra e sotto elongazioni, però raggiungerà il valore di consegna con un notevole ritardo. Se lo smorzamento risulta essere eccessivo si avrà un comportamentoi assintotico, ovvero non raggiungerà mai il valore di consegna.

Lo smorzamento ottimo dipende dal tipo di processo da controllare.

Un fattore di smiorzamento, detto Xi, ottimo per alcuni processi è il classico 0.707; valore che provoca un minimo di oscillazioni ma, in compenso, è sufficientemente veloce nell'andata a regimo.

Per i controlli di temperatura, in genere, si sta su fattori prossimi a 1; un coefficiente di questa grandezza evita le oscillazioni ed è ancora sufficientemente veloce, in relazione al tipo di processo.

 

Il modo sperimentale di controllo per risposta la gradino consiste nel dare una variazione di riferimento pari al 10% e verificare l'andamento della reazione.

Quindi nel tuo caso devi dare una variazione del 10% in più, o in meno, al valore di set point; misurando il valore di reazione, ovvero la misura di temperatura riportata dalla PT100, vedrai come reagisce il sistema.

Ovviamente non è il caso di osservarlo all'oscilloscopio, visto il tempo di campionamento di 1", ma è conveniente registrarsi le temperature su di un file.

 

Potresti scrivere cosa usi per implementare il regolatore? (PLC?, micro? altro?).

Sarebbe anche gradita la descrizione dell'intero sistema controllato.

 

Link al commento
Condividi su altri siti

Operational Amplifier

Ciao Livio e Grazie per la Risposta,

 

1 ora fa, Livio Orsini ha scritto:

Potresti scrivere cosa usi per implementare il regolatore? (PLC?, micro? altro?).

Il regolatore è implementato in un PLC.

 

1 ora fa, Livio Orsini ha scritto:

Sarebbe anche gradita la descrizione dell'intero sistema controllato

Il PLC acquisisce tramite ingresso analogico la temperatura dello stampo con convertitore PT100/4-20mA, lo stampo viene scaldato tramite un'uscita del PLC con un SSR,

l'uscita del PLC è configurata in PWM come da immagine sottostante (uscita gestita nel programma PLC come 0-100%).

 

PWM Output.png

 

Il mio obbiettivo è quello di poter parametrizzare il PID generico tramite un Autotuning (oppure tramite un metodo appropriato) velocizzando la messa in servizio della macchina, nello specifico lo stampo si scalda in circa 5-10 minuti però a raffreddarsi ci mette circa 1 ora.

facendo vari tentativi le giornate volano.

In rete ho trovato questo autotuning https://pidtuner.com/#/, secondo la tua esperienza potrebbe fare al mio caso con il PID generico...?

Modificato: da Operational Amplifier
Link al commento
Condividi su altri siti

Operational Amplifier

Ho visto che nel manuale descrivi anche la parte di ottimizzazione del PID generico, se mi riesci a dare qualche dritta potrei scrivere una parte di programma che ottimizzi i guadagni in automatico su richiesta.

Ora lo rileggo attentamente poi ti se sei interessato ci confrontiamo.

Link al commento
Condividi su altri siti

Operational Amplifier
Quote

2.2 Regolazione Proporzionale

Il sistema pratico per tarare la parte proporzionale di un regolatore PID prevede proprio l’esclusione
delle parti Integrale e Derivativa; indi si eccita il sistema con un gradino di riferimento in ingresso, la
cui ampiezza è pari a circa il 10% del valore massimo; si osserva, per mezzo di un oscilloscopio, il
comportamento in uscita; si accresce il guadagno fino ad osservare fenomeni d’instabilità; si riduce il
guadagno di circa il 10%.

 

Per quanto riguarda eccitare il sistema con un gradino di riferimento in ingresso con ampiezza circa il 10% del valore massimo, nel mio caso il sensore di temperatura può variare da 0 a 200C°, quanto posso impostare il SP per poi aumentare gradualmente il guadagno fino ad osservare fenomeni d’instabilità...?

La macchina è installata in un ambiente con temperatura ambiente di circa 20C°

Modificato: da Operational Amplifier
Link al commento
Condividi su altri siti

Il dato importante è: quanto vale tipicamente il riferimeto di temperatura? Se fosse ad esempio 150°C lo step dovrebbe essere di circa 15°C. Ovviamente prima ti porti ad una temperatura di prossima al set point, ad esempio 130°C poi dai lo step diu 15°C.

Puoi anche dare subito lo step a 150°C, ma devi aspettare olto tempo per vedere i risultati.

 

Tieni presente una cosa fondamentale: il campionamento ed il comado di attuazione (uscita PID) devono essere sincroni a tempi rigorosamente costanti, non ci devono essere jitter perchè questo è un disturbo che va ad inficiare la precisione di regolazione.

Non specifichi che PLC stai usando, ma se non hai un orologio che faccia scattare un interrupt ed usi i timer basati sui tempi di ciclo le cose non funzionano troppo bene.

Inoltre quel tempo di campionamento di 1" può ance essere troppo breve. Dioende da quale variazione di temperatura riesce a fare il tuo oggetto in 1".

 

4 ore fa, Operational Amplifier ha scritto:

l mio obbiettivo è quello di poter parametrizzare il PID generico tramite un Autotuning

 

Ci sono alcuni metodi di autotunig, basati su teorie ben precise.

Stando sul pratico si danno una serie di step di riferimeto e si osserva il comportamento della variabile, in base al comportamento si aumentano o si diminuiscono i coefficienti in funzione del risultato.

4 ore fa, Operational Amplifier ha scritto:

In rete ho trovato questo autotuning https://pidtuner.com/#/, secondo la tua esperienza potrebbe fare al mio caso con il PID generico...?

Se guardi lo schema a blocchi vedi che l'architettura è differente.

Comunque usano l'osservazione alla risposta di uno step.

 

Da ultimo, ma non ultimo.

Non è detto che la miglior soluzione per il tuo controllo sia un canonico PID, spesso ho usato varianti di architettura dei 3 blocchi e della loro composizione, ottimizzati sul problema specifico.

 

1 ora fa, Operational Amplifier ha scritto:

Ora lo rileggo attentamente poi ti se sei interessato ci confrontiamo.

 

Tu scrivi in questa discussione io, ed eventualmente altri, risponderò

Link al commento
Condividi su altri siti

Operational Amplifier
1 ora fa, Livio Orsini ha scritto:

Il dato importante è: quanto vale tipicamente il riferimeto di temperatura? Se fosse ad esempio 150°C lo step dovrebbe essere di circa 15°C. Ovviamente prima ti porti ad una temperatura di prossima al set point, ad esempio 130°C poi dai lo step diu 15°C.

La temperatura di riferimento tipica (SP) è di 175C°.

 

1 ora fa, Livio Orsini ha scritto:

Stando sul pratico si danno una serie di step di riferimeto e si osserva il comportamento della variabile, in base al comportamento si aumentano o si diminuiscono i coefficienti in funzione del risultato.

Per una serie di step intendi dei gradini 130C° OFF e 130+15C° ON come da tuo esempio sopra...?

Poi seguo la guida del tuo manuale per vedere quando inizia a diventare instabile il sistema (per ora solamente con il proporzionale, I e D disattivati)...corretto...? 

Link al commento
Condividi su altri siti

Operational Amplifier
2 ore fa, Livio Orsini ha scritto:

Tieni presente una cosa fondamentale: il campionamento ed il comado di attuazione (uscita PID) devono essere sincroni a tempi rigorosamente costanti, non ci devono essere jitter perchè questo è un disturbo che va ad inficiare la precisione di regolazione.

Non specifichi che PLC stai usando, ma se non hai un orologio che faccia scattare un interrupt ed usi i timer basati sui tempi di ciclo le cose non funzionano troppo bene.

Inoltre quel tempo di campionamento di 1" può ance essere troppo breve. Dioende da quale variazione di temperatura riesce a fare il tuo oggetto in 1".

Sto utilizzando un PLC Simatic S71200, il codice viene elaborato tramite un Interrupt ciclico a tempo, l'uscita viene scritta direttamente sulla periferica di output.

La variazione in un secondo è di qualche decimo di grado (0,2-0,3 circa) se serve potrei effettuare delle campionature.

Link al commento
Condividi su altri siti

11 ore fa, Operational Amplifier ha scritto:

Per una serie di step intendi dei gradini 130C° OFF e 130+15C° ON come da tuo esempio sopra...?

 

se ilriferimento tipico è 175°C gli step dovrebbero essere dell'ordine dei 20°C circa.

11 ore fa, Operational Amplifier ha scritto:

, l'uscita viene scritta direttamente sulla periferica di output.

 

Però bisogna capire quando la scrivi. se la scrivi al termine dell'elaborazione del programma regolatore avrà del jitter. E veroche con i tempi di campionamento di 1" sarà irrilevante la variazione di qualche ms, però con tempi più veloci avrebbe una rilevanza.

 

11 ore fa, Operational Amplifier ha scritto:

La variazione in un secondo è di qualche decimo di grado (0,2-0,3 circa)

 

Se ho capito bene significa che applicando tutta la potenza ai resistori di riscaldo la temperatura cresce dicirca 0.25°C ad ogni secondo; è così?

 

 

Curiosità mia.

Siemens ha già il suo blocco PID di libreria che, a detta di chi lo usa, funziona benissimo per regolare temperature; perchè ti stai reinventandio la ruota quando hai già tutto?

Link al commento
Condividi su altri siti

Operational Amplifier
56 minuti fa, Livio Orsini ha scritto:

Se ho capito bene significa che applicando tutta la potenza ai resistori di riscaldo la temperatura cresce dicirca 0.25°C ad ogni secondo; è così?

Si...ti confermo che applicando tutta la potenza ai resistori di riscaldo la temperatura cresce di circa 0.25°C ad ogni secondo

 

58 minuti fa, Livio Orsini ha scritto:

Siemens ha già il suo blocco PID di libreria che, a detta di chi lo usa, funziona benissimo per regolare temperature; perchè ti stai reinventandio la ruota quando hai già tutto?

Si ho utilizzato il blocco PID della libreria (anche in passato)...sinceramente non mi ha entusiasmato molto, utilizza parecchie risorse della CPU, il Tuning dura parecchio e la salita è lenta.

Ho avuto dei risultati sorprendenti con i termoregolatori della Ascon, sono economici, comunicano in Modbus RTU, il Tuning lo effettua circa in 10minuti ed ha una precisione di circa +/- 0.5C° ed è veloce nel raggiungere il SP.

Sto effettuando dei test per vedere le varie sfaccettature dei sistemi...ma mi rendendo conto che il lavoro diventa importante ed il tempo è quello che è, credo che riproverò il PID della libreria.

Link al commento
Condividi su altri siti

2 ore fa, Operational Amplifier ha scritto:

Ho avuto dei risultati sorprendenti con i termoregolatori della Ascon

 

A me la cosa non risulta sorprendente, perchè li considero tri i  igliori prodotti di quel genere; il loro rapporto prestazioni-costo è veramente elevato ed anche l'affidabilità è buona, è ai massimi livelli di questo tipo di prodotti. Almeno questa è stata la mia esperienza.

 

2 ore fa, Operational Amplifier ha scritto:

Si...ti confermo che applicando tutta la potenza ai resistori di riscaldo la temperatura cresce di circa 0.25°C ad ogni secondo

 

Questo può gia essere un ottimo parametro per l'ottimizzazione per non caricare inutilmente l'integrale.

Ad esempio potresti prevedere un ritardo nell'inserimento dell'azione del regolatore, in modo da evitare che questo carichi inutilmente l'integale, fatto che poi comporta rallentamenti e sovra elongazioni.

Cerco di chiarire con un esempio.

Ipotizziamo di avere il valore da raggiungere pari a 175°C e che all'accensione lo stampo sia alla temperatura di circa 30°C. L'errore misurato sarà quindi pari a 145°C; dividendo l'errore per il coefficiente di 0,25 significa che per arrivare in temperatura necessitano circa 580".

A questo punto comandi la massima uscita sino a quando l'errore, ad esempio, non sia minore di 20°C e comunque per un tempo non superiore a 540".

Questo renderebbe più veloce l'andata a regime ed eviterebbe che l'integrale si carichi troppo.

 

Se non necessiti di tempi di salita particolari in modo da avere una particolare curva di temperatura, il regolatore serve solo nella parte finale; poi il regolatore serve per mantenere costante la temperatura nell'intorno del valore di consegna.

 

Comunque i regolatori di temperatura, se fatti bene, non si basano solo su un regolatore PID, ma qui entriamo in una ... disquisizione che richiede pagine e apgine....

Link al commento
Condividi su altri siti

Operational Amplifier
6 ore fa, Livio Orsini ha scritto:

Questo può gia essere un ottimo parametro per l'ottimizzazione per non caricare inutilmente l'integrale.

Ad esempio potresti prevedere un ritardo nell'inserimento dell'azione del regolatore, in modo da evitare che questo carichi inutilmente l'integale, fatto che poi comporta rallentamenti e sovra elongazioni.

Cerco di chiarire con un esempio.

Ipotizziamo di avere il valore da raggiungere pari a 175°C e che all'accensione lo stampo sia alla temperatura di circa 30°C. L'errore misurato sarà quindi pari a 145°C; dividendo l'errore per il coefficiente di 0,25 significa che per arrivare in temperatura necessitano circa 580".

A questo punto comandi la massima uscita sino a quando l'errore, ad esempio, non sia minore di 20°C e comunque per un tempo non superiore a 540".

Questo renderebbe più veloce l'andata a regime ed eviterebbe che l'integrale si carichi troppo.

Condivido in pieno il ragionamento, questo sistema non necessita di una particolare curva, non è un trattamento termico, necessita però di una precisione alla temperatura di SP.

Ti confermo che il problema è proprio che la parte integrale si sovraccarica troppo, domani effettuerò delle prove.

Link al commento
Condividi su altri siti

13 ore fa, Operational Amplifier ha scritto:

Ti confermo che il problema è proprio che la parte integrale si sovraccarica troppo, domani effettuerò delle prove.

 

Ci sono anche altri sistemi per evitare questo effetto perverso come, ad esempio, mettere un limite all'integrale oppure escluderlo sino a quando l'errore non comincia a diminuire; oppure la combinazione dei vari metodi.

Il vero collo di bottiglia di tutte le regolazioni è proprio la risposta del sistema, il solito assioma che non si può spremere sangue dalle rape, tuttalpiù si può avere del succo di rapa.🙂

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...