Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

Un piccolo modello eseguibile semplifica l'analisi delle variazioni di guadagno del PID e della saturazione dell'attuatore. Questi risultati sono stati calcolati il 7 settembre 2026 con Python 3.12.3. Si tratta di simulazioni numeriche, non di misurazioni o di un modello di motore identificato.

Modello e condizioni

L'impianto è \ddot y+2\dot y+y=u. L'uscita y e il controllo u sono normalizzati; il tempo è espresso in secondi. Uscita iniziale, velocità e integrale sono pari a zero. Il valore target è 1 a partire da tempo zero, poi 0,4 a partire da 6 secondi. Il passo è di 0,005 secondi nell'intervallo 0-12 secondi, per un totale di 2.401 campioni per caso.

Il controllore è u=K_pe+K_iI-K_d\dot y_m, con e=r-y_m. In questo caso, y_m è l'uscita misurata. La derivata agisce su di essa anziché sul valore target. I guadagni di base sono K_p=3 , K_i=2 , K_d=1 . L'integrazione e la derivazione utilizzano esplicitamente il passo temporale; il sistema utilizza l'integrazione di Eulero semi-implicita. Per i principi, consultare Fondamenti del PID.

Esegui il codice

Salva pid_lab.py in una directory di lavoro vuota ed esegui il seguente codice. Richiede solo la libreria standard di Python e sovrascrive i file di risultato con lo stesso nome.

python3 --version
python3 pid_lab.py

Produce il CSV e il riepilogo JSON. Per rigenerare la figura, salvare ed eseguire plot_pid.py nella stessa directory; la visualizzazione è stata verificata con matplotlib 3.6.3. Le colonne del file CSV sono scenario, tempo, target, output, controllo e integrale.

Confronto tra ritardo e saturazione

Diagram 1 · Use the button to switch views
Simulazione di output e controllo PID con ritardo di misurazione di 0,4 secondi, limite di controllo di 0,8 e integrazione condizionale

Il grafico superiore mostra l'output; il grafico inferiore mostra il controllo. La linea nera rappresenta il target. Le etichette degli scenari corrispondono al file CSV e aw indica l'anti-windup.

Scenario Variazione Output a 12 s Errore assoluto integrato
nominale Nessun ritardo, controllo limitato a ±3 0,4008 1,7913
ritardo_0,4s Misurazione ritardata di 0,4 s 0,3883 1,8860
limite_0,8_aw Controllo ±0,8, integrazione condizionata 0,4003 3,3424
limite_0,8_no_aw Controllo ±0,8, integrazione illimitata 0,6602 5,0996

L'errore assoluto integrato utilizza l'integrazione rettangolare sinistra su 0-12 secondi. Le sue unità sono i secondi di output normalizzati, non l'errore di posizione fisica in metri. Ispezionare l'oscillazione e lo sforzo di controllo, nonché il campione finale.

L'anti-windup non aumenta la capacità dell'attuatore

All'equilibrio, questo impianto ha y=u, quindi un limite di controllo di 0,8 non può raggiungere un obiettivo di 1. Se l'errore continua ad accumularsi, l'integrale può richiedere un input eccessivo anche dopo che l'obiettivo scende a 0,4. Il codice rifiuta l'integrazione che porterebbe ulteriormente alla saturazione, consentendo invece l'integrazione che ne favorisce l'uscita.

Questo modifica lo stato interno del controllore, non la capacità del motore o dell'alimentatore. Rendere l'obiettivo raggiungibile è una decisione separata.

Modificare un guadagno alla volta

from pid_lab import simulate
for kp in (1., 3., 6.):
    rows = simulate("gain", kp=kp)
    print(kp, max(row[3] for row in rows if row[1] < 6))

Confrontare il picco durante l'intervallo target iniziale. Quindi variare solo ki e poi solo kd, registrando anche lo sforzo di controllo massimo. Guadagni maggiori non sono universalmente migliori; ripetere i confronti con ritardo e saturazione.

Limiti e verifiche successive

Il modello esclude rumore di misura, attrito, quantizzazione, jitter di comunicazione e filtraggio derivativo. Dimezzare il passo temporale: se la risposta cambia in modo sostanziale, valutare prima l'approssimazione numerica. Non copiare questi guadagni nell'hardware senza aver identificato l'impianto e aver adattato unità e scale temporali. Continua su MPC per studiare i vincoli all'interno del problema di controllo.

Esegui lo stesso calcolo in locale

Estrai il file ZIP completo del codice sorgente eseguibile, oppure salva il punto di ingresso dell'esperimento, i kernel generati e il codice sorgente PID originale in una cartella. Il PID utilizza la libreria standard di Python; Kalman e ICP richiedono NumPy. I comandi originali per la generazione della figura rimangono disponibili.

python3 experiment.py pid --parameters '{"kp":3,"ki":2,"kd":1,"delay":0,"limit":3,"antiwindup":true}' > result.json

Imposta il ritardo a 0,4 o il limite a 0,8 e confronta l'IAE e l'output finale con e senza anti-windup.

Code, data and reproduction

The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.

Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)

Extract the ZIP into a new directory, then run:

python3 reproduce.py --experiment pid

This Lab compares 4 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.

Related reading

Study control with constraintsIntroduzione all'ingegneria del controllo: controllo predittivo basato su modello - Agire entro i vincoli.Explore another aspect of this fieldLab MPC — ririsolvi una sequenza di curvatura entro un orizzonte e vincoli di sterzataExplore another aspect of this fieldLab di confronto tra inseguitori di percorso — esegui PP, APP, RPP, Stanley e MPC nelle stesse condizioni