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

Küçük bir çalıştırılabilir model, PID kazanç değişikliklerini ve aktüatör doygunluğunu incelemeyi kolaylaştırır. Bu sonuçlar 7 Eylül 2026 tarihinde Python 3.12.3 ile hesaplanmıştır. Bunlar sayısal simülasyonlardır, ölçümler veya tanımlanmış bir motor modeli değildir.

Model ve koşullar

Tesis \ddot y+2\dot y+y=u'dır. Çıkış y ve kontrol u normalize edilmiştir; zaman saniye cinsindendir. Başlangıç çıkışı, hız ve integral sıfırdır. Hedef, sıfır zamandan itibaren 1, ardından 6 saniyeden itibaren 0,4'tür. Adım, 0-12 saniye boyunca 0,005 saniyedir ve her durum için 2401 örnek verir.

Kontrolör u=K_pe+K_iI-K_d\dot y_m'tür, e=r-y_m ile birlikte. Burada y_m ölçülen çıkıştır. Türev, hedef yerine buna etki eder. Temel kazançlar K_p=3, K_i=2, K_d=1'dir. Entegrasyon ve diferansiyasyon açıkça zaman adımını kullanır; sistem yarı-örtük Euler entegrasyonunu kullanır. Prensipler için PID temelleri bölümüne bakın.

Kodu Çalıştırın

pid_lab.py dosyasını boş bir çalışma dizinine kaydedin ve aşağıdakileri çalıştırın. Yalnızca Python standart kütüphanesini gerektirir ve aynı isimli sonuç dosyalarının üzerine yazar.

python3 --version
python3 pid_lab.py

CSV ve özet JSON dosyalarını üretir. Şekli yeniden oluşturmak için, plot_pid.py dosyasını aynı dizine kaydedin ve çalıştırın; Grafik çizimi matplotlib 3.6.3 ile kontrol edildi. CSV sütunları senaryo, zaman, hedef, çıktı, kontrol ve integraldir.

Gecikme ve doygunluğu karşılaştırma

Diagram 1 · Use the button to switch views
0,4 saniyelik ölçüm gecikmesi, 0,8 kontrol limiti ve koşullu entegrasyon ile simüle edilmiş PID çıktısı ve kontrolü

Üstteki grafik çıktıyı; alttaki grafik kontrolü göstermektedir. Siyah çizgi hedefi göstermektedir. Senaryo etiketleri CSV ile eşleşir ve aw anti-windup anlamına gelir.

Senaryo Değişim 12 s'deki çıktı Entegre edilmiş mutlak hata
nominal Gecikme yok, kontrol ±3 ile sınırlı 0,4008 1,7913
delay_0,4s Ölçüm 0,4 s gecikmeli 0,3883 1,8860
limit_0.8_aw Kontrol ±0.8, koşullu entegrasyon 0.4003 3.3424
limit_0.8_no_aw Kontrol ±0.8, sınırsız entegrasyon 0.6602 5.0996

Entegre edilmiş mutlak hata, 0-12 saniye aralığında sol dikdörtgen entegrasyonu kullanır. Birimleri, metre cinsinden fiziksel konum hatası değil, normalize edilmiş çıktı çarpı saniyedir. Salınımı ve kontrol çabasını ve ayrıca son örneği inceleyin.

Anti-windup aktüatör kapasitesini artırmaz

Denge durumunda bu tesis y=u'ya sahiptir, bu nedenle 0.8'lik bir kontrol limiti 1 hedefine ulaşamaz. Hata birikmeye devam ederse, hedef 0.4'e düştükten sonra bile integral aşırı giriş talep edebilir. Kod, doygunluğa daha fazla yol açacak entegrasyonu reddederken, doygunluktan çıkmaya yardımcı olan entegrasyona izin verir.

Bu, kontrolörün iç durumunu değiştirir, motoru veya besleme kapasitesini değil. Hedefin ulaşılabilir olması ayrı bir karardır.

Kazançları tek tek değiştirin

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))

İlk hedef aralığındaki tepe değerini karşılaştırın. Ardından sadece ki'i ve daha sonra sadece kd'u değiştirin ve maksimum kontrol çabasını da kaydedin. Daha büyük kazançlar her zaman daha iyi değildir; gecikme ve doygunluk ile karşılaştırmaları tekrarlayın.

Sınırlar ve sonraki kontroller

Model, ölçüm gürültüsünü, sürtünmeyi, nicelemeyi, iletişim titreşimini ve türev filtrelemeyi dışlar. Zaman adımını yarıya indirin: yanıt önemli ölçüde değişirse, önce sayısal yaklaşımı araştırın. Tesisi tanımlamadan ve birimleri ve zaman ölçeklerini eşleştirmeden bu kazançları donanıma kopyalamayın. Kontrol problemi içindeki kısıtlamaları incelemek için MPC'ye devam edin.

Aynı hesaplamayı yerel olarak çalıştırın

Çalıştırılabilir kaynak ZIP dosyasını çıkarın veya deney giriş noktasını, oluşturulan çekirdekleri ve orijinal PID kaynağını tek bir klasöre kaydedin. PID, Python standart kütüphanesini kullanır; Kalman ve ICP, NumPy gerektirir. Orijinal şekil oluşturma komutları kullanılabilir durumda kalır.

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

Gecikmeyi 0,4'e veya limiti 0,8'e ayarlayın ve IAE ile son çıktıyı anti-windup ile ve anti-windup olmadan karşılaştırın.

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 constraintsKontrol Mühendisliği Temel Bilgileri: Model Tabanlı Öngörücü Kontrol — Kısıtlamalar İçinde Hareket EtmeExplore another aspect of this fieldMPC Laboratuvarı — bir ufuk ve direksiyon sınırları içinde eğrilik dizisini yeniden çözmeExplore another aspect of this fieldYol takibi karşılaştırma Laboratuvarı — PP, APP, RPP, Stanley ve MPC'yi aynı koşullar altında çalıştırın