Main Content

AnalysisPoint

線形解析の対象のポイント

説明

AnalysisPoint は、線形解析およびコントローラー調整の対象のポイントとして制御システム モデル内の場所をマークするための制御設計ブロックです。AnalysisPoint ブロックを数値 LTI モデル、調整可能な LTI モデルおよび他の制御設計ブロックと組み合わせて、制御システムの調整可能なモデルを作成できます。AnalysisPoint の場所は、getIOTransfergetLoopTransfer などのコマンドによる解析で使用できます。そのような場所は、制御システムの調整の設計目標を指定するために使用することもできます。

AnalysisPoint ブロックを数値 LTI モデル、調整可能な LTI モデルおよび他の制御設計ブロックと組み合わせて、制御システムの調整可能なモデルを作成できます。AnalysisPoint の場所は、getIOTransfergetLoopTransfer などのコマンドによる解析で使用できます。そのような場所は、制御システムの調整の設計目標を指定するために使用することもできます。

たとえば、次の制御システムについて考えます。

この制御システムの u において加えられた外乱の影響に注目すると仮定します。AnalysisPoint ブロックを位置 u に挿入すると、次の図のように、暗黙的な入力と出力、およびその場所でループを開くオプションが関連付けられます。

TAnalysisPoint ブロック AP_u を含む制御システムのモデルであると仮定します。その場合、コマンド getIOTransfer(T,'AP_u','y') を実行すると、u から y までの閉ループ伝達関数のモデルが返されます。同様に、コマンド getLoopTransfer(T,'AP_u',-1) を実行すると、位置 u で測定された負のフィードバックの開ループ応答のモデル CG が返されます。

systune などの調整コマンドを使用して制御システムを調整する場合、AnalysisPoint ブロックも有益です。AnalysisPoint ブロックを使用して、TuningGoal.LoopShapeTuningGoal.Margins などの開ループ調整要件に対応するループ開始位置をマークできます。また、AnalysisPoint ブロックを使用して、TuningGoal.Gain などの調整要件に対応する、指定された入力や出力をマークすることもできます。たとえば、Req = TuningGoal.Margins('AP_u',5,40) により、位置 u においてゲイン余裕と位相余裕を制約します。

AnalysisPoint ブロックは、AnalysisPoint コマンドを使用して明示的に作成できます。また、モデルの相互接続コマンドを使用して他のブロック線図コンポーネントと接続できます。たとえば、次のコードは前述のシステムのモデルを作成します

G = tf(1,[1 2]);
C = tunablePID('C','pi');
AP_u = AnalysisPoint('u');
T = feedback(G*AP_u*C,1);      % closed loop r->y

解析ポイントは connect コマンドを使用して暗黙的に作成することもできます。次の構文では、複数のモデル sys1,sys2,...,sysN を相互接続することによって、動的システム モデルを解析ポイントと共に作成します。

sys = connect(sys1,sys2,...,sysN,inputs,outputs,APs);

APs は、解析ポイントを挿入する信号箇所をリストします。これらの箇所に対応するチャネルとともに AnalysisPoint ブロックが自動的に作成され、挿入されます。詳細は、connect を参照してください。

作成

説明

AP = AnalysisPoint(name) により、単一チャネルの解析ポイントを作成します。AP を制御システムの一般化モデルの任意の場所に挿入して、線形解析またはコントローラー調整の対象のポイントをマークします。name はブロック名を指定します。

AP = AnalysisPoint(name,N) は、N 個のチャネルをもつマルチチャネルの解析ポイントを作成します。このブロックを使用して、ベクトル値の信号を対象のポイントとしてマークしたり、複数の対象のポイントを一緒にまとめます。

入力引数

すべて展開する

解析ポイント名。'AP' などの文字ベクトルとして指定します。この入力引数は、AnalysisPoint ブロックの Name プロパティの値を設定します (プロパティを参照)。このブロックを使用して制御システム モデルを作成する場合、Name プロパティは、作成された genss モデルの Blocks リストに表示される内容になります。

データ型: char

マルチチャネル解析ポイントのチャネル数。スカラー整数として指定します。

データ型: double

プロパティ

すべて展開する

AnalysisPoint ブロックのチャネル名。文字ベクトルまたは文字ベクトルの cell 配列として指定します。

既定では、解析ポイントのチャネルは、name 引数に基づいて名前が付けられます。たとえば、'AP' という名前の単一チャネルの解析ポイント AP がある場合、既定では AP.Location = 'AP' となります。マルチチャネル解析ポイントがある場合、既定では AP.Location = {'AP(1)','AP(2)',...} となります。チャネル名をカスタマイズする場合は、AP.Location を別の値に設定します。

データ型: char | cell

ループ開始の状態。論理値または論理値のベクトルとして指定します。このプロパティは、解析ポイントでループが開いているか閉じているかを追跡します。

たとえば、次の図のフィードバック ループを考えます。

このフィードバック ループは次のようにモデル化できます。

