Simulink Control Design

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

反応器に対する Simulink PID Controller (2DOF) ブロックの設計

この例では、Simulink PID Controller (2DOF) を調整するために PID 調整器を使用する方法を説明します。

PID Controller (2DOF) ブロックの紹介

2DOF PID コントローラー (ISA-PID コントローラーとも呼ばれます) を使用すると、設定値追従と外乱の抑制の両方で良好な性能を達成できます。フィードバック ループに標準的な PID コントローラーが含まれており、プレフィルターを参照信号に追加します。プレフィルターを使用すると、設定点の変更に対してより滑らかな過渡特性応答を生成できます。この例では、Simulink PID Controller (2DOF) ブロックを使用して連続攪拌タンク反応器 (CSTR) を制御し、この 2DOF PID コントローラーを PID 調整器で設計します。

PID 調整器を使用した一般的な設計ワークフローには、以下の作業が含まれます。

(1) PID 調整器を起動する。起動時に、ソフトウェアが Simulink モデルから線形プラント モデルを自動的に計算し、初期コントローラーを設計します。

(2) 2 つの設計モードの設計基準を手動で調整することで、PID 調整器でコントローラーを調整する。PID 調整器が、システムをロバスト安定化させる PID パラメーターを計算します。

(3) 設計されたコントローラーのパラメーターを PID Controller ブロックにエクスポートし、Simulink でコントローラー性能の検証を実行する。

モデルを開く

CSTR 制御モデルを開き、少し時間をとってモデルを調べます。

open_system('scdcstrctrlpidblock');

CSTR プラントは、平衡操作点で初期化されます。残差濃度のノミナル値は 1.96 mol/L で、CSTR サブシステムの Residual Concentration Reference ブロックと Integrator1 ブロックの初期条件です。

PID Controller ブロックの積分器 I0 の初期条件は、平衡操作点によって決定されます。この例では、並列形式の PI コントローラーがあります。

   I0 = u0 - ((b-1)*y0*P)

ここで u0 は、定常状態のコントローラー出力 (300)、y0 は定常状態のプラント出力 (1.96) です。b は 1 であるため、I0 = u0 = 300 となります。

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

設計の概要

この例では、反応器の冷却水温度を操作して、CSTR の残差濃度を制御します。全体的な設計要件は、以下のとおりです。

  • Simulink ステップ ブロック Residual Concentration Reference からの参照信号で 0.5 の突然の増加を追跡する。詳細な設計要件は、以下のとおりです。

         Settling time under 10 seconds
         Zero steady-state error to the step reference input
         Overshoot below 0.1
  • Simulink ステップ ブロック Feed Temperature からフィード温度における 5 度の突然の増加を拒否する。詳細な設計要件は、以下のとおりです。

         Settling time under 10 seconds
         Peak deviation from steady state below 0.01

この例では、PID 調整器で PI コントローラーを設計し、設定値追従と外乱の抑制の両方で良好な応答を達成します。

PID 調整器を開く

PID 調整器を起動するには、PID Controller ブロックをダブルクリックして、ブロック ダイアログを開きます。[メイン] タブで、[調整] をクリックします。

PID 調整器を起動したら、PID ブロック ダイアログを閉じて、PID 調整器を Simulink モデルの横に移動します。また、残差濃度のスコープ ウィンドウを開きます。

初期 PID 設計

PID 調整器が起動すると、ソフトウェアが、線形化されたプラント モデルを計算します。ソフトウェアはプラント入出力を自動的に特定し、現在の操作点を線形化に使用します。プラントは任意の次数をもつことができ、むだ時間をもつこともできます。

PID 調整器は、性能とロバスト性の間の適切なトレードオフを実現できるように初期 PI コントローラーを計算します。既定の設定では、ステップ設定値追従性能がプロットに表示されます。

[パラメーターを表示する] 矢印をクリックして、コントローラー パラメーター P、I、b と、性能測定値とロバスト性測定値のセットを表示します。この例では、初期 PI コントローラー設計によって 4.4 秒の整定時間が与えられます。これは要件を満たします。

次の図は、初期設計を含む PID 調整器のダイアログを示しています。

非線形モデルで初期設計をテストするには、PID 調整器で [適用] をクリックします。これにより、パラメーターが Simulink モデルの PID ブロックに書き込まれます。シミュレーションを実行して、閉ループ応答を表示します。

外乱の抑制の過渡特性応答に、ピーク偏差が約 0.2 であり、設計要件を超えていることが示されます。PID 調整器を使用して、ピーク偏差を少なくとも 50% 減らす必要があります。

時間領域設計モードでの外乱の抑制の設計

PID 調整器には、設定値追従 (r から y へ) やコントローラー制御 (r から u へ) などの異なるループ応答用のステップ プロットが用意されています。この例では、外乱は反応器のフィード温度で発生するため、取得できる一番近いプロットは入力外乱の抑制プロットです。このプロットは、プラント モデルの入力でステップ外乱が発生することを前提にしています。

次の図に、初期コントローラーを使用した外乱の抑制性能を示します。

整定時間を 10 秒未満に維持しながら、ピーク偏差を -0.02 から -0.01 に減らす必要があります。最初に、応答時間を短縮することでピーク偏差を減らします。これは、[応答時間] スライダーを右に動かすことで達成できます。

次の図は、応答時間を 0.6 秒に短縮するとピーク偏差が 0.01 未満になることを示しています。

しかし、これでは整定時間が 10 秒を大幅に超えています。整定時間を 10 秒未満に短縮するには、過渡動作をより積極的にする必要があります。これは、[過渡動作] スライダーを左に動かすことで達成できます。

次の図は、応答時間が 0.6 秒で過渡動作値が 0.25 のときの最終的な外乱の抑制性能を示しています。

非線形モデルで新しい設計をテストするには、PID 調整器で [適用] をクリックします。シミュレーションを実行して、閉ループ応答を表示します。

外乱の抑制性能は、要件を満たしています。しかし、コントローラーが非常にアグレッシブであるため、次の図で示すように、今度は設定値追従のオーバーシュートが限界を超えています。

設定値追従性能を向上させるには、2DOF PID ブロックでプレフィルターを調整する必要があります。

設定点の重みを使用した PID 設計の完了

ISA PI または PID コントローラーのパラメーター b は、コントローラーの比例ゲインに接続されている基準信号に対する設定点の重みです。0 ~ 1 の範囲があり、既定値は 1 です。この値を減らすことによって、設定値追従性能はよりスムーズになります。この例では、PID ブロック ダイアログを開いて、b を 0 に設定します。

b および P が変更されているため、PID Controller ブロックの積分器 I0 の初期条件を調整して、初期操作点が平衡であることを確認する必要があります。関係は次のようになります。

   I0 = u0 - ((b-1)*y0*P)

u0 は 300、y0 は 1.96 です。PID 調整器 (-107) の P とブロック ダイアログ (0) の b では、I0 は 90 となります。ブロック ダイアログでこの値を用いて積分器の初期条件を更新すると、シミュレーションは平衡操作点で開始されるようになります。

次の図は、更新された設計に設定値追従のオーバーシュートがないことを示しています。

つまり、2 つの手順で 2DOF PID コントローラーを設計し、設定値追従と外乱の抑制でバランスのとれた性能を達成できます。最初の手順では PID 調整器を使用して最適な負荷外乱の抑制を取得します。2 番目の手順では、ブロック ダイアログで設定点の重み bc を手動調整して良好な設定値追従応答を取得します。bc を変更しても、閉ループの安定性や負荷外乱の抑制の性能には影響しません。

bdclose('scdcstrctrlpidblock')