操作条件による要件の変更
ゲイン スケジュール制御システムを調整する際、設計グリッドのさまざまな点で異なる設計要件を適用すると便利な場合があります。たとえば、次のことが可能です。
設計点に明示的あるいは暗黙的に依存する可変調整目標を指定する。
調整目標を設計点のサブセットで適用し、他の設計点では無視する。
設計点を特定の
systune
実行から排除するが、解析や他の調整操作のために維持する。設計と解析のすべての段階から設計点を削除する。
可変調整目標の定義
設計点によって変化する調整目標を定義するにはいくつかの方法があります。
可変目標の作成
varyingGoal
コマンドを使って暗黙的または明示的に設計点に依存する調整目標を構築します。
たとえば、設計点のグリッド全体にわたる可変のゲイン余裕と位相余裕を指定する調整目標を作成します。次の 5 行 5 列の設計点グリッドを使用してコントローラーを調整すると仮定します。
[alpha,V] = ndgrid(linspace(0,20,5),linspace(700,1300,5));
さらに、次のようにそれぞれの設計点に対応するターゲット ゲイン余裕とターゲット位相余裕の 5 行 5 列の配列があるとします。
[GM,PM] = ndgrid(linspace(7,20,5),linspace(45,70,5));
各設計点で指定された余裕を適用するには、まず余裕目標のためのテンプレートを作成します。テンプレートは、ゲイン余裕と位相余裕の値を受け取って、これらの余裕を含む TuningGoal.Margins
オブジェクトを返す関数です。
FH = @(gm,pm) TuningGoal.Margins('u',gm,pm);
テンプレートと余裕の配列を使用して可変目標を作成します。
VG = varyingGoal(FH,GM,PM);
どの設計点にどの目標が適用されるかをトレースしやすくするため、SamplingGrid
プロパティを使用して VG
に設計点情報を追加します。
VG.SamplingGrid = struct('alpha',alpha,'V',V);
VG
は、他の任意の調整目標と同じように systune
で使用します。viewGoal
を使用して調整目標を可視化し、ターゲット余裕を満たさない設計点を特定します。可変調整目標の場合、viewGoal
プロットに含まれているスライダーを使用して特定の設計点での目標とシステム性能を調査することができます。ゲイン スケジュール制御システムの検証を参照してください。
テンプレート関数によって、設計目標を非常に柔軟に作成することができます。たとえば、パラメーター (a,b)
の自明でない関数としてターゲット オーバーシュートを構築する関数 goalspec(a,b)
を記述して、その関数を MATLAB® ファイルに保存できます。その場合、テンプレート関数は goalspec
を呼び出します。
FH = @(a,b) TuningGoal.Overshoot('r',y',goalspec(a,b));
可変目標の構成の詳細については、varyingGoal
のリファレンス ページを参照してください。
各設計点の個別の要件の作成
設計点によって異なる要件を適用するもう 1 つの方法は、各設計点について要件の個別のインスタンスを作成することです。設計配列内のいくつかのモデルのみに適用される目標がある場合、この方法が役立つことがあります。たとえば、スケジューリング変数によって異なる交差周波数をもつ 1/s ループ整形を最初の 5 つの設計点のみに適用するとします。また、設計点ごとのターゲット帯域幅を含むベクトル wc
を作成したとします。次に、設計点ごとに 1 つの TuningGoal.LoopShape
要件を作成できます。要件の Models
プロパティを使用して、それぞれの TuningGoal.LoopShape
要件を対応する設計点に関連付けます。
for ct = 1:length(wc) R(ct) = TuningGoal.LoopShape('u',wc(ct)); R(ct).Model = ct; end
グリッドのすべての設計点が wc
でカバーされる場合、この方法は varyingGoal
オブジェクトを使用することと等価です。これは、いくつかの設計点のみを制約する場合に varyingGoal
の代わりに利用できる便利な方法です。
モデルへの変動の組み込み
変化する要件を作成するのではなく、要件の変化する部分を制御システムの閉ループ モデルに組み込むことができます。この方法は、すべての設計点を 1 つの一様の目標でカバーすることを可能にする目標の正規化の 1 つの形式です。
たとえば、d
から y
へのゲインを、スケジューリング変数によって異なる量に制限するとします。T0
は、各設計点の閉ループ システムのモデルの配列であるとします。さらに、各設計点 σ の最大ゲイン値のテーブル gmax
を作成しているものとします。次に、別の出力 ys
= y/gmax
を閉ループ モデルに次のように追加します。
% Create array of scalar gains 1/gmax yScaling = reshape(1./gmax,[1 1 size(gmax)]); yScaling = ss(yScaling,'InputName','y','OutputName','ys'); % Connect these gains in series to y output of T0 T0 = connect(T0,yScaling,T0.InputName,[T0.OutputName ; {'ys'}]);
最大ゲインは、テーブル gmax
に従って各設計点で変化します。d
から、スケーリングされた出力 ys
へのゲインを 1 に制限する 1 つの要件を使用します。
R = TuningGoal.Gain('d','ys',1);
このような要件の効率的な正規化によって、要件の変動性が要件オブジェクト R
から閉ループ モデル T0
に移動します。
Simulink® では、関連するモデル入力と出力をゲイン ブロックを通して送ることで同様の方法を使用できます。次に、モデルを線形化するときにブロックのゲイン値を操作条件によって変更します。たとえば、ゲインを MATLAB 変数に設定し、slLinearizer
の Parameters
プロパティを使用して、各線形化条件によって変数値を変更します。
設計点のサブセットでの調整目標の適用
調整目標の適用を設計グリッドにあるモデルのサブセットに制約するには、調整目標の Models
プロパティを使用します。モデルを指定するには、その線形インデックスをモデル配列で使用します。たとえば、調整目標 Req
があると仮定します。Req
を、3 行 3 列の設計グリッドの最初と最後のモデルにのみ適用されるように構成します。
Req.Models = [1,9];
Req
を厳密な目標または柔軟な目標として systune
を呼び出すと、systune
は Req
をこれらのモデルについて適用し、グリッドの残りの部分では無視します。
systune
実行からの設計点の排除
配列から対応するモデルを削除したり、調整目標を再構成しなくても、1 つ以上の設計点を調整から排除することができます。これを行うと、たとえば設計グリッド全体の調整で設計要件が満たされないときに問題のある設計点を特定する場合などに役立つことがあります。また、性能解析や追加の調整のために維持する設計点を、特定の調整実行から排除する場合にも便利です。
systuneOptions
の SkipModels
オプションを使って、設計グリッド内で調整から排除するモデルを指定します。モデルを指定するには、その線形インデックスをモデル配列で使用します。たとえば、systuneOptions
を、3 行 3 列の設計グリッドの最初と最後のモデルをスキップするように構成します。
opt = systuneOptions; opt.SkipModels = [1,9];
opt
を指定して systune
を呼び出すと、調整アルゴリズムでこれらのモデルが無視されます。
代わりに設計点をモデル グリッドから完全に削除して、調整や解析のどの段階にも影響しないようにする方法もあります。そのためには voidModel
を使用して、モデル配列内の指定のモデルを NaN
に置換します。このオプションは、サンプリング グリッドに無関係な設計点や物理的にありえない設計点が含まれる場合に便利です。voidModel
を使用すると、ほぼ規則的な設計点グリッドにわたる設計が可能です。
参考
viewGoal
| varyingGoal
| systuneOptions