Questo è semplice da implementare, infatti è solo una riga di codice nella cella seguente. Regolare “Tsetpoint” sul valore di setpoint desiderato, quindi eseguire la cella.
from tclab import TCLab, clock, Historian# control parametersQmax =100Tsetpoint =40# time horizon and time steptfinal =300tstep =1# perform experimentwith TCLab() as a: h = Historian(a) h.initplot(tfinal)for t in clock(tfinal, tstep): T1 = a.T1 # measure temperature Q1 = Qmax if a.T1 < Tsetpoint else0# compute manipulated variable a.Q1(Q1) # adjust power h.update(t) # log results
TCLab disconnected successfully.
Controllo relè con isteresi
Uno dei problemi con il semplice controllo del relè è il rischio di “vibrazioni”, ovvero situazioni in cui la variabile manipolata (in questo caso la potenza del riscaldatore) si accende e si spegne rapidamente. Ciò può essere causato da sistemi che rispondono molto bene agli input di controllo o in cui le misurazioni dei sensori comportano un rumore significativo.
Il tipico termostato domestico utilizzato per il controllo del forno incorpora una soluzione semplice ma altamente efficace al periodo di chiacchiere. L’idea è di superare intenzionalmente il setpoint. Quindi, dopo lo stato di commutazione del controllo, ci sarà almeno un breve periodo di tempo in cui non dovrebbero essere necessarie ulteriori azioni di controllo. L’algoritmo di controllo può essere scritto
dove \(d\) è la tolleranza o isteresi. Per i sistemi di riscaldamento domestico, un valore tipico è compreso tra 0,5 e 1 grado F. Questa immagine mostra come veniva regolata l’isteresi su un tipico termostato domestico di uso comune alla fine del XX secolo.
Il forno è acceso per temperature inferiori all’intervallo
ed è rivolto a temperature superiori all’intervallo. All’interno dell’intervallo, tuttavia, il forno può essere acceso o spento a seconda di ciò che è accaduto nell’ultimo punto decisionale.
Il seguente codice implementa il controllo del relè con isteresi.
from tclab import TCLab, clock, Historian# control parametersQmax =100Tsetpoint =50d =0.5# time horizon and time steptfinal =300tstep =1# perform experimentwith TCLab() as a: h = Historian(a) h.initplot(tfinal) Q1 = a.Q1()for t in clock(tfinal, tstep): T1 = a.T1if T1 <= Tsetpoint - d/2: Q1 = Qmaxif T1 >= Tsetpoint + d/2: Q1 =0 a.Q1(Q1) h.update()
Esaminando le risposte a circuito chiuso, è ovvio che il riscaldatore è sovradimensionato ai fini del controllo a 40 gradi C. Prova altri valori per \(Q^{\max}\) per vedere se puoi migliorare le prestazioni a circuito chiuso.
Qual è l’effetto del tempo di campionamento sulle prestazioni del controllo? Cosa succede se si allunga il tempo di campionamento del controller?
In una nuova cella, creare una modifica dello script per includere una modifica nel setpoint da 40 gradi C a 50 gradi C al segno dei 300 secondi. Esegui l’esperimento per almeno 10 minuti per vedere l’effetto completo.
Per un controllo relè con isteresi, provare a tracciare un grafico di \(Q\) in funzione di \(T\) assumendo \(T_{Setpoint} = 50\) e \(h = 3\). Puoi disegnare una funzione unica? Perché no?