このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
パラメーター値を変化させて複数の伝達関数を取得
この例では、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