JP / EN
Tools / Control Engineering

PID Playground

PID定数を動かし、外乱・ノイズ・A/B比較・カスケード制御を含む応答をグラフで確かめられます。

Controls

PIDと制御対象を設定

PID設定

式の形式

標準形:スライダーは Ti 0〜50秒、Td 0〜10秒です。数値欄では200秒、100秒まで入力できます。Ti=0は積分動作OFFとして扱います。

目標値と1次遅れ系

制御対象G(s) = K / (T s + 1)

Disturbance

入力外乱を加える

制御対象へ入る直前に、ステップ状の負荷外乱 \(d(t)\) を加えます。負の値では制御量が一時的に低下し、PIDが元の目標値へ戻そうとします。

Actuator Limits

操作量制限とアンチワインドアップ

制限前の要求操作量と、上下限で制限された実操作量を比較します。アンチワインドアップは、飽和をさらに強める方向への積分だけを停止します。

Measurement

測定ノイズと微分フィルタ

ノイズはセンサー測定値へ加わります。微分フィルタの時定数を大きくすると操作量は滑らかになりますが、D動作の反応は遅くなります。

Cascade Control

内側PIDループを追加する

現在のPIDを外側ループとして使い、その出力を内側PIDループの目標値にします。Td₂=0ではPIとして動作します。内側ループは外側ループより速く調整するのが基本です。

A / B Comparison

設定を保存して比較する

設定Aはまだ保存されていません。

値を変更すると、その場で再シミュレーションします。極端な組み合わせで計算が不安定になる場合は、安全のため結果の更新を停止します。

Block Diagram

PID制御のブロック線図

PIDフィードバック制御のブロック線図 測定値と目標値の差をPIDコントローラーへ入力し、外乱を加えた操作量を制御対象へ与え、必要に応じて測定ノイズを加えて負帰還する構成 目標値r(t) / SP +− e(t) PIDC(s)D FILTER ON u_c(t) 操作量制限satAW ON u_a(t) ++ 外乱 d(t) 制御対象G(s) 制御量y(t) / PV ++測定ノイズ n(t)測定値 yₘ(t) の負帰還

PIDが要求する操作量を \(u_c(t)\)、実際に制御対象へ送る操作量を \(u_a(t)\) とします。測定ノイズを有効にすると、真の制御量 \(y(t)\) に \(n(t)\) を加えた測定値 \(y_m(t)\) が負帰還されます。

Response

シミュレーション結果

立ち上がり時間
10% → 90%
オーバーシュート
整定時間
±2%
定常偏差
終了時
目標値 SP 現在の制御量
PID応答グラフ目標値、真の制御量、ノイズを含む測定値の時間応答
現在の実操作量
操作量と外乱のグラフ操作量、微分フィルタなしの比較値、上下限、入力外乱
Guide

P・I・Dの働き

P

比例

現在の偏差に比例して操作量を増減します。大きくすると応答は速くなりますが、大きすぎると振動やオーバーシュートが増えます。

I

積分

偏差を時間とともに積み重ねて補正します。定常偏差をなくす効果がありますが、強すぎるとオーバーシュートや振動が増えます。

D

微分

偏差の変化速度を見て急激な変化を抑えます。オーバーシュートを抑えやすい一方、実機ではノイズの影響に注意が必要です。

Equations

PID制御の式と変数

PID制御では、目標値とセンサー測定値の差を「偏差」として扱います。

1. 偏差の定義

\[ e(t)=r(t)-y_m(t) \]

2a. 標準形(理想形)

選択中
\[ u_c(t)=K_p\left[ e(t)+\frac{1}{T_i}\int_{0}^{t}e(\tau)\,d\tau+ T_d\frac{de(t)}{dt} \right] \]

\(K_p\) がP・I・D全体に掛かります。\(T_i\) と \(T_d\) は時間の単位で設定します。このツールでは \(T_i=0\) を積分動作OFFとして扱います。

2b. 並列形

選択中
\[ u_c(t)= \underbrace{K_p e(t)}_{\text{比例項 P}}+ \underbrace{K_i\int_{0}^{t}e(\tau)\,d\tau}_{\text{積分項 I}}+ \underbrace{K_d\frac{de(t)}{dt}}_{\text{微分項 D}} \]

\(K_p\)、\(K_i\)、\(K_d\) を独立した係数として設定します。標準形とは \(K_i=K_p/T_i\)、\(K_d=K_pT_d\) の関係にあります。

3. このツールの1次遅れ系

伝達関数\[ G(s)=\frac{K}{Ts+1},\quad Y(s)=G(s)\{U_a(s)+D(s)\} \]
時間領域\[ T\frac{dy(t)}{dt}+y(t)=K\{u_a(t)+d(t)\} \]

上下限を適用した実操作量 \(u_a(t)\) と入力外乱 \(d(t)\) の和を制御対象へ入力し、制御量 \(y(t)\) の時間変化を計算します。

