カスケード制御とは
🙋
カスケード制御って何ですか?普通のPID制御と何が違うんですか?
🎓
ざっくり言うと、制御ループを2重に入れ子にしたものだよ。内側ループ(内ループ)が速くて、外側ループ(外ループ)が遅い。例えば反応器の温度制御だと、外ループが「反応器温度」を目標に決めて、その指令を受けた内ループが「冷却水の流量」を素早く動かす。このシミュレーターでは $t=14$ 秒で外乱を注入して、内ループがそれを即座に打ち消す様子を実時間で見られるよ。
🙋
え、ループが2つもあると複雑じゃないですか?何かメリットがあるんですか?
🎓
最大のメリットが外乱抑圧なんだ。単ループだと外乱が主変数まで届いてからしか直せない。でもカスケードなら、外乱が内ループの担当部分(冷却水流量とか)に入った瞬間、速い内ループがそれを検知して、主変数(温度)に伝わる前に打ち消す。グラフで青の実線(カスケード)が外乱でほとんど揺れないのに、オレンジの破線(単ループ)が大きく沈んでなかなか戻らないのが分かるはずだよ。
🙋
なるほど!でも、内ループが遅かったらどうなるんですか?
🎓
いい質問だね。「遅い内ループ」プリセットを押してみて。内ループの時定数 $\tau_i$ を大きくすると、内ループが外乱を捕まえきれなくて、カスケードの優位性がほとんど消えるんだ。だから設計の鉄則は「内ループは外ループの3〜5倍速く」。まず内ループを速く固めて、それから外ループをチューニングする。順序は内から外、これは絶対だよ。
物理モデルと主要な数式
系は2つの一次遅れプロセスを直列に接続したモデルです。内ループのプラント $G_i$ は速い動作(バルブやモータ)、外ループのプラント $G_o$ は遅い主変数(温度や液位)を表します。
$$G_i(s)=\frac{K_i}{\tau_i s+1},\qquad G_o(s)=\frac{K_o}{\tau_o s+1}$$
$\tau_i$, $\tau_o$ は各プロセスの時定数です。カスケードが機能する条件は $\tau_i\ll\tau_o$(目安 $\tau_o>3\tau_i$)。内ループが十分に速くないと外乱抑圧効果が得られません。
各ループは独立したPIDコントローラを持ちます。外ループPIDの出力が、内ループの目標値 $r_i$ になります。
$$C(s)=K_p+\frac{K_i}{s}+K_d s$$
外乱 $d$ は内ループ入力点に加わり、内ループの誤差として即座に現れます。速い内ループはこれを主変数 $y_o$ に伝播する前に補正するため、外乱に対する主変数の振れと整定時間が単ループより大幅に小さくなります。本シミュレーターの既定設定では、外乱後の主変数の振れはカスケードが単ループの約1/8です。
よくある質問
まず内側ループ(速い応答)のPIDを調整し、安定かつ目標値に追従するようにします。その後、外側ループ(遅い応答)のPIDを調整します。内側ループが安定していないと外側の調整が困難なため、必ず内側から先に行ってください。「速い内ループ」プリセットと「遅い内ループ」プリセットを比べると、内ループの速さが外乱抑圧性能を決めることが体感できます。
本シミュレーターは $t=14$ 秒で内ループ入力点に外乱を注入し、カスケード(青実線)と単ループ(オレンジ破線)の主変数の応答を実時間で並べて描きます。外乱の大きさ d を変えながら、主変数の振れ(最大偏差)と外乱後の整定時間を見比べてください。カスケードの方が小さく振れて速く戻ります。
内側ループの応答が非常に速くなり、外乱抑圧性能は最大化しますが、ゲインが過大だとノイズ感度が上がり制御が不安定になりやすくなります。特に外側ループの時定数との差が大きすぎると、発振やハンチングが発生する可能性があります。現実的な範囲(例: τi=0.2〜0.5)で調整してください。
本シミュレーターは一次遅れ系を直列接続した簡易モデルです。実際のプロセスにはむだ時間や非線形性が含まれるため、定性的な傾向把握や学習用途としてご利用ください。外乱抑圧の優位性という本質的な挙動は正しく再現されており、実機調整の前段階での理解促進に役立ちます。
実世界での応用
化学プラントの反応器温度制御:外ループが反応器全体の温度を目標値に保ち、内ループがその指令に基づいてジャケットを流れる冷却水の流量を高速で制御します。冷却水の供給圧力変動といった外乱を、温度に影響が出る前に内ループで素早く打ち消すことができます。
ボイラーの蒸気圧力制御:外ループがボイラー出口の蒸気圧力を管理し、内ループが燃料(重油やガス)の供給量を微調整します。燃料側の圧力変動などの外乱を内ループが即座に吸収し、蒸気圧力を安定させます。
紙の厚み(ベーシックウェイト)制御:外ループが最終製品の紙の厚みを計測・制御し、内ループが紙パルプの供給流量を制御します。パルプ濃度のむらなどのプロセス外乱を、厚みに影響が出る前に内ループで抑制します。
航空機のオートパイロット(姿勢制御):外ループが機体の目標姿勢(ピッチ角)を設定し、内ループがエレベータなどの操縦翼面を素早く動かして姿勢を実現します。気流の乱れなどの外乱を、機体の挙動に大きな影響を与える前に内ループで補正します。
よくある誤解と注意点
カスケード制御を始めて触るとき、いくつかつまずきやすい落とし穴があるんだ。まず大きな誤解が「外ループさえしっかりチューニングすれば内ループは適当でいい」という考え。これは絶対にダメ。内ループが鈍いと、外ループから見れば「指令を出してもなかなか応答しない、挙動が予測できない部下」を抱えているようなもの。例えば、内ループの時定数 $\tau_i$ が0.3秒、外ループの時定数 $\tau_o$ が3秒の理想的な組み合わせならうまくいく。でも、もし内ループの応答が遅くて $\tau_i$ が2.5秒もあれば、外ループ(3秒)との差が小さすぎて、カスケード制御のメリットがほとんど消えてしまう。「遅い内ループ」プリセットを押せば、外乱で主変数が大きく揺れてしまうのがすぐ確認できるはずだよ。
次に、外乱の注入ポイントを見誤ること。カスケード制御が威力を発揮するのは、外乱が内ループで検知・補正できるポイントに入る時だ。本シミュレーターは外乱を内ループ入力点に注入しているので、内ループが先に検知して打ち消せる。逆に、外乱が外ループのプロセスに直接入ってくる場合は、単一ループと大差ない結果になることもある。実務では、どの経路からどんな外乱が入るのか、プロセスフローをよく見極めることが特に重要。
最後に、内ループと外ループのサンプリング周期を同じに設定してしまうという実装上のミス。内ループは速い応答が求められるので、制御周期は短く(例えば100ms)、外ループは遅いプロセスを制御するので、もう少し長い周期(例えば1秒)で十分なことが多い。両方を同じ速い周期で動かすと、無駄な計算負荷がかかるだけだし、場合によっては外ループの制御が不安定になる原因にもなるから注意してね。
具体的な計算例
既定値(内Kp=4.0, Ki=2.0, Kd=0.2, τi=0.3s、外Kp=1.2, Ki=0.5, Kd=0.3, τo=3.0s、目標値1.0、外乱d=0.8)では、t=14秒で外乱を注入すると、カスケードの主変数の最大偏差は約0.033、外乱後の整定時間は約3.3秒です。単ループでは最大偏差が約0.249(約8倍)、整定時間が約11.4秒となり、カスケードが外乱を内ループで早期に打ち消すことで主変数をほぼ一定に保てることが確認できます。