Main Content

connect

動的システムのブロック線図相互接続

    説明

    sysc = connect(sys1,...sysN,inputs,outputs) は、信号名に基づいて、モデルおよびブロック線図要素 sys1,...sysN を接続します。connect コマンドは、sys1,...,sysNInputName プロパティと OutputName プロパティで指定された名前に一致する名前をもつ入力チャネルと出力チャネルを接続することにより、ブロック線図の要素を相互に接続します。統合モデル sysc は動的システム モデルであり、inputsoutputs によりそれぞれ指定される入力と出力をもちます。

    sysc = connect(sys1,...sysN,inputs,outputs,APs) は、APs で指定された各信号箇所に AnalysisPoint を挿入します。解析ポイントは、統合モデル内の内部信号である対象箇所をマークするために使用します。たとえば、ループ伝達関数を抽出する位置や安定余裕を測定する位置が対象箇所となります。

    sysc = connect(blksys,connections,inputs,outputs) は、インデックスベースの相互接続を使用して、統合された、未接続のモデル blksys から sysc を作成します。行列 connections は、blksys の出力と入力がどのように相互接続されるかを指定します。インデックスベースの相互接続では、inputsoutputsblksys のどの入力と出力が sysc の外部入力と外部出力になるかを指定するインデックス ベクトルです。この構文は、接続するすべてのモデルのあらゆる入力と出力に名前を割り当てるとは限らない場合に便利です。ただし、通常は、名前を付けた信号を追跡する方が簡単です。

    sysc = connect(___,opts) は、sysc のダイナミクスに寄与しない未接続の状態を保持するなど、追加オプションを使用して、相互接続されているモデルを作成します。opts を作成するには、connectOptions を使用します。opts は、上記のどの構文でも入力引数とともに使用できます。

    すべて折りたたむ

    以下のような "r" から "y" へのブロック線図の統合モデルを作成します。

    connect1.png

    このモデルにはプラント G、フィードバック コントローラー C、およびフィードフォワード コントローラー F が含まれています。これらの各要素を表す動的システム モデルを作成します。

    C = pid(2,1); 
    G = zpk([],[-1,-1,-5],1);
    F = tf(3,[1 3]);

    信号名を使用してブロック線図を作成する準備として、ブロック線図に示される入力名と出力名を各要素に割り当てます。これを行うには、要素の InputName プロパティと OutputName プロパティを設定します。

    C.InputName = "e";  
    C.OutputName = "uc";
    
    G.InputName = "u";  
    G.OutputName = "y";
    
    F.InputName = "r";
    F.OutputName = "uf";

    ブロック線図には 2 つの加算結合も含まれます。1 つの加算結合は基準信号 "r" とプラント出力 "y" の差を受け取って誤差信号 "e" を計算します。もう 1 つの加算結合はフィードフォワード コントローラー出力 "uf" をフィードバック コントローラー出力 uc に加算してプラント入力 "u" を計算します。sumblkコマンドを使用してこれらの加算結合を作成します。sumblk を使用するには、加算結合の式を string として記述します。

    S1 = sumblk("e = r - y");
    S2 = sumblk("u = uc + uf");

    sumblk は、式で指定した入力名と出力名を使用して、和を表す tf モデル オブジェクトを返します。たとえば、S1 の信号名を確認します。

    S1
    S1 =
     
      From input "r" to output "e":
      1
     
      From input "y" to output "e":
      -1
     
    Static gain.
    

    ここで、すべての要素を結合して、"r" から "y" へのブロック線図内のシステムの応答を表す統合モデルを作成できます。connect に、結合する要素のリスト、統合モデルの目的の入力信号 r、および目的の出力信号 y を指定します。connect コマンドは、名前の一致する入力と出力を接続して、要素を自動的に連結します。

    T = connect(G,C,F,S1,S2,"r","y");
    size(T)
    State-space model with 1 outputs, 1 inputs, and 5 states.
    
    T.InputName
    ans = 1x1 cell array
        {'r'}
    
    
    T.OutputName
    ans = 1x1 cell array
        {'y'}
    
    

    上記の例の制御システムを作成します。ここで、GC、および F はすべて 2 入力 2 出力のモデルです。

    connect1.png

    この例では、信号 "r""y""e" などはすべて、それぞれ 2 要素のベクトル信号です。まず、モデルを作成してその入力と出力に名前を付けます。

    C = [pid(2,1), 0;
         0,pid(5,6)];
    F = [tf(3,[1 3]), 0;
         0, tf(3,[1 3])];
    G = ss(-1,[1,2],[1;-1],0);

    入力名と出力名を割り当てます。

    C.InputName = "e";  
    C.OutputName = "uc";
    
    G.InputName = "u";  
    G.OutputName = "y";
    
    F.InputName = "r";
    F.OutputName = "uf";

    ベクトル値の信号に単一の名前を割り当てると、自動的にベクトル拡張が適用され、それぞれの入力チャネルと出力チャネルに一意の名前が付与されます。たとえば、プラント入力の名前を確認します。

    G.InputName
    ans = 2x1 cell
        {'u(1)'}
        {'u(2)'}
    
    

    この例では、ブロック線図のすべての MIMO コンポーネントの信号名でベクトル拡張を使用しています。代わりに、信号に個別に名前を付けることもできます。ただし、連結する信号の名前が一致している必要があります。一部のブロック線図の要素で個別に名前を付けた信号を使用する例については、固定コンポーネントと調整可能なコンポーネントを含む MIMO 制御システムを参照してください。

    次に、ベクトル値の加算結合を作成します。sumblk も、ベクトル信号に対して sum 式で指定された信号名を自動的に拡張します。これは、S2 の入力名を調べることで確認できます。

    S1 = sumblk("e = r - y",2);
    S2 = sumblk("u = uc + uf",2);
    S2.InputName
    ans = 4x1 cell
        {'uc(1)'}
        {'uc(2)'}
        {'uf(1)'}
        {'uf(2)'}
    
    

    すべての要素を結合して、"y" に対する応答 "r" を表す統合モデル (つまり、[r(1),r(2)] から [y(1),y(2)]) を作成します。

    T = connect(G,C,F,S1,S2,"r","y");
    size(T)
    State-space model with 2 outputs, 2 inputs, and 5 states.
    
    T.InputName
    ans = 2x1 cell
        {'r(1)'}
        {'r(2)'}
    
    
    T.OutputName
    ans = 2x1 cell
        {'y(1)'}
        {'y(2)'}
    
    

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

    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:
      CONNECT_AP1: 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");

    インデックスベースの相互接続を使用して、すべての入力と出力に名前を付けずに、モデル要素を接続できます。方法を理解するために、インデックスベースの相互接続を使用して、r から y までの以下のフィードバック ループのモデルを作成します。

    まず、閉ループ システムの要素であるプラントとコントローラーを作成します。

    C = pid(2,1); 
    G = zpk([],[-1,-1,-5],1);

    append を使用して、要素を単一の未接続の統合モデルにグループ化します。

    blksys = append(C,G);

    append は、以下のブロック線図に示されているように、指定したモデルを MIMO スタック モデルに配置します。

    blksys.png

    このスタック モデルをフィードバック ループに等価にするには、connect で以下の接続を行う必要があります。

    • G の入力が C の出力を受け取るか、w1u2 に入力される。

    • C の入力が G の出力の負を受け取るか、-w2-u1 に入力される。

    このような接続を行うように connect に指示するには、blksys の入力ベクトル u と出力ベクトル y で表される 1 つの接続または加算結合を各行が指定する行列を作成します。

    connections = [2  1;  %  w1 feeds into u2
                   1 -2]; % -w2 feeds into u1

    最後に、閉ループ モデルの外部入力と外部出力で使用する blksys の入力と出力をインデックスで指定します。

    inputs = 1;  % r drives u1
    outputs = 2; % y is y2

    これで、閉ループ モデルを完成させることができます。

    sysc = connect(blksys,connections,inputs,outputs);
    step(sysc)

    この例では、それぞれが解析ポイントをもつ、connect で作成した 2 つのモデルを結合する場合の想定される動作を示します。

    次のコマンドを使用して、カスケード フィードバック ループのモデルを作成します。

    G1 = tf([1],[1 0]);
    G1.u = 'OuterError';
    G1.y = 'InnerCmd';
    G2 = tf([1], [1 1]);
    G2.u = 'InnerError';
    G2.y = 'ActuatorCmd';
    SumOuter = sumblk('OuterError = OuterCmd - Outer');
    SumInner = sumblk('InnerError = InnerCmd - Inner');
    Sys1 = connect(G1,G2,SumOuter,SumInner,{'OuterCmd','Outer','Inner'},'ActuatorCmd', {'InnerError','OuterError'})
    Generalized continuous-time state-space model with 1 outputs, 3 inputs, 2 states, and the following blocks:
      CONNECT_AP1: Analysis point, 2 channels, 1 occurrences.
    
    Type "ss(Sys1)" to see the current value and "Sys1.Blocks" to interact with the blocks.
    

    一般化モデル Sys1 には、InnerErrorOuterError のチャネルをもつ単一の解析ポイント ブロックが含まれています。

    あるいは、内側のループと外側のループを個別に定義することもできます。

    P1 = connect(G1,SumOuter,{'OuterCmd','Outer'},'InnerCmd','OuterError')
    Generalized continuous-time state-space model with 1 outputs, 2 inputs, 1 states, and the following blocks:
      CONNECT_AP1: Analysis point, 1 channels, 1 occurrences.
    
    Type "ss(P1)" to see the current value and "P1.Blocks" to interact with the blocks.
    
    P2 = connect(G2,SumInner,{'InnerCmd','Inner'},'ActuatorCmd','InnerError')
    Generalized continuous-time state-space model with 1 outputs, 2 inputs, 1 states, and the following blocks:
      CONNECT_AP1: Analysis point, 1 channels, 1 occurrences.
    
    Type "ss(P2)" to see the current value and "P2.Blocks" to interact with the blocks.
    

    P1P2 の両方に CONNECT_AP1 という名前の解析ブロックがあります。次に、これらの 2 つのモデルを結合してカスケード式ループのモデル Sys2 を作成します。

    Sys2 = connect(P1,P2,{'OuterCmd','Outer','Inner'},'ActuatorCmd')
    Generalized continuous-time state-space model with 1 outputs, 3 inputs, 2 states, and the following blocks:
      CONNECT_AP1: Analysis point, 1 channels, 1 occurrences.
      CONNECT_AP2: Analysis point, 1 channels, 1 occurrences.
    
    Type "ss(Sys2)" to see the current value and "Sys2.Blocks" to interact with the blocks.
    

    このモデルには、CONNECT_AP1 および CONNECT_AP2 という名前の 2 つの別々の解析ポイント ブロックが含まれています。P1P2AnalysisPoint ブロックの名前は、競合を避けるために自動的に変更されます。

    入力引数

    すべて折りたたむ

    相互接続する動的システム モデルまたは他のブロック線図の要素。以下として指定します。

    • tfzpkssfrdpid モデル オブジェクトなど、任意の数値の LTI モデル オブジェクト。

    • genssgenfrduss (Robust Control Toolbox)ufrd (Robust Control Toolbox) モデルなど、一般化された、あるいは不確かさをもつ LTI モデル。

    • tunablePIDtunableSStunableGaintunableTFtunableSurfaceultidyn (Robust Control Toolbox)umargin (Robust Control Toolbox) ブロックなど、調整可能な、あるいは不確かさをもつブロック線図の要素を表す制御設計ブロック。

    • ブロック線図内でシステム応答を抽出する位置を表す AnalysisPoint ブロック。

    • sumblk を使用して作成した加算結合。

    • idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox) モデルなどの同定された LTI モデル。

    • sparss または mechss モデル オブジェクトで表されたスパース モデル。

    • ltvss または lpvss モデル オブジェクトで表された時変モデルまたはパラメーター変動モデル。

    結合モデルの入力。文字ベクトル、文字ベクトルの cell 配列、string、string ベクトル、正の整数、または正の整数のベクトルとして指定します。

    • 名前ベースの相互接続では、ブロック線図の要素 sys1,...sysN の 1 つ以上の InputName プロパティまたは OutputName プロパティに出現する 1 つ以上の信号をリストした文字ベクトル、string、文字ベクトルの cell 配列、string 配列を指定します。たとえば、{'ref','dist','noise'} とします。

    • インデックス ベースの相互接続では、統合モデルの入力にする blksys の入力の 1 つ以上のインデックスを指定する正の整数または正の整数のベクトルを指定します。

    結合モデルの出力。文字ベクトル、文字ベクトルの cell 配列、string、string ベクトル、正の整数、または正の整数のベクトルとして指定します。

    • 名前ベースの相互接続では、ブロック線図の要素 sys1,...sysN の 1 つ以上の InputName プロパティまたは OutputName プロパティに出現する 1 つ以上の信号をリストした文字ベクトル、string、文字ベクトルの cell 配列、string 配列を指定します。たとえば、{'ref','dist','noise'} とします。

    • インデックス ベースの相互接続では、統合モデルの出力にする blksys の入力の 1 つ以上のインデックスを指定する正の整数または正の整数のベクトルを指定します。

    統合モデル内の対象箇所 (内部信号)。'X'{'AP1','AP2'} などの文字ベクトルまたは文字ベクトルの cell 配列、あるいは string または string ベクトルとして指定します。結果として得られるモデルには、各対象箇所に解析ポイントが含まれます (AnalysisPoint を参照)。APs 内の各位置は、1 つ以上のブロック線図要素 sys1,...sysNInputName または OutputName プロパティにある項目に対応しなければなりません。

    未接続の統合モデル。append で作成した動的システム モデルとして指定します。インデックスベースの相互接続では、blksys を使用します。append コマンドは、ブロック線図の要素の入力と出力間を相互接続することなく、それらの入力と出力を縦に並べます。たとえば、ブロック線図に動的システム モデル CGS が含まれている場合は、次のコマンドを使って blksys を作成します。

    blksys = append(C,G,S)

    次に、connections 引数を使用して blksys の入力と出力間の相互接続を指定します。例については、インデックスベースの相互接続を参照してください。

    ブロック線図の接続と加算結合。行列として指定します。インデックスベースの相互接続では、connection を使用します。connections の各行は、未接続の統合モデル blksys の入力ベクトル u と出力ベクトル w で表される 1 つの接続または加算結合を指定します。たとえば、次の行があるとします。

    [3 2 0 0]

    これは、blksys の 2 番目の出力である w(2)blksys の 3 番目の入力である u(3) に接続されることを指定します。また、次の行が指定されているとします。

    [7 2 -15 6]
    

    これは、w(2) - w(15) + w(6) の和が blksys の 7 番目の入力である u(7) に入力されることを示しています。

    特定の入力または出力に対する接続を指定しない場合、connect は統合モデルからその入力または出力を省略します。

    相互接続の追加オプション。connectOptions で作成するオプション セットとして指定されます。

    既定では、connect コマンドは、相互接続されているシステムの入力と出力間のパスでダイナミクスに寄与しない状態を破棄します。相互接続モデルでこのような状態を保持するには、connectOptions を使用します。このオプションは、たとえば、コンポーネントの既知の初期状態値から、相互接続されたシステムの応答を計算する場合などに便利です。

    出力引数

    すべて折りたたむ

    状態空間モデルまたは周波数応答モデルとして返される、相互接続されたシステム。返されるモデルのタイプは入力モデルによって異なります。以下に例を示します。

    • 数値 LTI モデル (frd モデル以外) の相互接続は ss モデルを返します。

    • 数値 LTI モデルを制御設計ブロックと相互接続すると、一般化状態空間モデルが返されます。たとえば、tf モデルを tunablePID 制御設計ブロックと相互接続すると genss モデルが返されます。

    • 数値 LTI モデルをスパース モデルと相互接続すると、スパース モデルが返されます。

    • 任意のモデルを周波数応答データ モデルと相互接続すると、周波数応答データ モデルが返されます。

    既定では、connect は、相互接続されているモデルの指定された入力から指定された出力への I/O 伝達関数に影響しない状態を自動的に破棄します。未接続の状態を保持するには、connectOptionsSimplify オプションを false に設定します。以下に例を示します。

    opt = connectOptions('Simplify',false);
    sysc = connect(sys1,sys2,sys3,'r','y',opt);

    バージョン履歴

    R2006a より前に導入

    すべて展開する