Main Content

LinearizationAdvisor

線形化結果のトラブルシューティングのための診断情報

説明

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

診断情報にアクセスするには関数 getBlockInfo を使用します。

作成

Simulink モデルを線形化する際に LinearizationAdvisor オブジェクトを作成するには、いくつかの方法があります。モデルの線形化時には次を使用します。

  • 関数 linearize。まず linearizeOptions オプション セットを作成し、StoreAdvisor オプションを true に設定します。その後 linearize を使ってモデルを線形化し、info 引数を返します。

  • slLinearizer インターフェイス。まず linearizeOptions オプション セットを作成し、StoreAdvisor オプションを true に設定します。次に slLinearizer インターフェイスを作成します。getIOTransfer などの線形化関数を使ってインターフェイスから線形モデルを取得するときに info 引数を返します。

  • slTuner インターフェイス。まず slTunerOptions オプション セットを作成し、StoreAdvisor オプションを true に設定します。次に slTuner インターフェイスを作成します。getIOTransfer などの線形化関数を使ってインターフェイスから線形モデルを取得するときに info 引数を返します。

その後、info.Advisor を使って LinearizationAdvisor オブジェクトにアクセスできます。モデルを複数の操作点で線形化する場合や、パラメーターの変化を使って線形化する場合、info.AdvisorLinearizationAdvisor オブジェクトの配列になります。

また、関数 advise および find は、関連する検索条件を満たすブロックの診断情報をもつ LinearizationAdvisor オブジェクトを返します。

プロパティ

すべて展開する

線形化の診断情報に関連付けられている Simulink モデル。文字ベクトルとして返されます。

Model は読み取り専用プロパティです。

入力、出力および開始点を含む線形解析ポイント。線形化 I/O オブジェクト、または線形化 I/O オブジェクトのベクトルとして返されます。

AnalysisPoints は以下に対応します。

  • linearize コマンドの io 入力引数。

  • slLinearizer または slTuner インターフェイスの解析ポイントとループ開始点。

解析ポイントの詳細については、モデルの一部を線形化するよう指定を参照してください。

AnalysisPoints は読み取り専用プロパティです。

モデルが線形化された操作点。操作点オブジェクトとして指定します。

OperatingPoint は読み取り専用プロパティです。

線形化のパラメーター サンプル。次のいずれかとして指定します。

  • [] — 線形化結果に関連付けられたパラメーター値はありません。

  • 構造体 — 1 つのパラメーターの値。次のフィールドをもつ構造体として指定します。

    • Name — パラメーター名

    • Value — パラメーター値

  • 構造体配列 — 複数のパラメーターの値。

パラメーターの変化の詳細については、バッチ線形化用のパラメーター サンプルの指定を参照してください。

Parameters は読み取り専用プロパティです。

線形化アルゴリズムのオプション。linearizeOptions オブジェクトとして指定します。

LinearizationOptionslinearizeslLinearizer、または slTuneroptions 入力引数に対応します。

LinearizationOptions は読み取り専用プロパティです。

LinearizationAdvisor オブジェクトの作成に使用される、検索条件に一致する各ブロックの診断情報。BlockDiagnostic オブジェクトまたは BlockDiagnostic オブジェクトのベクトルとして指定します。

これらのブロック診断には getBlockInfo コマンドを使用してアクセスできます。ブロックのリストを取得するには、getBlockPaths コマンドを使用します。

BlockDiagnostics は読み取り専用プロパティです。

線形化の診断を取得するために使用されるクエリ タイプ。次のいずれかとして指定します。

  • linearizegetIOTransfer などの線形化関数を使って最初に LinearizationAdvisor オブジェクトを作成する場合は 'All Blocks'

  • advise コマンドを使って LinearizationAdvisor オブジェクトを作成する場合は 'Linearization Advice'

  • find コマンドを使って LinearizationAdvisor オブジェクトを作成する場合は、対応するカスタム クエリ オブジェクトの QueryType プロパティに一致する文字ベクトル。

QueryType は読み取り専用プロパティです。

線形化の診断を取得するために使用されるクエリの説明。次のいずれかとして指定します。

  • linearizegetIOTransfer などの線形化関数を使って最初に LinearizationAdvisor オブジェクトを作成する場合は 'All Linearized Blocks'

  • advise コマンドを使って LinearizationAdvisor オブジェクトを作成する場合は 'Blocks that are Potentially Problematic for Linearization'

  • find コマンドを使って LinearizationAdvisor オブジェクトを作成する場合は、対応するカスタム クエリ オブジェクトの Description プロパティに一致する文字ベクトル。

Description は読み取り専用プロパティです。

オブジェクト関数

advise線形化で問題が生じる可能性のあるブロックの検出
highlightSimulink モデルの線形化パスの強調表示
find線形化の結果で特定の条件を満たすブロックを検出
getBlockInfoブロック線形化の診断情報の取得
getBlockPathsLinearizationAdvisor オブジェクト内のブロックのリストの取得

