アンチワインドアップ PI 制御シミュレーター 戻る
制御工学シミュレーター

アンチワインドアップ PI 制御シミュレーター

入力飽和を伴う 1 次プロセスに対し、標準 PI・アンチワインドアップ付き PI・理想 PI の応答を比較。ワインドアップが招くオーバーシュートと、Back-calculation で巻き戻す効果を可視化します。

パラメータ設定
プロセスゲイン K_p
入力上限 u_max
PI 比例ゲイン K_c
目標値ステップ r

固定: T_p = 5 s, T_i = 5 s, u_min = −u_max, K_aw = 1/T_i, dt = 0.05 s, 0〜30 s。

計算結果
標準 PI オーバーシュート
AW PI オーバーシュート
標準 PI 整定時間
AW PI 整定時間
応答比較 — 出力 y(t) と制御入力 u(t)

上段: 出力 y(t)(赤=標準 PI、青=AW PI、緑破線=理想 PI、灰破線=目標値 r)/下段: 制御入力 u(t)(灰水平線=飽和限界 ±u_max)

理論・主要公式

1 次プロセス(時定数 T_p、ゲイン K_p)に対し、PI 制御器の未飽和出力 u_unsat はステップ目標値 r を追従させる:

$$G(s) = \frac{K_p}{T_p\,s + 1}, \qquad u_\text{unsat}(t) = K_c\,e(t) + \frac{K_c}{T_i}\int_0^t e(\tau)\,d\tau$$

実際に印加される値は飽和器を通過:

$$u(t) = \mathrm{clip}\bigl(u_\text{unsat}(t),\,u_\text{min},\,u_\text{max}\bigr)$$

Back-calculation 型アンチワインドアップは飽和差 e_aw = u − u_unsat を積分項に負帰還し、ワインドアップを止める:

$$\dot{I}_\text{aw}(t) = \frac{K_c}{T_i}\,e(t) + K_\text{aw}\bigl(u(t) - u_\text{unsat}(t)\bigr), \qquad K_\text{aw} = \frac{1}{T_i}$$

飽和限界が低いほど標準 PI は積分が暴走しオーバーシュートが拡大しますが、AW PI は理想 PI に近い応答を保ちます。

アンチワインドアップ PI 制御シミュレーターとは

🙋
PI 制御を勉強してるんですけど、「ワインドアップ」って何ですか?スライダーをいじっていると、赤い線(標準 PI)だけ大きく跳ね上がっちゃいますね。
🎓
いいところに気付いた。ざっくり言うと「積分項の暴走」だ。PI 制御では誤差を時間積分して、長期的にズレを潰そうとする。でも実機はアクチュエータに必ず上限がある——バルブは 100% より開かないし、モータ電圧も電源を超えられない。シミュレーターでは u_max = 1.8 で飽和させているね。標準 PI は出力が飽和に張り付いている間も、内部の積分はじわじわ積み上がる。これが「ワインドアップ」だ。
🙋
なるほど。でもオーバーシュートが大きいだけで、最終的に目標値には収まってますよね?
🎓
そう、定常値には収まる。問題は「収まるまでの時間と振幅」だ。たまった積分量をゼロに戻すには、目標値を通り越して逆方向の誤差が必要になる。だから赤線は r を大きく超えて、なかなか戻ってこない。下段の u(t) を見て——飽和に張り付いた後、戻り際でも −u_max まで突っ込んでいるのが分かるはずだ。プロセス制御の現場では、これがバルブの叩き合いや製品の品質ばらつきを生む。
🙋
で、青線の「AW PI」のほうはほとんどオーバーシュートしないですね。何が違うんですか?
🎓
Back-calculation という方法だ。コントローラが計算した値 u_unsat と、飽和器を通った後の実際の値 u を比べて、その差 e_aw = u − u_unsat にゲイン K_aw を掛けて積分項に負帰還する。要は「飽和で削られた分だけ積分を巻き戻す」んだ。シミュレーターでは K_aw = 1/T_i にしている。実務でもこの値が標準的だよ。
🙋
緑の破線「理想 PI」は飽和がなければの応答ですね。AW PI はそれにかなり近づきますね。
🎓
そこが Back-calculation の良さだ。飽和を取り除けない以上、理想 PI と完全には一致しないけど、近い形に整えてくれる。試しに「入力上限 u_max」を 3 以上にしてみて——3 種類の応答がほぼ重なるはずだ。逆に u_max を 1.0 とかに絞ると標準 PI と AW PI の差が劇的に広がる。「飽和が深いほどアンチワインドアップの効果が大きい」のがよく分かる実験になるよ。

よくある質問

