Simulink Control Design


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

複数操作点用の PID コントローラー ファミリの設計

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

プラント モデルを開く

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

以下のコマンドで CSTR プラント モデルを開きます。以下のコマンドで CSTR プラント モデルを開きます。

mdl = 'scdcstrctrlplant';
open_system(mdl)

詳細は、Seborg, D.E. et al., "Process Dynamics and Control", 2nd Ed., 2004, Wiley, pp.34-36 を参照してください。

ゲイン スケジュールの紹介

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

(1) Obtain a plant model for each operating region. The usual practice
is to linearize the plant at several equilibrium operating points.
(2) Design a family of linear controllers such as PID for the plant
models obtained in the previous step.
(3) Implement a scheduling mechanism such that the controller
coefficients such as PID gains are changed based on the values of the
scheduling variables.  Smooth (bumpless) transfer between controllers
is required to minimize disturbance to plant operation.
(4) Assess control performance with simulation.

ゲイン スケジュールでのバックグラウンドの読み取りについての詳細は、W. J. Rugh と J. S. Shamma の調査論文"Research on gain scheduling", Automatica, Issue 36, 2000, pp.1401-1425 を参照してください。

この例では、手順 1 および 2 にある CSTR プラントの PID コントローラー ファミリの設計について説明します。

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

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

以下のループでは、まず、findop コマンドを使用して平衡操作点を計算します。その後、linearize コマンドを使用して各操作点でプラントを線形化します。

% Obtain default operating point
op = operspec(mdl);
% Set the value of output concentration C to be known
op.Outputs.Known = true;
% Specify operating regions
C = [2 3 4 5 6 7 8 9];
% Initialize an array of state space systems
Plants = rss(1,1,1,8);
for ct = 1:length(C)
    % Compute equilibrium operating point corresponding to the value of C
    op.Outputs.y = C(ct);
    opoint = findop(mdl,op,findopOptions('DisplayReport','off'));
    % Linearize plant at this operating point
    Plants(:,:,ct) = linearize(mdl, opoint);
end

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

isstable(Plants,'elem')'
ans =

     1     1     0     0     0     0     1     1

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

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

% Design controllers
Controllers = pidtune(Plants,'pidf',pidtuneOptions('Crossover',1));
% Display controller for C=4
Controllers(:,:,4)
ans =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = -12.5, Ki = -0.108, Kd = -14.4, Tf = 0.00875
 
Continuous-time PIDF controller in parallel form.

ステップ設定値追従用の閉ループ応答を以下のようにプロットします。

% Construct closed-loop systems
clsys = feedback(Plants*Controllers,1);
% Plot closed-loop responses
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=4、5、6 および 7) のあるループのオーバーシュートが大きすぎます。これは、開ループ帯域幅を 10 rad/sec に増加することで改善できます。

% Design controllers for unstable plant models
Controllers(:,:,3:6) = pidtune(Plants(:,:,3:6),'pidf',10);
% Display controller for C=4
Controllers(:,:,4)
ans =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = -163, Ki = -13.2, Kd = -138, Tf = 0.0471
 
Continuous-time PIDF controller in parallel form.

これで、すべての閉ループ応答が満足のいく応答となります。

% Construct closed-loop systems
clsys = feedback(Plants*Controllers,1);
% Plot closed-loop responses
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')

PID コントローラーの配列を設計しました。各 PID コントローラーは、ローカル操作点周辺で適切な性能を出さなければなりません。次の手順は、この例では取り扱わないスケジュール メカニズムの実装です。

モデルを閉じます。

bdclose(mdl);