\[ d(t)= \begin{cases} 0 & (t\lt t_{\mathrm{dist}})\\ d_0 & (t\ge t_{\mathrm{dist}}) \end{cases} \]

4. 操作量制限とアンチワインドアップ

\[ u_a(t)=\operatorname{clip}\!\left(u_c(t),u_{\min},u_{\max}\right) \]

操作量制限を有効にすると、PIDの要求操作量 \(u_c(t)\) を上下限内に収めた \(u_a(t)\) を制御対象へ送ります。

\[ \frac{dI}{dt}= \begin{cases} 0 & (u_c\gt u_{\max}\land e\gt 0)\ \text{または}\ (u_c\lt u_{\min}\land e\lt 0)\\ e(t) & \text{それ以外} \end{cases} \]

アンチワインドアップONでは、操作量をさらに飽和させる方向の積分だけを停止します。偏差が飽和から戻す方向になれば積分を再開します。

5. 測定ノイズと微分フィルタ

センサー測定値\[y_m(t)=y(t)+n(t)\]
1次微分フィルタ\[D_f(s)=\frac{s}{T_f s+1}\,Y_m(s)\]

微分項は測定値の高周波変動を強く拾います。このツールでは、フィルタON時に \(D_f\) を微分項へ使います。\(T_f\) を大きくするとノイズを抑えやすくなりますが、急な変化への反応も遅くなります。

6. カスケード制御

外側ループ\[SP_2(t)=C_1(s)\{r(t)-y_m(t)\}\]
内側PIDループ\[u_c(t)=K_{p2}\left[e_2(t)+\frac{1}{T_{i2}}\int e_2(t)dt-T_{d2}\frac{dPV_2(t)}{dt}\right]\]

外側PIDの出力を内側ループの目標値 \(SP_2\) とし、\(e_2=SP_2-PV_2\) を内側PIDで補正します。内側D項は \(PV_2\) の変化に掛け、変化する \(SP_2\) による微分キックを避けています。\(T_{d2}=0\) では内側はPIとして動作します。

記号・意味・単位

記号意味単位・次元
\(r(t)\)目標値(SP)\([\mathrm{Q}]\)
\(y(t)\)制御量(PV)\([\mathrm{Q}]\)
\(y_m(t)\)ノイズを含むセンサー測定値\([\mathrm{Q}]\)
\(n(t)\)測定ノイズ\([\mathrm{Q}]\)
\(e(t)\)偏差\([\mathrm{Q}]\)
\(u_c(t)\)PIDが要求する操作量\([\mathrm{M}]\)
\(u_a(t)\)上下限適用後の実操作量(MV)\([\mathrm{M}]\)
\(u_{\min},u_{\max}\)操作量の下限と上限\([\mathrm{M}]\)
\(I(t)\)偏差の積分状態\([\mathrm{Q}\cdot\mathrm{s}]\)
\(d(t),d_0\)入力外乱と設定した外乱の大きさ\([\mathrm{M}]\)
\(t_{\mathrm{dist}}\)外乱の発生時刻\([\mathrm{s}]\)
\(t,\tau\)時間\([\mathrm{s}]\)
\(K_p\)比例ゲイン\([\mathrm{M}/\mathrm{Q}]\)
\(T_i\)標準形の積分時間\([\mathrm{s}]\)
\(T_d\)標準形の微分時間\([\mathrm{s}]\)
\(T_f\)微分フィルタの時定数\([\mathrm{s}]\)
\(SP_2,PV_2,e_2\)内側ループの目標値、制御量、偏差任意単位
\(K_{p2},T_{i2},T_{d2}\)内側PIDの比例ゲイン、積分時間、微分時間ゲイン、\([\mathrm{s}]\)、\([\mathrm{s}]\)
\(K_i\)並列形の積分ゲイン\([\mathrm{M}/(\mathrm{Q}\cdot\mathrm{s})]\)
\(K_d\)並列形の微分ゲイン\([\mathrm{M}\cdot\mathrm{s}/\mathrm{Q}]\)
\(K\)制御対象の定常ゲイン\([\mathrm{Q}/\mathrm{M}]\)
\(T\)制御対象の時定数\([\mathrm{s}]\)
\(s\)ラプラス変数\([\mathrm{s}^{-1}]\)

単位の読み方:\(\mathrm{Q}\) は制御量の単位、\(\mathrm{M}\) は操作量の単位を表します。例えば温度制御で \(y\) が温度[°C]、\(u_a\) がヒーター出力[%]なら、\(K_p\) は[%/°C]、\(K_i\) は[%/(°C·s)]、\(K_d\) は[%·s/°C]です。このシミュレーターの縦軸は、特定の物理量を指定しない任意単位として扱っています。

一定の目標値を時刻0で与え、ブラウザ内で数値シミュレーションしています。ノイズは毎回同じ波形を使うため、設定変更前後を同じ条件で比較できます。