G = tf(1,[1 2]);
C = tunablePID('C','pi');
X = AnalysisPoint('X');
T = feedback(G*C,X);
T.InputName = 'r';
T.OutputName = 'y';

既定では、X の解析ポイントは閉じています。X で開いているフィードバック ループの r から y までの伝達関数を、次のように取得できます。

 Try = getIOTransfer(T,'r','y','X');

結果の一般化状態空間 (genss) モデルで、AnalysisPoint ブロック 'X' はオープンとしてマークされます。つまり、Try.Blocks.X.Open = 1 です。

マルチチャネル解析ポイントでは、Open は、解析ポイントがもつチャネル数と同数の要素をもつ logical ベクトルです。

データ型: logical

サンプル時間。AnalysisPoint ブロックでは、このプロパティの値が、接続した他のブロックおよびモデルのサンプル時間に自動的に設定されます。

データ型: double

モデル内の時間変数、サンプル時間 Ts および何らかのむだ時間の単位。以下のいずれかの値として指定します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

このプロパティを変更しても他のプロパティには影響しないため、システム全体の動作が変更されます。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

データ型: char

入力チャネル名。以下のいずれかとして指定します。

  • 文字ベクトル — 単入力モデルの場合 (たとえば 'controls' など)。

  • 文字ベクトルの cell 配列 — 多入力モデルの場合。

または、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てます。たとえば、sys が 2 入力モデルである場合は、以下のようになります。

sys.InputName = 'controls';

入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。

省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.usys.InputName と同じです。

以下を含めて、入力チャネル名はいくつかの用途をもちます。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

データ型: char

入力チャネル単位。以下のいずれかとして指定します。

  • 文字ベクトル — 単入力モデルの場合 (たとえば 'seconds' など)。

  • 文字ベクトルの cell 配列 — 多入力モデルの場合。

InputUnit を使用して入力信号単位を追跡します。InputUnit はシステムの動作に影響しません。

データ型: char

入力チャネル グループ。InputGroup プロパティによって、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照することができます。入力グループを構造体として指定します。この構造体においてフィールド名はグループ名であり、フィールド値は各グループに属する入力チャネルです。以下に例を示します。

sys.InputGroup.controls = [1 2];
sys.InputGroup.noise = [3 5];

これは、入力チャネル 1、2 および 3、5 をそれぞれ含む controls および noise という名前の入力グループを作成します。その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

sys(:,'controls')

データ型: struct

出力チャネル名。次のいずれかとして指定されます。

  • 文字ベクトル — 単出力モデルの場合。たとえば、'measurements' とします。

  • 文字ベクトルの cell 配列 — 多出力モデルの場合。

または、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てます。たとえば、sys が 2 出力力モデルである場合は、以下のようになります。

sys.OutputName = 'measurements';

出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。

省略形表記 y を使用して、OutputName プロパティを参照できます。たとえば、sys.ysys.OutputName と同じです。

以下を含めて、出力チャネル名はいくつかの用途をもちます。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

データ型: char

出力チャネル単位。次のいずれかとして指定されます。

  • 文字ベクトル — 単出力モデルの場合。たとえば、'seconds' とします。

  • 文字ベクトルの cell 配列 — 多出力モデルの場合。

OutputUnit を使用して出力信号単位を追跡します。OutputUnit はシステムの動作に影響しません。

データ型: char

出力チャネル グループ。OutputGroup プロパティによって、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照できます。出力グループを構造体として指定します。この構造体内においてフィールド名はグループ名であり、フィールド値は各グループに属する出力チャネルです。以下に例を示します。

sys.OutputGroup.temperature = [1];
sys.OutputGroup.measurement = [3 5];

これは、出力チャネル 1 および 3、5 をそれぞれ含む temperature および measurement という名前の出力グループを作成します。その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

sys('measurement',:)

データ型: struct

システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。

データ型: char

システムに関連付ける任意のテキスト。string または文字ベクトルの cell 配列として格納されます。プロパティには指定したデータ型が格納されます。たとえば、sys1sys2 が動的システム モデルである場合、その Notes プロパティを次のように設定できます。

sys1.Notes = "sys1 has a string.";
sys2.Notes = 'sys2 has a character vector.';
sys1.Notes
sys2.Notes
ans = 

    "sys1 has a string."


ans =

    'sys2 has a character vector.'

データ型: char | string

システムに関連付ける任意のデータ型。任意の MATLAB® データ型として指定します。

データ型: char

すべて折りたたむ

フィードバック パスに解析ポイントをもつ、次のフィードバック ループのモデルを作成します。

この例では、プラント モデルは G=1/(s+2) です。C は調整可能な PI コントローラー、X は解析ポイントです。

G = tf(1,[1 2]);
C = tunablePID('C','pi');
X = AnalysisPoint('X');
T = feedback(G*C,X); 
T.InputName = 'r';
T.OutputName = 'y';

T は調整可能な genss モデルです。T.Blocks にはモデルの制御設計ブロック (コントローラー C) と解析ポイント X が含まれています。

