Compito di laboratorio: Controllo PID

Parte 1. Controllo manuale

Il primo passo è tentare il controllo completamente manuale dei doppi riscaldatori. Utilizzando l’interfaccia GUI di seguito, connettersi al laboratorio di controllo della temperatura e regolare i riscaldatori Q1 e Q2 per raggiungere temperature stabili di 50°C per T1 e 40°C per T2.

Suggerimento: esiste un’interazione tra i riscaldatori, ovvero una regolazione in Q1 o Q2 influenzerà sia T1 che T2. Quindi questo è un esercizio per soddisfare due vincoli manipolando due variabili.

from tclab.gui import NotebookUI

interface = NotebookUI()
interface.gui

Parte 2. Implementazione di un controller PID

Data una variabile di processo \(PV\) e un setpoint \(SP\), il controllo proporzionale-integrale-derivativo determina il valore di una variabile manipolata MV mediante la regola

\[\begin{align} MV & = \bar{MV} + K_p\left(SP - PV\right) + K_i \int_0^t \left(SP-PV)\right)dt + K_d \frac{d\left(SP-PV\right)}{dt} \end{align}\]

dove \(K_p\), \(K_i\) e \(K_d\) sono rispettivamente i coefficienti proporzionale, integrale e derivativo.

Il codice seguente definisce un oggetto Python che implementa questo algoritmo.

class PID:
    def __init__(self):
        self.Kp = 1
        self.Ki = 100
        self.Kd = 0

        self.e = 0
        self.dedt = 0
        self.eint = 0
        self.mv = 0

    def update(self, setpoint, pv):
        e = setpoint - pv
        self.dedt = self.e - e
        self.eint += e
        self.e = e

        self.mv = self.Kp * self.e + self.Ki * self.eint + self.Kd * self.dedt
        return self.mv

La cella seguente fornisce un’implementazione iniziale del controllo PID per il riscaldatore T1. Modifica questo codice per aggiungere un secondo controller, “pid2”, per il riscaldatore T2. Prova utilizzando il simulatore offline. Quando sei soddisfatto dei risultati, applica il controllo al riscaldatore vero e proprio.

from tclab import setup, clock, Historian, Plotter

TCLab = setup(connected=False, speedup = 20)

pid1 = PID()
pid1.Kp = 2
pid1.Ki = .1
pid1.Kd = 2

with TCLab() as lab:
    h = Historian(lab.sources)
    p = Plotter(h, 800)
    for t in clock(800):
        lab.U1 = pid1.update(50, lab.T1)
        p.update(t)
Simulated TCLab
TCLab Model disconnected successfully.

Parte 3. Regolazione del controller PID

Utilizzando il codice sviluppato sopra, crea una nuova cella di seguito e verifica i seguenti problemi:

  1. Cosa succede quando Ki = 0?
  2. Cosa succede quando Ki = 0,1 e Kd = 3?

Descrivere i vantaggi dell’azione integrale e derivativa.