Main Content

getBlockInfo

ブロック線形化の診断情報の取得

説明

Simulink® モデルを線形化する際、個々のブロック線形化に関する診断情報を含む LinearizationAdvisor オブジェクトを作成できます。この診断情報を確認して、線形化の結果をトラブルシューティングすることができます。診断情報にアクセスするには関数 getBlockInfo を使用します。

blockInfo = getBlockInfo(advisor) は、LinearizationAdvisor オブジェクト advisor にリストされているすべてのブロックに関する診断情報を返します。

blockInfo = getBlockInfo(advisor,block) は、block にブロック パスが指定されているブロックの診断情報を返します。

blockInfo = getBlockInfo(advisor,index) は、index にインデックスが指定されているブロックの診断情報を返します。

すべて折りたたむ

Simulink モデルを読み込みます。

mdl = 'scdpendulum';
load_system(mdl)

モデルを線形化して LinearizationAdvisor オブジェクトを取得します。

io = getlinio(mdl);
opt = linearizeOptions('StoreAdvisor',true);
[linsys,~,info] = linearize(mdl,io,opt);
advisor = info.Advisor;

線形化で問題が生じる可能性のあるブロックを見つけます。

blocks = advise(advisor);

これらのブロックの診断を取得します。

diags = getBlockInfo(blocks)
diags = 
Linearization Diagnostics for the Blocks:

Block Info:
-----------
Index   BlockPath                                           Is On Path   Contributes To Linearization   Linearization Method   
1.      scdpendulum/pendulum/Saturation                     Yes          No                             Exact                  
2.      scdpendulum/angle_wrap/Trigonometric Function1      Yes          No                             Perturbation           
3.      scdpendulum/pendulum/Trigonometric Function         Yes          No                             Perturbation           

Simulink モデルを読み込みます。

mdl = 'scdpendulum';
load_system(mdl)

モデルを線形化して LinearizationAdvisor オブジェクトを取得します。

io = getlinio(mdl);
opt = linearizeOptions('StoreAdvisor',true);
[linsys,~,info] = linearize(mdl,io,opt);
advisor = info.Advisor;

Saturation ブロックの診断情報を取得します。

satDiag = getBlockInfo(advisor,'scdpendulum/pendulum/Saturation')
satDiag = 
Linearization Diagnostics for scdpendulum/pendulum/Saturation with properties:

                      IsOnPath: 'Yes'
    ContributesToLinearization: 'No'
           LinearizationMethod: 'Exact'
                 Linearization: [1x1 ss]
                OperatingPoint: [1x1 linearize.advisor.BlockOperatingPoint]

一度に複数のブロックの診断情報を取得することもできます。モデルの sin ブロックの診断を取得します。

sinBlocks = {'scdpendulum/pendulum/Trigonometric Function';
             'scdpendulum/angle_wrap/Trigonometric Function1'};
         
sinDiag = getBlockInfo(advisor,sinBlocks)
sinDiag = 
Linearization Diagnostics for the Blocks:

Block Info:
-----------
Index   BlockPath                                           Is On Path   Contributes To Linearization   Linearization Method   
1.      scdpendulum/angle_wrap/Trigonometric Function1      Yes          No                             Perturbation           
2.      scdpendulum/pendulum/Trigonometric Function         Yes          No                             Perturbation           

Simulink モデルを読み込みます。

mdl = 'scdpendulum';
load_system(mdl)

モデルを線形化して LinearizationAdvisor オブジェクトを取得します。

io = getlinio(mdl);
opt = linearizeOptions('StoreAdvisor',true);
[linsys,~,info] = linearize(mdl,io,opt);
advisor = info.Advisor;

advisor.BlockDiagnostics の最初の要素の診断情報を取得します。

diag = getBlockInfo(advisor,1)
diag = 
Linearization Diagnostics for scdpendulum/pendulum/Saturation with properties:

                      IsOnPath: 'Yes'
    ContributesToLinearization: 'No'
           LinearizationMethod: 'Exact'
                 Linearization: [1x1 ss]
                OperatingPoint: [1x1 linearize.advisor.BlockOperatingPoint]

複数のブロックの診断を取得することもできます。たとえば、advisor にリストされている 2 番目と 3 番目のブロックに関する診断を取得します。

diags = getBlockInfo(advisor,[2 3])
diags = 
Linearization Diagnostics for the Blocks:

Block Info:
-----------
Index   BlockPath                                           Is On Path   Contributes To Linearization   Linearization Method   
1.      scdpendulum/pendulum/Integrator, Second-Order       Yes          No                             Exact                  
2.      scdpendulum/angle_wrap/Trigonometric Function1      Yes          No                             Perturbation           

Simulink モデルを読み込みます。

mdl = 'scdpendulum';
load_system(mdl)

モデルを線形化して LinearizationAdvisor オブジェクトを取得します。

io = getlinio(mdl);
opt = linearizeOptions('StoreAdvisor',true);
[linsys,~,info] = linearize(mdl,io,opt);
advisor = info.Advisor;

線形化されたブロックのブロック パスを取得します。

paths = getBlockPaths(advisor);

angle_wrap サブシステム内にどのブロックがあるかを示す logical 配列を作成します。

index = contains(paths,'angle_wrap');

これらのブロックの診断情報を取得します。

diags = getBlockInfo(advisor,index)
diags = 
Linearization Diagnostics for the Blocks:

Block Info:
-----------
Index   BlockPath                                           Is On Path   Contributes To Linearization   Linearization Method   
1.      scdpendulum/angle_wrap/Trigonometric Function1      Yes          No                             Perturbation           
2.      scdpendulum/angle_wrap/Trigonometric Function2      Yes          No                             Perturbation           
3.      scdpendulum/angle_wrap/Trigonometric Function       Yes          No                             Perturbation           

入力引数

すべて折りたたむ

ブロック線形化の診断情報。LinearizationAdvisor オブジェクトまたは LinearizationAdvisor オブジェクトの配列として指定します。

Simulink モデルのブロック パス。次のいずれかとして指定します。

  • 文字ベクトル — 1 つのブロックの診断情報を取得します。

  • 文字ベクトルの cell 配列 — 複数のブロックの診断情報を取得します。

ブロック インデックス。次のいずれかとして指定します。

  • 正の整数 — Advisor.BlockDiagnostics の指定要素の診断情報を取得します。

  • 正の整数の配列 — Advisor.BlockDiagnostics の複数の要素の診断情報を取得します。

  • boolean 配列 — index 内の true である各要素について、Advisor.BlockDiagnostics の対応する要素の診断を返します。

出力引数

すべて折りたたむ

index で示されるブロック線形化に関する診断情報。advisor が単一の LinearizationAdvisor オブジェクトである場合、BlockDiagnostic オブジェクトまたは BlockDiagnostic オブジェクトのベクトルとして返されます。

advisorLinearizationAdvisor オブジェクトの配列である場合、blockInfo は、各要素が BlockDiagnostic オブジェクトのベクトルである advisor と同じ次元をもつ cell 配列になります。

バージョン履歴

R2017b で導入