T.Blocks
ans = struct with fields:
    C: [1x1 tunablePID]
    X: [1x1 AnalysisPoint]

T のステップ応答を調べます。

stepplot(T)

Figure contains an axes object. The axes object with title From: r To: y contains an object of type line. This object represents T.

AnalysisPoint ブロックが存在しても、モデルのダイナミクスは変更されません。

システムの線形解析に解析ポイントを使用できます。たとえば、解析ポイントで加えられた外乱に対して、'y' におけるシステム応答を抽出します。

Txy = getIOTransfer(T,'X','y');

AnalysisPoint ブロックを使うと、そのポイントでフィードバック ループを一時的に開くこともできます。たとえば、'r' から 'y' までの開ループ応答を計算します。

Try_open = getIOTransfer(T,'r','y','X');

getIOTransfer への最後の引数として解析ポイント名を指定すると、その点でループが開いている応答を抽出します。Try_open のステップ応答を検証して、それが開ループ応答であることを確認します。

stepplot(Try_open);

Figure contains an axes object. The axes object with title From: r To: y contains an object of type line. This object represents Try\_open.

以下のブロック線図について考えます。

analysispoint1.png

feedback を使用してこの閉ループ システムのモデルを作成し、そのモデルを使用して r から y へのシステム応答を調べることができます。プラント入力で挿入された外乱に対する閉ループ システムの応答も調べるとします。そのために、connect を使用してシステムを構築し、位置 u に解析ポイントを挿入できます。

まず、ブロック線図で示されているように入力と出力に名前を付け、プラントとコントローラーのモデルを作成します。

C = pid(2,1); 
C.InputName = 'e';  
C.OutputName = 'u';

G = zpk([],[-1,-1],1);
G.InputName = 'u';  
G.OutputName = 'y';

基準信号 r とプラント出力 y の差を受け取って誤差信号 e を計算する加算結合を作成します。

Sum = sumblk('e = r - y');

CG、および加算結合を結合し、統合モデルを作成します。connect への APs 入力引数を使用して "u" に解析ポイントを挿入します。

input = 'r';
output = 'y';
APs = 'u';
CL = connect(G,C,Sum,input,output,APs)
Generalized continuous-time state-space model with 1 outputs, 1 inputs, 3 states, and the following blocks:
  AnalysisPoints_: Analysis point, 1 channels, 1 occurrences.

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

この閉ループ モデルは、AnalysisPoint制御設計ブロックを含む一般化状態空間 (genss) モデルです。CL にある解析ポイント チャネルの名前を確認するには、getPoints を使用します。

getPoints(CL)
ans = 1x1 cell array
    {'u'}

解析ポイントを挿入すると、次のブロック線図と等価のモデルが作成されます。ここで、AP_u は、チャネル名 u をもつ AnalysisPoint ブロックを指しています。

FeedbackLoopWithAnalysisPointExample_02.png

この解析ポイントを使用してシステム応答を抽出します。たとえば、次のコマンドでは、u に挿入された外乱に対する u での開ループ伝達と y での閉ループ応答が抽出されます。

L = getLoopTransfer(CL,'u',-1);
CLdist = getIOTransfer(CL,'u','y');

MIMO モデルで 2 つの解析ポイントをマークするブロックを作成します。

次の図の制御システムで、それぞれの信号がサイズが 2 のベクトル値であるものとします。つまり、信号 r{r(1),r(2)}y{y(1),y(2)} などのように表します。

そのため、フィードバック信号もサイズが 2 のベクトル値の信号になります。フィードバック パスに 2 つの解析ポイントをマークするブロックを作成します。

AP = AnalysisPoint('X',2)
Multi-channel analysis point at locations:
   X(1)
   X(2)

Type "ss(AP)" to see the current value.

AnalysisPoint ブロックは、MATLAB® ワークスペースに AP という変数として保存されます。また、ブロックの Name プロパティは X に設定されます。このブロックを数値 LTI モデルや他の制御設計ブロックと相互接続する場合、この解析ポイント ブロックは、結果として得られる genss モデルの Blocks プロパティで X として識別されます。ブロック名 X は自動的に拡張され、チャネル名 X(1)X(2) が生成されます。

モデルのブロック線図でチャネルが対応する信号の名前に合わせてチャネル名を変更すると便利なことがあります。たとえば、モデル内でマークする対象ポイントが、L および V という名前の信号であるとします。APLocation プロパティを変更して、これらの信号と名前を一致させます。

AP.Location = {'L';'V'}
Multi-channel analysis point at locations:
   L
   V

Type "ss(AP)" to see the current value.

チャネル名は変更されましたが、ブロック名は X のままです。

AP.Name
ans = 
'X'

そのため、このブロックを使って作成した genss モデルの Blocks プロパティでは、ブロックは引き続き X として識別されます。getPoints を使用して、genss モデル内の使用可能な解析ポイントのチャネル名を検出します。

バージョン履歴

R2014b で導入