ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

複数操作点用の PID コントローラー群の設計

この例では、幅広い操作点上で動作する非線形プラント用の PID コントローラーの配列を Simulink で設計する方法を説明します。

プラント モデルを開く

プラントは、幅広い操作点上で動作する連続攪拌タンク反応器 (CSTR) です。単一の PID コントローラーの場合、冷却水温度を効果的に使用して、その PID コントローラーの設計にある小規模な操作範囲付近の出力濃度を調整できます。ただし、プラントが強度な非線形システムであるため、操作点が大きく変化する場合、制御性能が低下します。閉ループ システムでは、不安定になる可能性もあります。

CSTR プラント モデルを開きます。

mdl = 'scdcstrctrlplant';
open_system(mdl)

このシステムの詳細については、[1] を参照してください。

ゲイン スケジューリングの紹介

非線形制御問題を解決するための一般的な方法として、線形コントローラーでゲイン スケジューリングを使用する方法が挙げられます。ゲイン スケジューリング制御システムの設計には、一般的に以下の 4 つの手順があります。

  1. 各動作領域のプラント モデルを取得します。通常行われるのは、いくつかの平衡操作点でプラントを線形化することです。

  2. 前の手順で取得したプラント モデル用に、PID コントローラーなどの線形コントローラー群を設計します。

  3. PID ゲインなどのコントローラー係数がスケジューリング変数の値に基づいて変更されるように、スケジュール メカニズムを実装します。プラント操作への外乱を最小化するには、コントローラー間の滑らかな (バンプレス) 切り替えが必要です。

  4. 制御性能をシミュレーションで評価します。

ゲイン スケジューリングの詳細については、[2] を参照してください。

この例では、非線形 CSTR プラント用の PID コントローラー群の設計に焦点を当てています。

複数操作点用の線形プラント モデルの取得

出力濃度 C は、異なる動作領域を識別するために使用されます。CSTR プラントは、低変換率 (C = 9) と高変換率 (C = 2) の間の任意の変換率で操作できます。この例では、操作範囲を C = 2 から 9 で表される 8 つの領域に分割します。

操作範囲を指定します。

C = [2 3 4 5 6 7 8 9];

既定の操作点の仕様の配列を作成します。

op = operspec(mdl,numel(C));

出力濃度が既知の値であることを指定し、出力濃度の値を指定して、操作点の仕様を初期化します。

for ct = 1:numel(C)
	op(ct).Outputs.Known = true;
	op(ct).Outputs.y = C(ct);
end

C の値に対応する平衡操作点を計算します。

opoint = findop(mdl,op,findopOptions('DisplayReport','off'));

プラントをこれらの操作点で線形化します。

Plants = linearize(mdl,opoint);

CSTR プラントは非線形であるため、線形モデルにはさまざまな特性が表示されます。たとえば、高変換率と低変換率を使用するプラント モデルは安定していますが、それ以外は安定しません。

isstable(Plants,'elem')'
ans =

  1x8 logical array

   1   1   0   0   0   0   1   1

プラント モデル用の PID コントローラーの設計

複数の PID コントローラーをバッチで設計するには、関数 pidtune を使用します。次のコマンドでは、並列形式で PID コントローラーの配列が生成されます。必要な開ループ交差周波数は 1 ラジアン/秒で、位相余裕は既定値の 60 度です。

Controllers = pidtune(Plants,'pidf',pidtuneOptions('Crossover',1));

C = 4 のコントローラーを表示します。

Controllers(:,:,4)
ans =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = -12.4, Ki = -1.74, Kd = -16, Tf = 0.00875
 
Continuous-time PIDF controller in parallel form.

ステップ設定点の追従のための閉ループ応答を解析するには、最初に閉ループ システムを作成します。

clsys = feedback(Plants*Controllers,1);

閉ループ応答をプロットします。

figure
hold on
for ct = 1:length(C)
    % Select a system from the LTI array
    sys = clsys(:,:,ct);
    sys.Name = ['C=',num2str(C(ct))];
    sys.InputName = 'Reference';
    % Plot step response
    stepplot(sys,20);
end
legend('show','location','southeast')

すべての閉ループは安定していますが、不安定なプラント (C = 47) のあるループのオーバーシュートが大きすぎます。結果を改善するため、ターゲットの開ループ帯域幅を 10 ラジアン/秒に増やします。

不安定なプラント モデル用の更新されたコントローラーを設計します。

Controllers = pidtune(Plants,'pidf',10);

C = 4 のコントローラーを表示します。

Controllers(:,:,4)
ans =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = -283, Ki = -151, Kd = -128, Tf = 0.0183
 
Continuous-time PIDF controller in parallel form.

閉ループ システムを作成し、新しいコントローラーの閉ループのステップ応答をプロットします。

clsys = feedback(Plants*Controllers,1);
figure
hold on
for ct = 1:length(C)
    % Select a system from the LTI array
    sys = clsys(:,:,ct);
    set(sys,'Name',['C=',num2str(C(ct))],'InputName','Reference');
    % Plot step response
    stepplot(sys,20);
end
legend('show','location','southeast')

これですべての閉ループ応答は適切になります。比較のため、すべての操作点で同じコントローラーを使用した場合の応答を調べます。それぞれが C = 2 コントローラーを使用する閉ループ システムをもう 1 セット作成して、その応答をプロットします。

clsys_flat = feedback(Plants*Controllers(:,:,1),1);

figure
stepplot(clsys,clsys_flat,20)
legend('C-dependent Controllers','Single Controller')

濃度に合わせて別々に設計された PID コントローラーの配列は、単一のコントローラーよりも大幅に高い性能を示します。

ただし、前掲の閉ループ応答は、完全な非線形システムの線形近似に基づいて計算されています。設計を検証するには、PID Controller ブロックを使用してモデルにスケジュール メカニズムを実装します。

モデルを閉じます。

bdclose(mdl)

参考文献

[1] Seborg, D. E., T. F. Edgar, and D. A. Mellichamp. Process Dynamics and Control, 2nd Ed., Wiley, 2004, pp. 34-36.

[2] Rugh, W. J., and J. S. Shamma. "Research on gain scheduling." Automatica, Issue 36, 2000, pp. 1401-1425.