Simulink Control Design

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

変化するパラメーター値で複数の伝達関数を取得するバッチ線形化

以下の例では、slLinearizer インターフェイスを使用して Simulink モデルをバッチ線形化する方法を説明します。モデル パラメーター値を変化させて、モデルから複数の開ループおよび閉ループの伝達関数を取得します。

linearize コマンドを使用して、同じ解析を実行できます。ただし、複数の開ループおよび閉ループの伝達関数を取得する場合 (特に大規模なモデルの場合)、slLinearizer の方がより効率的に実行できます。

カスケード式ループ モデル

scdcascade モデルには、カスケード フィードバック制御ループのペアが含まれます。それぞれのループには、PI コントローラーが含まれます。プラント モデルの G1 (外側のループ) および G2 (内側のループ) は LTI モデルです。

slLinearizer インターフェイスを使用して、最初に内側のループのダイナミクスを解析します。その後、外側のループのダイナミクスを解析します。

mdl = 'scdcascade';
open_system(mdl);

scdcascade 用の slLinearizer インターフェイスの作成

sllin = slLinearizer(mdl)
 
slLinearizer linearization interface for "scdcascade":

No analysis points. Use the addPoint command to add new points.
No permanent openings. Use the addOpening command to add new permanent openings.
Properties with dot notation get/set access:
      Parameters         : [] 
      OperatingPoints    : [] (model initial condition will be used.)
      BlockSubstitutions : []
      Options            : [1x1 linearize.LinearizeOptions]

内側のループのコントローラー ゲインの変化

内側のループの解析では、内側のループの PI コントローラー ブロック C2 のゲインを変化させます。比例ゲイン (Kp2) および積分ゲイン (Ki2) を 15% の範囲で変化させます。

Kp2_range = linspace(Kp2*0.85,Kp2*1.15,6);
Ki2_range = linspace(Ki2*0.85,Ki2*1.15,4);
[Kp2_grid, Ki2_grid] = ndgrid(Kp2_range,Ki2_range);

params(1).Name = 'Kp2';
params(1).Value = Kp2_grid;
params(2).Name = 'Ki2';
params(2).Value = Ki2_grid;

sllin.Parameters = params;

Kp2_range および Ki2_range で、Kp2 および Ki2 パラメーターのサンプル値を指定します。Kp2Ki2 のそれぞれの組み合わせの伝達関数を取得するには、ndgrid を使用してグリッド配列 Kp2_grid および Ki2_grid をもつ 6 行 4 列のパラメーター グリッドを作成します。構造体 paramssllinParameters プロパティを設定します。この構造体により、変化させるパラメーターとそれらのグリッド配列を指定します。

内側のループの閉ループ全体の伝達関数を解析する

外側のループが開いた状態で、内側のループの閉ループ全体の伝達関数は、u1 から y2 への伝達関数になります。外側のループの影響を取り除くには、e1y1m または y1 でループを中断します。たとえば、e1 でループを中断します。

解析ポイントとして u1 および y2 を追加し、sllin の永続的な開始点として e1 を追加します。

addPoint(sllin,{'y2','u1'});
addOpening(sllin,'e1');

u1 から y2 への伝達関数を取得します。

r2yi = getIOTransfer(sllin,'u1','y2');

6 行 4 列の ss モデル配列 r2yi には、指定されたそれぞれのパラメーターの組み合わせの伝達関数が含まれます。モデルの初期条件は線形化の操作点として使用されます。

e1sllin の永続的な開始点であるため、r2yi には外側のループの影響が含まれません。

r2yi のステップ応答をプロットします。

stepplot(r2yi);

すべてのモデルのステップ応答は 10% の範囲で変化します。ほとんどのモデルの整定時間は、1.5 秒未満です。

プラント出力での内側のループの伝達関数の解析

e1 で外側のループが開いた状態で、y2 での内側のループの伝達関数を取得します。

Li = getLoopTransfer(sllin,'y2',-1);

既定では正のフィードバックが想定され、scdcascade は負のフィードバックを使用するため、3 番目の入力引数を使用してフィードバックの符号を指定します。ここで、Li = -G2C2 となります。

Li のボード線図をプロットします。

bodeplot(Li);

すべてのモデルの振幅プロットは 3dB の範囲で変化します。位相プロットは、[1 10] rad/s の間隔において、約 20 °の最大変動を示します。

外側のループのコントローラー ゲインの変化

外側のループの解析では、外側のループの PI コントローラー ブロック C1 のゲインを変化させます。比例ゲイン (Kp1) および積分ゲイン (Ki1) を 20% の範囲で変化させます。

Kp1_range = linspace(Kp1*0.8,Kp1*1.2,6);
Ki1_range = linspace(Ki1*0.8,Ki1*1.2,4);
[Kp1_grid, Ki1_grid] = ndgrid(Kp1_range,Ki1_range);

params(1).Name = 'Kp1';
params(1).Value = Kp1_grid;
params(2).Name = 'Ki1';
params(2).Value = Ki1_grid;

sllin.Parameters = params;

内側のループ解析のパラメーター グリッドを設定するワークフローと同様に、6 行 4 列のパラメーター グリットを指定する構造体 params を作成します。新しいパラメーター グリッドを使用するように sllin.Parameters を再設定します。これで sllinKi2 および Kp2 の既定値を使用します。

基準からプラント出力への閉ループ伝達関数の解析

外側のループ解析を続行する前に、sllin の永続的な開始点のリストから e1 を削除します。

removeOpening(sllin,'e1');

基準信号 r からプラント出力 y1m への閉ループ伝達関数を取得するには、解析ポイントとして ry1msllin に追加します。

addPoint(sllin,{'r','y1m'});

r から y1m への伝達関数を取得します。

r2yo = getIOTransfer(sllin,'r','y1m');

r2yo のステップ応答をプロットします。

stepplot(r2yo);

ステップ応答は、すべてのモデルで不足減衰となります。

プラント出力での外側のループの感度の解析

プラント出力で外側のループの感度を取得するには、解析ポイントとして y1 を使用します。解析ポイントとして y1sllin に追加します。

addPoint(sllin,'y1');

y1 で外側のループの感度を取得します。

So = getSensitivity(sllin,'y1');

So のステップ応答をプロットします。

stepplot(So);

このプロットは、プラント出力 y1 でのステップ外乱の抑制に約 15 秒かかることを示します。

Simulink モデルを閉じます。

bdclose(mdl);