Simulazione Processo Primo Ordine

Creazione di un Task periodico in FBD per la simulazione di un processo del primo ordine.

Può essere utile simulare il processo che dobbiamo controllare per aver modo di testare in fase di progettazione la logica di controllo (che nella maggior parte dei casi per un sistema del primo ordine sarà un controllore PI o PID).
Ovviamente per poter simulare il processo dobbiamo conoscerne il modello matematico oppure la risposta al gradino.

Come sappiamo un sistema del primo ordine è caratterizzato da una costante di tempo, da un tempo di ritardo e da un guadagno. La risposta al gradino per un processo del primo ordine è la seguente (supponendo nullo il tempo di ritardo):

 

Grafico

 

Dopo un tempo pari a 4 – 5 volte la costante di tempo il sistema può considerarsi a regime. Nell’esempio sopra il guadagno del processo è pari ad 1.

La maggior parte dei processi industriali possono essere modellati come dei sistemi del primo ordine, e tra questi possiamo prendere l’esempio più classico del riscaldamento (o raffreddamento) di un fluido all’interno di un serbatoio.

Supponiamo quindi di avere una resistenza che viene usata per riscaldare un liquido all’interno di un serbatoio. Il passaggio della corrente nella resistenza avviene con la chiusura del circuito attraverso un relè a stato solido SSR. Questo processo, che noi vogliamo simulare presenta la seguente risposta al gradino (ovvero in questo caso la risposta del sistema partendo dalla temperatura di zero gradi al passaggio della corrente nella resistenza).

sistema_da_simulare

Da questa risposta possiamo ricavare il tempo di ritardo, la costante di tempo e il guadagno. In questo caso abbiamo:

  • Tempo di ritardo = 0
  • Costante di tempo = 300 sec
  • Guadagno = 100

Quindi la risposta del sistema al gradino può essere scritta come:

y(t) = (Y0)*exp(-t/T) + (G)*(1-exp(-t/T))

dove y(t) rappresenta la temperatura all’istante di tempo t, Y0 rappresenta il valore dell’uscita (e quindi come detto della temperatura) per t=0, G il guadagno e T la costante di tempo.

Mentre invece quando non è applicato alcun ingresso la risposta sarà:

y(t) = (Y0 – Temp_ambiente)*exp(-t/T) + Temp_ambiente

Quindi sostituendo i valori avremmo che la risposta al gradino sarà:

y(t) = (Y0)*exp(-t/300) + 100*(1-exp(-t/300))

invece l’evoluzione libera:

y(t) = (Y0 – Temp_ambiente)*exp(-t/300) + Temp_ambiente

La funzione di trasferimento del sistema sarà invece:

prima

A questo punto possiamo simulare il processo usando l’istruzione LDLG (Lead-Lag). Come detto inseriremo quindi tale istruzione in un task periodico (e quindi lasciamo “TimeMode”=0 come di default). Quindi avremmo la seguente situazione:

 

proc_temp1

Dove come possiamo vedere il Lead-Lag simula il processo vero e proprio (ossia simula la variazione di temperatura al passaggio di corrente nella resistenza), ed è stato impostato con i seguenti parametri:

  • “In” che è pari ad “1.0” solo quando viene alimentata la resistenza (attraverso il relè SSR)
  • “Lag” corrisponde alla costante di tempo del processo (in  questo caso 300)
  • “Gain” il guadagno del processo (in questo caso 100)
  • “Bias” consente di “simulare” la temperatura ambiente (in questo caso 20°C =>20)

 

mentre l’SRTP serve per generare un segnale PWM con un periodo pari ad 1 secondo (“CycleTime”=1) e un duty cycle proporzionale al segnale in uscita del PID (ossia il “CVEU”).

Inoltre bisogna anche ricordare che deve essere rispettato il teorema del campionamento, e quindi la frequenza di esecuzione del Task periodico deve essere almeno doppia alla banda del sistema che stiamo simulando. In questo caso (processo del primo ordine) significa che il periodo del Task periodico deve essere minore della metà della costante di tempo del processo. In questo esempio non ci dobbiamo preoccupare in quanto la costante di tempo è molto grande e sicuramente il periodo di esecuzione sarà molto più piccolo della metà della costante di tempo.

You may also like...


Warning: count(): Parameter must be an array or an object that implements Countable in /membri/fabioplc/wp-includes/class-wp-comment-query.php on line 399
Menu Title