Main Content

getValue

一般化モデルの現在値

説明

curval = getValue(M) は、一般化 LTI モデルまたは一般化行列 M の現在値 curval を返します。現在値は、M 内の制御設計ブロックをすべてその現在の値に置き換えることで取得されます。不確かさをもつブロックについては、現在の値がブロックのノミナル値です。

curval = getValue(M,blockvalues) は構造体 blockvalues に指定されたブロック値を使って現在値を計算します。blockvalues のフィールド名と値は、ブロック名とそれに対応する値を指定します。blockvalues に指定されていない M のブロックはその現在の値で置き換えられます。

curval = getValue(M,Mref) は一般化モデル Mref からブロック値を継承します。この構文は、curval = getValue(M,Mref.Blocks) と等価です。この構文を使用し、他の場所で計算されたブロック値 (たとえば systunelooptune、Robust Control Toolbox™ コマンド hinfstruct (Robust Control Toolbox) などの調整コマンドで取得した調整された値) を使用して M の現在の値を評価します。

すべて折りたたむ

この例は、getValue を使用して一般化 LTI モデルにある制御設計ブロックを指定の置換値に置き換える方法を示します。

閉ループ システム モデルを作成

次の閉ループ システムを検討します。

次のコードは、G(s)=(s-1)(s+1)3 と調整可能な PI コントローラー C でこのシステムのgenssモデルを作成します。

G = zpk(1,[-1,-1,-1],1);
C = tunablePID('C','pi');
Try = feedback(G*C,1)
Generalized continuous-time state-space model with 1 outputs, 1 inputs, 4 states, and the following blocks:
  C: Tunable PID controller, 1 occurrences.

Type "ss(Try)" to see the current value and "Try.Blocks" to interact with the blocks.

制御設計ブロックの現在値とフィードバック ループ ゲインを確認

genss モデル Try には 1 つの制御設計ブロック C があります。ブロック C は既定値に初期化され、モデル Try には C の現在の値に従って現在の値があります。getValue を使用して CTry を評価し、現在の値を確認します。

C を評価して現在値を取得

このコマンドでは、C の調整可能なパラメーターの現在の値を反映する係数をもつ数値の pid オブジェクトが返されます。

Cnow = getValue(C)
Cnow =
 
        1 
  Ki * ---
        s 

  with Ki = 0.001
 
Name: C
Continuous-time I-only controller.

Try を評価して現在値を取得

このコマンドは feedback(G*Cnow,1) と等価である数値モデルを返します。

Tnow = getValue(Try)
Tnow =
 
  A = 
                  ?        ?        ?  C.Integ
   ?             -1    1.414        0        0
   ?              0       -1        1        0
   ?              0        0       -1    0.002
   C.Integ   0.7071     -0.5        0        0
 
  B = 
            u1
   ?         0
   ?         0
   ?         0
   C.Integ   1
 
  C = 
             ?        ?        ?  C.Integ
   y1  -0.7071      0.5        0        0
 
  D = 
       u1
   y1   0
 
Continuous-time state-space model.

この例では、getValue を使用して、ブロック値に加えた変更を 1 つのモデルから別のモデルに伝播する方法を示します。

モデルを調整

この手法は、systunelooptunehinfstruct (Robust Control Toolbox)などの調整コマンドで調整されたモデルやブロックの値にアクセスするときに便利です。たとえば、2 つの調整可能なブロック C1C2 がある制御システム T0 の閉ループ モデルがある場合、次を使用してこれを調整できます。

[T,fSoft] = systune(T0,SoftReqs);

調整後の値にアクセス

次に、C1C2 の調整された値、および C1C2 に依存する閉ループ モデル H に次を使用してアクセスします。

C1t = getValue(C1,T);

C2t = getValue(C2,T);

Ht = getValue(H,T);

入力引数

すべて折りたたむ

対応するオブジェクトを使用して作成された一般化 LTI モデルまたは一般化行列

置き換えのために M のブロックを指定している構造体と、それらのブロックを置き換える値。

blockvalues のフィールド名は M の制御設計ブロックの名前と一致します。このフィールド値を使って M の対応するブロックの置換値を指定します。フィールド値には、数値、動的システム モデル、静的モデルを使用できます。フィールド値の一部が制御設計ブロックまたは一般化 LTI モデルの場合、それらのモデルの現在値は curval を計算するために使用されます。

基準となる一般化 LTI モデルMref を指定した場合、getValueM にあるブロックに名前が一致する Mref のブロックの現在の値を使用して curval を計算します。

出力引数

すべて折りたたむ

M の現在値を表す数値配列または数値 LTI モデル

M の指定された制御設計ブロックの置換値を指定しない場合、getValue はそのブロックの現在の値を使用します。

バージョン履歴

R2011b で導入

参考

| | | | (Robust Control Toolbox)