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.
Ein kleines, ausführbares Modell erleichtert die Untersuchung von PID-Verstärkungsänderungen und Aktorsättigung. Die Ergebnisse wurden am 7. September 2026 mit Python 3.12.3 berechnet. Es handelt sich um numerische Simulationen, nicht um Messungen oder ein identifiziertes Motormodell.
Modell und Bedingungen
Die Regelstrecke ist \ddot y+2\dot y+y=u. Der Ausgang y und der Regler u sind normiert; die Zeitangabe erfolgt in Sekunden. Anfangsausgang, -geschwindigkeit und -integral sind null. Der Sollwert beträgt 1 ab dem Zeitpunkt null und anschließend 0,4 ab 6 Sekunden. Die Schrittweite beträgt 0,005 Sekunden im Bereich von 0 bis 12 Sekunden, was 2401 Messwerte pro Fall ergibt.
Der Regler ist u=K_pe+K_iI-K_d\dot y_m mit e=r-y_m. Hierbei ist y_m der gemessene Ausgang. Die Ableitung wirkt auf diesen, nicht auf den Sollwert. Die Basisverstärkungen sind K_p=3, K_i=2 und K_d=1. Integration und Differentiation verwenden explizit den Zeitschritt; die Anlage verwendet eine semi-implizite Euler-Integration. Die Prinzipien sind in PID-Grundlagen beschrieben.
Code ausführen
Speichern Sie pid_lab.py in einem leeren Arbeitsverzeichnis und führen Sie den folgenden Code aus. Er benötigt lediglich die Python-Standardbibliothek und überschreibt Ergebnisdateien mit demselben Namen.
python3 --version
python3 pid_lab.py
Es werden die CSV und die Zusammenfassung im JSON-Format erzeugt. Um die Abbildung neu zu generieren, speichern Sie die Datei plot_pid.py im selben Verzeichnis und führen Sie sie aus. Die Darstellung wurde mit Matplotlib 3.6.3 überprüft. Die CSV-Spalten enthalten Szenario, Zeit, Zielwert, Ausgabe, Regelung und Integral.
Vergleich von Verzögerung und Sättigung
Die obere Grafik zeigt die Ausgabe, die untere die Regelung. Die schwarze Linie stellt den Zielwert dar. Die Szenariobezeichnungen entsprechen der CSV-Datei, und aw bedeutet Anti-Windup.
| Szenario | Änderung | Ausgabe nach 12 s | Integrierter absoluter Fehler |
|---|---|---|---|
| nominal | Keine Verzögerung, Regelung auf ±3 begrenzt | 0,4008 | 1,7913 |
| delay_0,4s | Messung um 0,4 s verzögert | 0,3883 | 1,8860 |
| limit_0.8_aw | Regelung ±0,8, bedingte Integration | 0,4003 | 3,3424 |
| limit_0.8_no_aw | Regelung ±0,8, uneingeschränkte Integration | 0,6602 | 5,0996 |
Der integrierte absolute Fehler wird mittels Links-Rechteck-Integration über 0–12 Sekunden berechnet. Die Einheit ist die normalisierte Ausgabe multipliziert mit Sekunden, nicht der physikalische Positionsfehler in Metern. Überprüfen Sie Schwingungen, Stellkraft und den letzten Messwert.
Anti-Windup erhöht die Aktorleistung nicht
Im Gleichgewichtszustand hat diese Anlage y=u, daher kann ein Regelgrenzwert von 0,8 den Zielwert von 1 nicht erreichen. Wenn sich der Fehler weiter akkumuliert, kann das Integral selbst nach dem Absinken des Zielwerts auf 0,4 einen übermäßigen Eingangswert fordern. Der Code verwirft Integrationen, die zu einer weiteren Sättigung führen würden, und erlaubt Integrationen, die helfen, diese zu vermeiden.
Dies ändert den internen Zustand des Reglers, nicht aber den Motor oder die Versorgungskapazität. Die Erreichbarkeit des Zielwerts ist eine separate Entscheidung.
Ändern Sie jeweils eine Verstärkung
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))
Vergleichen Sie den Spitzenwert während des anfänglichen Zielintervalls. Variieren Sie dann nur ki und anschließend nur kd und erfassen Sie dabei auch den maximalen Stellaufwand. Größere Verstärkungen sind nicht generell besser; wiederholen Sie die Vergleiche mit Verzögerung und Sättigung.
Grenzen und weitere Prüfungen
Das Modell schließt Messrauschen, Reibung, Quantisierung, Kommunikationsjitter und Ableitungsfilterung aus. Halbieren Sie den Zeitschritt: Wenn sich die Antwort wesentlich ändert, untersuchen Sie zunächst eine numerische Approximation. Übertragen Sie diese Verstärkungen nicht in Hardware, ohne die Anlage zu identifizieren und die Einheiten und Zeitskalen anzupassen. Fahren Sie mit MPC fort, um die Beschränkungen innerhalb des Regelungsproblems zu untersuchen.
Führen Sie die gleiche Berechnung lokal aus
Extrahieren Sie die vollständige ausführbare Quellcode-ZIP-Datei oder speichern Sie den Einstiegspunkt des Experiments, die generierten Kernel und den ursprünglichen PID-Quellcode in einem Ordner. PID verwendet die Python-Standardbibliothek; Kalman und ICP benötigen NumPy. Die ursprünglichen Befehle zur Grafikerstellung bleiben verfügbar.
python3 experiment.py pid --parameters '{"kp":3,"ki":2,"kd":1,"delay":0,"limit":3,"antiwindup":true}' > result.json
Setzen Sie die Verzögerung auf 0,4 oder den Grenzwert auf 0,8 und vergleichen Sie IAE und die endgültige Ausgabe mit und ohne 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.
Kommentare
Bitte zuerst anmelden.
Noch keine Einträge.