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.
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
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.
Commenti
Accedi per continuare.
Nessun dato disponibile.