パラメーター値を変化させて複数の伝達関数を取得
この例では、slLinearizer インターフェイスを使用して Simulink® モデルをバッチ線形化する方法を説明します。モデル パラメーター値を変化させて、モデルから複数の開ループと閉ループの伝達関数を取得します。
関数 linearize を使用して、同じ解析を実行できます。ただし、複数の開ループと閉ループの伝達関数を取得する場合、特にコンパイルを繰り返すには計算量が多すぎるモデルの場合は、slLinearizer の方がより効率的となることがあります。
この例ではパラメーターの変化がモデルの操作点に影響しないので、単一の操作点でモデルをバッチ線形化します。アプリケーションで使用されるパラメーターの変化によってモデルの操作点に影響がある場合、まずパラメーター値の各組み合わせでモデルを平衡化してください。関数 linearize を使用する例については、パラメーターの変化から派生した複数の操作点でのモデルのバッチ線形化を参照してください。
モデル用の slLinearizer インターフェイスの作成
この例で使用する scdcascade モデルには、一対のカスケード フィードバック制御ループが含まれています。それぞれのループには、PI コントローラーが含まれます。プラント モデル G1 (外側のループ) および G2 (内側のループ) は LTI モデルです。
slLinearizer インターフェイスを使用して、内側と外側のループのダイナミクスを解析します。
モデルを開きます。
mdl = 'scdcascade';
open_system(mdl)

関数 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]
コマンド ウィンドウに slLinearizer インターフェイスに関する情報が表示されます。このインターフェイスでは、変化させるパラメーターがまだ指定されていないので、Paramaeters プロパティは空です。
内側のループのコントローラー ゲインの変化
内側のループの解析では、内側のループの 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 のサンプル値を指定します。Kp2 と Ki2 の各組み合わせの伝達関数を取得するには、ndgrid を使用して、グリッド配列 Kp2_grid および Ki2_grid をもつ 6 行 4 列のパラメーター グリッドを作成します。sllin の Parameters プロパティを構造体 params で設定します。この構造体により、変化させるパラメーターとそれらのグリッド配列を指定します。
内側のループ用の閉ループ伝達関数の解析
内側のループの閉ループ全体としての伝達関数は、u1 から y2 への伝達関数と同じです。外側のループの影響を取り除くために、e1、y1m、または y1 でループを中断できます。この例では、e1 でループを中断します。
解析ポイントとして u1 および y2 を追加し、sllin の永続的な開始点として e1 を追加します。
addPoint(sllin,{'y2','u1'});
addOpening(sllin,'e1');
u1 から y2 への伝達関数を取得します。
r2yi = getIOTransfer(sllin,'u1','y2');
6 行 4 列の状態空間モデル配列 r2yi には、指定されたパラメーターの組み合わせそれぞれについて伝達関数が含まれます。モデルの初期条件は線形化の操作点として使用されます。
e1 は sllin の永続的な開始点であるため、r2yi には外側のループの影響が含まれません。
r2yi のステップ応答をプロットします。
stepplot(r2yi);

すべてのモデルのステップ応答は 10% の範囲で変化し、整定時間は 1.5 秒未満です。
プラント出力における内側のループの伝達関数の解析
e1 で外側のループが開いた状態で、y2 での内側のループの伝達関数を取得します。
Li = getLoopTransfer(sllin,'y2',-1);
既定では正のフィードバックが仮定され、scdcascade は負のフィードバックを使用するため、3 番目の入力引数を使用してフィードバックの符号を指定します。ここで、
となります。getLoopTransfer コマンドは状態空間 (ss) モデルの配列を、パラメーター グリッドの各エントリにつき 1 つ返します。Li の SamplingGrid プロパティは、対応する ss モデルでのパラメーター値と一致します。
のボード線図をプロットします。
bodeplot(Li)

すべてのモデルの振幅プロットは 3 dB の範囲で変化します。位相プロットは、[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 を再設定します。これで、sllin は Kp2 および Ki2 の既定値を使用するようになります。
基準からプラント出力への閉ループ伝達関数の解析
外側のループの解析を続行する前に、sllin の永続的な開始点のリストから e1 を削除します。
removeOpening(sllin,'e1');
基準信号 r からプラント出力 y1m への閉ループ伝達関数を取得するには、解析ポイントとして r と y1m を sllin に追加します。
addPoint(sllin,{'r','y1m'});
r から y1m への伝達関数を取得します。
r2yo = getIOTransfer(sllin,'r','y1m');
r2yo のステップ応答をプロットします。
stepplot(r2yo)

ステップ応答は、すべてのモデルで不足減衰となります。
プラント出力での外側のループの感度の解析
プラント出力で外側のループの感度を取得するには、解析ポイントとして y1 を sllin に追加します。
addPoint(sllin,'y1');
y1 で外側のループの感度を取得します。
So = getSensitivity(sllin,'y1');
So のステップ応答をプロットします。
stepplot(So)

プロットは、プラント出力 y1 でのステップ外乱の抑制に約 15 秒かかることを示しています。
線形化オフセットの取得
パラメーターを変化させてバッチ線形化を行う場合、線形化の操作点に対応する線形化オフセットを取得できます。これを行うには、slLinearizer インターフェイスの StoreOffsets 線形化オプションを設定します。
sllin.Options.StoreOffsets = true;
sllin を使用して線形化関数を呼び出すときに、info 構造体に線形化オフセットを返すことができます。
[r2yi,info] = getIOTransfer(sllin,'u1','y2');
このオフセットを使用して、LPV System ブロックを構成できます。これを行うには、まずオフセットを必要な形式に変換しなければなりません。linearize コマンドを使用する例については、昇圧コンバーター モデルの LPV 近似を参照してください。
offsets = getOffsetsForLPV(info);
モデルを閉じます。
bdclose(mdl)
参考
slLinearizer | addPoint | addOpening | getIOTransfer | getLoopTransfer | getSensitivity | getCompSensitivity | linearize