既定値では K_p·u_max = 2·1.8 = 3.6 と目標値 r = 3.0 がぎりぎり追従可能な関係にあり、立ち上がりの大半で出力が飽和に張り付きます。この間に積分項が積み上がるためワインドアップが顕著に出ます。u_max を 2.0 以上にすると飽和が浅くなり差は小さく、逆に 1.5 程度まで絞ると標準 PI は到達自体に時間がかかります。
代表的なのは Clamping(条件付き積分)と Tracking です。Clamping は飽和中に積分の更新を凍結するシンプルな方法で実装が容易ですが、収束がやや遅くなります。Tracking は本シミュレーターと同じ Back-calculation の一族で、K_aw を T_i で正規化することで多くの実機 DCS で採用されています。MPC(モデル予測制御)では入力制約を直接最適化に組み込むため、原理的にワインドアップが起きません。
経験則として K_aw = 1/T_i 程度がよく使われ、本シミュレーターでもこの値を使っています。K_aw を大きくすると巻き戻しが速くなりますが、過剰だとアンダーシュートやリンギングを招きます。微分項を含む PID では K_aw = √(K_d/T_i) などの推奨式もあります。最終的には実機やシミュレーションでステップ応答を見ながら調整するのが実務的です。
はい、サーボモータの電流制御、ドローンの姿勢制御、自動車のクルーズコントロール、ロケットエンジンの推力制御など、操作量に制約のある制御ループ全般で標準的に実装されます。特にスタートアップ時や大きな目標値変更のたびに飽和が起こりやすいシステムでは、アンチワインドアップなしでは振動や行き過ぎで安全機構が作動してしまうため、設計上の必須機能となっています。

実世界での応用

プロセス産業の温度・流量制御:化学プラントや製油所では、バルブ開度(0〜100%)やヒータ出力(0〜定格)など、必ず物理的な飽和限界を持つアクチュエータで PID 制御が行われます。スタートアップ時や生産品種の切替時には大きな目標値変更が発生し、ワインドアップが起きやすい場面です。DCS(分散制御システム)の標準 PID ブロックには Back-calculation 型のアンチワインドアップが標準実装されており、エンジニアは K_aw を含むパラメータをチューニングします。

サーボモータと電動アクチュエータ:ロボットアームや工作機械の位置決め制御では、モータ駆動電流に上下限があります。大きな位置指令ステップを与えると電流が飽和に張り付き、積分ワインドアップが発生します。アンチワインドアップを実装しないと、目標位置に到達後も慣性で行き過ぎて長時間振動し、加工精度や生産タクトに悪影響を与えます。サーボドライバの内部 PI 電流ループは、ほぼ全てアンチワインドアップ付きで設計されています。

航空機・ドローンの姿勢制御:舵面の最大偏角やプロペラの最大推力には物理的な限界があり、激しい姿勢変更や強い外乱応答で容易に飽和します。ワインドアップが起きると、姿勢が目標値に戻ったあとも積分項の暴走で過剰補正が続き、操縦安定性を損ねます。フライトコントローラの PID 実装では、Back-calculation や Clamping によるアンチワインドアップが安全要件として組み込まれています。

自動車の電子制御:クルーズコントロールのスロットル制御、トラクションコントロールのブレーキ油圧、ハイブリッド車のモータトルク配分など、自動車の制御 ECU には多数の PI/PID ループが存在します。これらは全て物理的な飽和限界を持つアクチュエータを駆動するため、アンチワインドアップは標準的な実装要件です。

よくある誤解と注意点

最も多い誤解は、「アンチワインドアップを入れれば飽和の問題は全て解決する」と考えてしまうことです。Back-calculation はあくまで積分項の巻き上げを防ぐだけで、システム本来の応答時間や帯域を改善するわけではありません。例えば既定値で u_max = 1.8 のとき、AW PI でも目標値到達まで 10 秒前後かかります。これは「目標値 r = 3 を達成するためには u がしばらく 1.8 で動き続けないといけない」という物理的制約から来るもので、どんな制御理論を使っても改善できません。本質的に応答を速くしたいなら、アクチュエータの定格を上げるか、目標値の変化レートを制限するかが必要です。

次に多いのが、「ワインドアップは小さい変動なら起きないから無視できる」と思い込むことです。実際には、長時間の定常外乱でも徐々に積分は溜まります。外乱が突然解消したとき、たまった積分が放出されて大きなオーバーシュートを生むことがあります。シミュレーターで小さい r ステップでも u_max を 0.6 などに絞れば、控えめなオーバーシュートが標準 PI でも観察できます。「いつ飽和するか分からない」のがプロセス制御の現実であり、アンチワインドアップは保険として常に入れておくのが鉄則です。

最後に、「K_aw を大きくすればするほど効く」と勘違いする点に注意してください。K_aw を過大にすると、飽和を抜けた瞬間に積分が急激に巻き戻され、アンダーシュートやリンギング、最悪は離散時間系で不安定化することがあります。本シミュレーターの実装は連続時間の標準値 K_aw = 1/T_i ですが、サンプリング周期が長い離散制御では K_aw を小さめにする必要があります。実機チューニングでは、ステップ応答を取りながら K_aw を 0.5/T_i から 2/T_i の範囲で動かして、オーバーシュートと整定時間のバランスを取るのが標準的なワークフローです。