カスケード制御シミュレーター 戻る
制御工学

カスケード制御シミュレーター

内側ループ $G_i(s) = \frac{K_i}{\tau_i s+1}$ と外側ループを組み合わせた2重PID制御のステップ応答を可視化。単ループとの差を体感しよう。

内側ループ(Inner Loop)
Kp(内)
Ki(内)
Kd(内)
時定数 τᵢ (s)
s
外側ループ(Outer Loop)
Kp(外)
Ki(外)
Kd(外)
時定数 τ₀ (s)
s
ステップ目標値
計算結果
立上り時間
カスケード(s)
オーバー
シュート%
整定時間
カスケード(s)
立上り時間
単ループ(s)
オーバー
シュート%
整定時間
単ループ(s)
「シミュレーション実行」ボタンを押すとカスケード制御(実線)と単ループ制御(破線)のステップ応答を比較表示します。
理論・主要公式
$$G_i(s) = \frac{K_i}{\tau_i s + 1}$$ $$G_o(s) = \frac{K_o}{\tau_o s + 1}$$ $$C(s) = K_p + \frac{K_i}{s} + K_d s$$

カスケード制御とは

🙋
カスケード制御って何ですか?普通のPID制御と何が違うんですか?
🎓
大まかに言うと、制御ループを2重にしたものだよ。内側ループ(内ループ)と外側ループ(外ループ)があって、それぞれ別のPIDコントローラが働いている。例えば、部屋の温度を制御する時に、外ループが「室温」を目標に設定し、内ループはその指令を受けて「ヒーターの熱量」を素早く調整するイメージだね。このシミュレーターでは、上の「内ループゲイン」スライダーを動かすと、内側の応答の速さがどう変わるかすぐに確認できるよ。
🙋
え、ループが2つもあると複雑じゃないですか?何かメリットがあるんですか?
🎓
確かに複雑だけど、大きなメリットがあるんだ。内ループが外乱を素早く打ち消してくれるから、外ループの制御がすごく安定するんだよ。例えば、ポンプの流量が急に変動しても、内ループがすぐに検知して補正するから、最終的に制御したい温度や圧力にはほとんど影響が出ない。シミュレーターで「外乱の大きさ」を増やして、単一ループとカスケード制御の応答を比べてみて。カスケードの方がオーバーシュートが小さく、早く落ち着くのがわかるはずだよ。
🙋
なるほど!でも、内ループと外ループのチューニング、どうやるんですか?難しそう…。
🎓
実務では「内側から外側へ」が鉄則だね。まずは「内ループゲイン」を上げて、内側のプロセスを単体でできるだけ速く安定させる。その状態で初めて「外ループゲイン」を調整するんだ。シミュレーターで試すとよくわかるけど、内ループがガタガタな状態で外ループのPゲインを上げると、全体が発振してしまう。逆に、内ループをしっかり固めておけば、外ループの調整はかなり楽になるんだ。

よくある質問

まず内側ループ(速い応答)のPIDを調整し、安定かつ目標値に追従するようにします。その後、外側ループ(遅い応答)のPIDを調整します。内側ループが安定していないと外側の調整が困難なため、必ず内側から先に行ってください。
同じプロセスパラメータで、カスケード制御と単ループ制御のステップ応答を比較してください。外乱が内側ループに加わる場合、カスケード制御は単ループより速く外乱を抑制し、オーバーシュートが小さくなることを確認できます。
内側ループの応答が非常に速くなり、制御が不安定になりやすくなります。特に外側ループの時定数との差が大きすぎると、発振やハンチングが発生する可能性があります。現実的な範囲(例: τi=0.5〜5)で調整してください。
本シミュレーターは一次遅れ系に限定した簡易モデルです。実際のプロセスにはむだ時間や非線形性が含まれるため、定性的な傾向把握や学習用途としてご利用ください。実機調整の前段階での理解促進に役立ちます。

実世界での応用

