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

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

Diagram 1 · Use the button to switch views
Simulasi output dan kontrol PID dengan penundaan pengukuran 0,4 detik, batas kontrol 0,8, dan integrasi bersyarat

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.

Related reading

Study control with constraintsPengantar Teknik Kontrol: Kontrol Prediktif Model — Bertindak dalam BatasanExplore another aspect of this fieldLab MPC — selesaikan ulang urutan kelengkungan dalam horizon dan batas kemudiExplore another aspect of this fieldLab perbandingan pelacakan jalur — jalankan PP, APP, RPP, Stanley, dan MPC dalam kondisi yang sama