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.
Model yang dapat dieksekusi berukuran kecil memudahkan pemeriksaan perubahan penguatan PID dan saturasi aktuator. Hasil ini dihitung pada tanggal 7 September 2026 dengan Python 3.12.3. Ini adalah simulasi numerik, bukan pengukuran atau model motor yang teridentifikasi.
Model dan kondisi
Plant adalah \ddot y+2\dot y+y=u. Output y dan kontrol u dinormalisasi; waktu dalam detik. Output awal, kecepatan, dan integral adalah nol. Target adalah 1 dari waktu nol, kemudian 0,4 dari 6 detik. Langkahnya adalah 0,005 detik selama 0–12 detik, memberikan 2.401 sampel per kasus.
Pengontrolnya adalah u=K_pe+K_iI-K_d\dot y_m, dengan e=r-y_m. Di sini y_m adalah output yang diukur. Turunan bekerja padanya, bukan pada target. Gain dasar adalah K_p=3 , K_i=2 , K_d=1 . Integrasi dan diferensiasi secara eksplisit menggunakan langkah waktu; sistem menggunakan integrasi Euler semi-implisit. Lihat Dasar-dasar PID untuk prinsip-prinsipnya.
Jalankan kode
Simpan pid_lab.py di direktori kerja kosong dan jalankan yang berikut ini. Ini hanya membutuhkan pustaka standar Python dan menimpa file hasil dengan nama yang sama.
python3 --version
python3 pid_lab.py
Ini menghasilkan CSV dan ringkasan JSON. Untuk menghasilkan ulang gambar, simpan dan jalankan plot_pid.py di direktori yang sama; Plotting diperiksa dengan matplotlib 3.6.3. Kolom CSV adalah skenario, waktu, target, output, kontrol, dan integral.
Membandingkan penundaan dan saturasi
Plot atas menunjukkan output; plot bawah menunjukkan kontrol. Garis hitam adalah target. Label skenario sesuai dengan CSV, dan aw berarti anti-windup.
| Skenario | Perubahan | Output pada 12 s | Kesalahan absolut terintegrasi |
|---|---|---|---|
| nominal | Tanpa penundaan, kontrol dibatasi hingga ±3 | 0,4008 | 1,7913 |
| delay_0,4s | Pengukuran ditunda 0,4 s | 0.3883 | 1.8860 |
| limit_0.8_aw | Kontrol ±0.8, integrasi bersyarat | 0.4003 | 3.3424 |
| limit_0.8_no_aw | Kontrol ±0.8, integrasi tak terbatas | 0.6602 | 5.0996 |
Kesalahan absolut terintegrasi menggunakan integrasi persegi panjang kiri selama 0–12 detik. Satuannya adalah output yang dinormalisasi dikalikan detik, bukan kesalahan posisi fisik dalam meter. Periksa osilasi dan upaya kontrol serta sampel akhir.
Anti-windup tidak meningkatkan kemampuan aktuator
Pada kesetimbangan, sistem ini memiliki y=u, sehingga batas kontrol 0.8 tidak dapat mencapai target 1. Jika kesalahan terus terakumulasi, integral dapat membutuhkan input yang berlebihan bahkan setelah target turun menjadi 0.4. Kode tersebut menolak integrasi yang akan mendorong lebih jauh ke saturasi, sementara mengizinkan integrasi yang membantu keluar dari saturasi.
Ini mengubah keadaan internal pengontrol, bukan motor atau kapasitas suplai. Membuat target dapat dicapai adalah keputusan terpisah.
Ubah satu gain pada satu waktu
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))
Bandingkan puncak selama interval target awal. Kemudian variasikan hanya ki, dan kemudian hanya kd, juga catat upaya kontrol maksimum. Gain yang lebih besar tidak selalu lebih baik; ulangi perbandingan dengan penundaan dan saturasi.
Batasan dan pemeriksaan selanjutnya
Model ini tidak termasuk noise pengukuran, gesekan, kuantisasi, jitter komunikasi, dan penyaringan turunan. Bagi dua langkah waktu: jika respons berubah secara substansial, selidiki aproksimasi numerik terlebih dahulu. Jangan menyalin gain ini ke perangkat keras tanpa mengidentifikasi plant dan mencocokkan satuan dan skala waktu. Lanjutkan ke MPC untuk mempelajari batasan dalam masalah kontrol.
Jalankan perhitungan yang sama secara lokal
Ekstrak ZIP sumber lengkap yang dapat dijalankan, atau simpan titik masuk eksperimen, kernel yang dihasilkan, dan sumber PID asli dalam satu folder. PID menggunakan pustaka standar Python; Kalman dan ICP membutuhkan NumPy. Perintah pembuatan gambar asli tetap tersedia.
python3 experiment.py pid --parameters '{"kp":3,"ki":2,"kd":1,"delay":0,"limit":3,"antiwindup":true}' > result.json
Atur penundaan ke 0,4 atau batas ke 0,8 dan bandingkan IAE dan output akhir dengan dan tanpa 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.
Komentar
Silakan masuk terlebih dahulu.
Belum ada data.