化学プラントの反応器温度制御:外ループが反応器全体の温度を目標値に保ち、内ループがその指令に基づいてジャケットを流れる冷却水の流量を高速で制御します。反応熱の急激な変動といった内乱を、冷却水流で素早く打ち消すことができます。

ボイラーの蒸気圧力制御:外ループがボイラー出口の蒸気圧力を管理し、内ループが燃料(重油やガス)の供給量を微調整します。燃料側の圧力変動などの外乱を内ループが即座に吸収し、蒸気圧力を安定させます。

紙の厚み(ベーシックウェイト)制御:外ループが最終製品の紙の厚みを計測・制御し、内ループが紙パルプの供給流量を制御します。パルプ濃度のむらなどのプロセス外乱を、厚みに影響が出る前に内ループで抑制します。

航空機のオートパイロット(姿勢制御):外ループが機体の目標姿勢(ピッチ角)を設定し、内ループがエレベータなどの操縦翼面を素早く動かして姿勢を実現します。気流の乱れなどの外乱を、機体の挙動に大きな影響を与える前に内ループで補正します。

よくある誤解と注意点

カスケード制御を始めて触るとき、いくつかつまずきやすい落とし穴があるんだ。まず大きな誤解が「外ループさえしっかりチューニングすれば内ループは適当でいい」という考え。これは絶対にダメ。内ループが鈍いと、外ループから見れば「指令を出してもなかなか応答しない、挙動が予測できない部下」を抱えているようなもの。例えば、内ループの時定数 $\tau_i$ が1秒、外ループの時定数 $\tau_o$ が10秒の理想的な組み合わせならうまくいく。でも、もし内ループの応答が遅くて $\tau_i$ が5秒もあれば、外ループ(10秒)との差が小さすぎて、カスケード制御のメリットがほとんど消えてしまう。シミュレーターで内ループゲインを極端に下げて、外ループゲインを上げてみると、すぐに発振するのが確認できるはずだよ。

次に、外乱の注入ポイントを見誤ること。カスケード制御が威力を発揮するのは、外乱が内ループで検知・補正できるポイントに入る時だ。逆に、外乱が外ループのプロセスに直接入ってくる場合は、単一ループと大差ない結果になることもある。実務では、どの経路からどんな外乱が入るのか、プロセスフローをよく見極めることが特に重要。

最後に、内ループと外ループのサンプリング周期を同じに設定してしまうという実装上のミス。内ループは速い応答が求められるので、制御周期は短く(例えば100ms)、外ループは遅いプロセスを制御するので、もう少し長い周期(例えば1秒)で十分なことが多い。両方を同じ速い周期で動かすと、無駄な計算負荷がかかるだけだし、場合によっては外ループの制御が不安定になる原因にもなるから注意してね。

使い方ガイド

  1. 外ループPIDゲイン(num-ikp, num-iki, num-ikd)を設定します。一般的な温度制御では Kp=0.5~2.0、Ki=0.01~0.1、Kd=0.1~0.5の範囲から開始してください
  2. 内ループの時定数(num-itau)を入力します。プロセス応答遅延を模擬する値で、通常は0.1~5秒の範囲です
  3. スライダー(sl-ikp, sl-iki, sl-ikd, sl-itau)でリアルタイムに各パラメータを微調整し、ステップ応答波形の収束挙動を観察します
  4. シミュレーション結果から外ループの過渡応答(立ち上がり時間、オーバーシュート、整定時間)を評価します

具体的な計算例

プロセス制御(流量制御ループ)の実例:内ループ時定数τ=0.8秒、外ループKp=1.2、Ki=0.05、Kd=0.2を設定した場合、目標値20L/minへのステップ応答では立ち上がり時間約2.5秒、オーバーシュート5%、整定時間(2%帯)約4.2秒が得られます。同じプロセスを単ループPID(Kp=0.8、Ki=0.02、Kd=0.1)で制御すると整定時間が6秒以上になり、カスケード制御の応答性向上が明確に確認できます

実務での注意点