Simulink でのゲイン スケジュール制御システムのモデル化
Simulink® で、コントローラーのゲインや係数が時間、操作条件、モデル パラメーターなどのスケジューリング変数に依存するゲイン スケジュール制御システムをモデル化できます。Control System Toolbox™ の線形パラメーター変動ブロックのライブラリを使用して、可変ゲインをもつ一般的な制御システム要素を実装できます。ルックアップ テーブルなどのブロックや MATLAB Function ブロックを使用して、これらのゲインがスケジューリング変数に依存するゲイン スケジュールを実装します。
Simulink でゲイン スケジュール制御システムをモデル化するには、次を行います。
スケジューリング変数と、モデル内でそれらを表す信号を特定します。たとえば、巡航中の航空機のシステムの場合、スケジューリング変数は航空機の入射角と対気速度になります。
ルックアップ テーブル ブロックまたは MATLAB Function ブロックを使用して、スケジューリング変数に依存するゲインまたは変数を実装します。性能要件を満たすゲイン スケジュールのためのルックアップ テーブル値または MATLAB® 式がない場合、
systune
を使用して調整することができます。Simulink でのゲイン スケジュールの調整を参照してください。通常の制御要素をゲイン スケジュールされた要素に置き換えます。たとえば、固定係数 PID コントローラーの代わりに Varying PID Controller ブロックを使用して、ゲイン スケジュールにより PID ゲインが決定されるようにします。
必要に応じてスケジューリング ロジックとセーフガードをモデルに追加します。
スケジュール ゲインのモデル化
ゲイン スケジュールはスケジューリング変数の現在の値をコントローラー ゲインに変換します。ゲイン スケジュールを Simulink で実装する方法はいくつかあります。
ルックアップ テーブルの実装に使用できるブロックには次が含まれます。
ルックアップ テーブル — "ルックアップ テーブル" は、ブレークポイントと対応するゲイン値のリストです。スケジューリング変数がブレークポイントの間にある場合、ルックアップ テーブルは対応するゲイン間を内挿します。ゲイン スケジュールをルックアップ テーブルとして実装するには、次のブロックを使用します。
1-D Lookup Table (Simulink)、2-D Lookup Table (Simulink)、n-D Lookup Table (Simulink) — 1 つ、2 つ、またはそれ以上の数のスケジューリング変数に依存するスカラー ゲインに使用します。
Matrix Interpolation (Simulink) — 1 つ、2 つ、または 3 つのスケジューリング変数に依存する行列値ゲインに使用します (このブロックは [Simulink Extras] ライブラリにあります)。
MATLAB Function (Simulink) ブロック — ゲインをスケジューリング変数に関連付ける関数式がある場合、MATLAB Function ブロックを使用します。式が滑らかな関数の場合、MATLAB 関数を使用するとルックアップ テーブルよりも滑らかなゲイン変動が得られることがあります。また、Simulink Coder™ などのコード生成製品を使ってコントローラーをハードウェアに実装する場合、MATLAB 関数はルックアップ テーブルよりもメモリ効率の高い実装となる可能性があります。
Simulink Control Design™ がある場合、systune
を使用して、ルックアップ テーブルまたは MATLAB 関数として実装されたゲイン スケジュールを調整できます。Simulink でのゲイン スケジュールの調整を参照してください。
コントローラーにおけるスケジュール ゲイン
例として、モデル rct_CSTR
には PI コントローラーと進み補償器が含まれており、コントローラー ゲインが 1-D Lookup Table (Simulink) ブロックを使用してルックアップ テーブルとして実装されます。このモデルの詳細については、化学反応器のゲイン スケジュール制御を参照してください。
サンプル ファイルをコピーし、rct_CSTR
モデルを開きます。
openExample("control/GainScheduledProcessExample",... supportingFile="rct_CSTR.slx")
Concentration controller
ブロックと Temperature controller
ブロックの両方が、CSTR
プラント出力 Cr
を入力として取ります。この値は、コントローラーの動作が依存するシステムの制御変数とスケジューリング変数の両方を表します。Concentration controller
ブロックをダブルクリックします。
このブロックは、比例ゲイン Kp
と積分ゲイン Ki
がスケジューリング パラメーター Cr
を 1-D Lookup Table ブロックに送ることで決定される PI コントローラーです。同様に、Temperature controller
ブロックには、ルックアップ テーブルとして実装されている 3 つのゲインが含まれます。
よく使用する制御要素のゲイン スケジュール等価物
Control System Toolbox の [Linear Parameter Varying] ブロック ライブラリを使用して、可変のパラメーターまたは係数をもつ、共通の制御要素を実装します。これらのブロックは、ゲインまたはパラメーターを外部入力として利用できる共通要素を提供します。次の表に、これらのブロックの用途の一部を示します。
ブロック | 用途 |
---|---|
これらのブロックは、カットオフ周波数がスケジューリング変数により変化するバタワース ローパス フィルターを実装するために使用します。 | |
これらのブロックは、ノッチの周波数、幅、および深さがスケジューリング変数により変化するノッチ フィルターを実装するために使用します。 | |
| これらのブロックは、PID Controller ブロックと PID Controller (2DOF) ブロックのあらかじめ構成されたバージョンです。これらを使用して、PID ゲインがスケジューリング変数により変化する PID コントローラーを実装します。 |
これらのブロックは、分子と分母の多項式係数がスケジューリング変数により変化する任意の次数の伝達関数を実装するために使用します。 | |
これらのブロックは、A、B、C、D の各行列がスケジューリング変数により変化する状態空間コントローラーを実装するために使用します。 | |
これらのブロックは、LQG コントローラーなどの、ゲイン スケジュールされたオブザーバー形式の状態空間コントローラーを実装するために使用します。このようなコントローラーでは、A、B、C、D の各行列および状態フィードバックと状態オブザーバーのゲイン行列が、スケジューリング変数により変化します。 |
ゲイン スケジュール ノッチ フィルター
たとえば、次の図に示すサブシステムは Varying Notch Filter ブロックを使用して、ノッチ周波数が 2 つのスケジューリング変数の関数として変化するフィルターを実装しています。ノッチ周波数とスケジューリング変数の関係は MATLAB function で実装されます。
ゲイン スケジュール PI コントローラー
もう 1 つの例として、次のサブシステムはゲイン スケジュールの離散時間 PI コントローラーです。ここでは比例ゲインと積分ゲインがともに同じスケジューリング変数に依存しています。このコントローラーは 1-D Lookup Table ブロックを使ってゲイン スケジュールを実装します。
行列値ゲイン スケジュール
行列値ゲイン スケジュールを Simulink で実装することもできます。行列値ゲイン スケジュールは、1 つ以上のスケジューリング変数を受け取り、スカラー値の代わりに行列を返します。たとえば、次の形式をもつ時変 LQG コントローラーを実装するとします。
ここで、一般的に状態空間行列 A、B、C および D、状態フィードバック行列 K、オブザーバー ゲイン行列 L は、すべて時間とともに変動します。この場合、時間がスケジューリング変数になり、ゲイン スケジュールによって特定の時間における行列の値が決まります。
Simulink モデルでは、以下を使用して行列値ゲイン スケジュールを実装できます。
MATLAB Function (Simulink) ブロック — スケジューリング変数を受け取って行列値を返す MATLAB 関数を指定します。
Matrix Interpolation (Simulink) ブロック — 行列値を各スケジューリング変数のブレークポイントに関連付けるルックアップ テーブルを指定します。ブレークポイントの間では、ブロックが行列要素を内挿します (このブロックは [Simulink Extras] ライブラリにあります)。
LQG コントローラーの場合、MATLAB Function ブロックまたは Matrix Interpolation ブロックを使用して、時変行列を Varying Observer Form ブロックへの入力として実装します。以下に例を示します。
この実装では、関連付けられた関数がシミュレーション時間を受け取って適切な次元の行列を返す MATLAB Function ブロックとしてそれぞれの時変行列を実装します。
Simulink Control Design がある場合、MATLAB Function ブロックまたは Matrix Interpolation ブロックとして実装された行列値ゲイン スケジュールを調整できます。ただし、Matrix Interpolation ブロックを調整するには、[シミュレーション実行方法] を [インタープリター型実行]
に設定しなければなりません。シミュレーション モードの詳細については、Matrix Interpolation (Simulink) ブロックのリファレンス ページを参照してください。
代数ループの回避
これらのパラメーター変動ブロックを使用する際には、システム出力 y (オブザーバー形式ブロックの場合は制御信号 u) に基づいてシステム係数または状態空間行列をスケジュールしないでください。そのような依存関係がある場合には、結果のシステムにより、代数ループが生じます。これは、ブロック出力値 y (または u) を計算するために出力値がわかっている必要があるからです。この代数ループは不安定性や発散が発生しやすい傾向にあります。代わりに、時間 t、ブロック入力 u、および状態出力 x の観点で係数または行列を表してみてください。
同様の理由で、変動状態空間ブロックを使用する際には、出力 dx または xk+1 に基づいて A および B をスケジュールしないでください。なお、y が状態と入力の固定された組み合わせの場合 (つまり、y = Cx + Du の場合 (C および D は定数行列))、A および B が y に依存しても安全です。
同様に、離散時間の変動状態空間ブロックでは、xk+1 を使用して A および B をスケジュールしないでください。yk が状態と入力の固定された組み合わせの場合は、yk を使用して A および B をスケジュールできます。
代数ループの詳細については、代数ループの概念 (Simulink)を参照してください。
カスタムのゲイン スケジュール制御構造
スケジュール ゲインを使用して独自の制御要素を作成することもできます。たとえば、モデル rct_CSTR
には、スケジューリング変数 CR
に依存する 3 つの係数をもつゲイン スケジュール進み補償器が含まれています。この補償器の実装方法を理解するため、モデルを開いて Temperature controller
サブシステムを確認します。
ここで全体のゲイン Kt
、零点の位置 a
、および極配置 b
は、それぞれスケジューリング変数を入力として受け取る 1 次元のルックアップ テーブルとして実装されています。ルックアップ テーブルは Product ブロックに直接送られます。
ゲイン スケジュールの調整可能性
ゲイン スケジュールを実装するルックアップ テーブルまたは MATLAB Function ブロックを systune
で調整可能にするには、それが最終的に次のいずれかに送られなければなりません。
Linear Parameter Varying ブロック ライブラリのブロック。
指定された信号にゲインを適用する Product ブロック。たとえば、Product ブロックが入力としてスケジュール ゲイン g(α) と信号 u(t) を受け取る場合、ブロックの出力信号は y(t) = g(α)u(t) になります。
ルックアップ テーブルまたは MATLAB Function ブロックと、Product ブロックまたはパラメーター変動ブロックとの間には、次のブロックが 1 つ以上存在することが可能です。
Gain
Bias
線形領域における単位ゲインと等価の次のブロック
Transport Delay, Variable Transport Delay
Saturate, Deadzone
Rate Limiter, Rate Transition
Quantizer, Memory, Zero-Order Hold
MinMax
Data Type Conversion
Signal Specification
次のスイッチ ブロック
Switch
Multiport Switch
Manual Switch
このようなブロックの挿入は、たとえばゲイン値を特定の範囲に制約したり、ゲイン スケジュールの更新頻度を指定する場合などに有用です。