すべて折りたたむ

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

mdl = 'scdpendulum';
load_system(mdl)

線形化のオプション セットを作成し、StoreAdvisor オプションを有効にします。

opt = linearizeOptions('StoreAdvisor',true);

このオプション セットを使用してモデルを線形化し、info 引数を返します。

io = getlinio(mdl);
[linsys,~,info] = linearize(mdl,io,opt);

info から LinearizationAdvisor オブジェクトを抽出します。

advisor = info.Advisor
advisor = 
  LinearizationAdvisor with properties:

               Model: 'scdpendulum'
      OperatingPoint: [1x1 opcond.OperatingPoint]
    BlockDiagnostics: [1x11 linearize.advisor.BlockDiagnostic]
           QueryType: 'All Blocks'

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

mdl = 'scdspeed';
load_system(mdl)

線形化のオプション セットを作成し、StoreAdvisor オプションを有効にします。

opt = linearizeOptions('StoreAdvisor',true);

入力と出力の解析ポイントを定義し、このオプション セットを使って slLinearizer インターフェイスを作成します。

io(1) = linio('scdspeed/throttle (degrees)',1,'input');
io(2) = linio('scdspeed/rad//s to rpm',1,'output');
SL = slLinearizer(mdl,io,opt);

入力から出力への伝達関数を求め、info 引数を返します。

[linsys,info] = getIOTransfer(SL,'scdspeed/throttle (degrees)','scdspeed/rad//s to rpm');

info から LinearizationAdvisor オブジェクトを抽出します。

advisor = info.Advisor
advisor = 
  LinearizationAdvisor with properties:

               Model: 'scdspeed'
      OperatingPoint: [1x1 opcond.OperatingPoint]
    BlockDiagnostics: [1x27 linearize.advisor.BlockDiagnostic]
           QueryType: 'All Blocks'

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

mdl = 'scdspeed';
load_system(mdl)

slTunerOptions オプション セットを作成し、StoreAdvisor オプションを有効にします。

opt = slTunerOptions('StoreAdvisor',true);

入力と出力の解析ポイントを定義し、このオプション セットを使って slTuner インターフェイスを作成します。

io(1) = linio('scdspeed/throttle (degrees)',1,'input');
io(2) = linio('scdspeed/rad//s to rpm',1,'output');
ST = slTuner(mdl,io,opt);

通常は、関数 systune を使用して制御システムを調整します。その後、入力から出力への伝達関数を求め、info 引数を返すことができます。

[linsys,info] = getIOTransfer(ST,'scdspeed/throttle (degrees)','scdspeed/rad//s to rpm');

info から LinearizationAdvisor オブジェクトを抽出します。

advisor = info.Advisor
advisor = 
  LinearizationAdvisor with properties:

               Model: 'scdspeed'
      OperatingPoint: [1x1 opcond.OperatingPoint]
    BlockDiagnostics: [1x27 linearize.advisor.BlockDiagnostic]
           QueryType: 'All Blocks'

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

mdl = 'scdpendulum';
load_system(mdl)

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

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

線形化で問題が生じる可能性のあるブロックを検出します。

result = advise(advisor)
result = 
  LinearizationAdvisor with properties:

               Model: 'scdpendulum'
      OperatingPoint: [1x1 opcond.OperatingPoint]
    BlockDiagnostics: [1x3 linearize.advisor.BlockDiagnostic]
           QueryType: 'Linearization Advice'

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

mdl = 'scdspeed';
load_system(mdl)

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

opts = linearizeOptions('StoreAdvisor',true);
io(1) = linio('scdspeed/throttle (degrees)',1,'input');
io(2) = linio('scdspeed/rad//s to rpm',1,'output');
[sys,op,info] = linearize(mdl,io,opts);
advisor = info.Advisor;

1 つの入力と 1 つの出力をもつすべてのブロックを検出するための複合クエリ オブジェクトを作成します。

qSISO = linqueryHasInputs(1) & linqueryHasOutputs(1);

複合クエリ オブジェクトを使用してすべての SISO ブロックを検出します。

advSISO = find(advisor,qSISO)
advSISO = 
  LinearizationAdvisor with properties:

               Model: 'scdspeed'
      OperatingPoint: [1x1 opcond.OperatingPoint]
    BlockDiagnostics: [1x10 linearize.advisor.BlockDiagnostic]
           QueryType: '(Has 1 Inputs & Has 1 Outputs)'

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           

代替機能

アプリ

モデル線形化器の線形化アドバイザーを使用して、線形化結果の対話的なトラブルシューティングを行うことができます。例については、モデル線形化器での線形化結果のトラブルシューティングを参照してください。

バージョン履歴

R2017b で導入