メインコンテンツ

find_mdlrefs

モデルの階層構造内の参照モデルと Model ブロックの検索

説明

[mdls,blks] = find_mdlrefs(sys) は、sys で指定された階層内の参照モデルと Model ブロックを検索します。この関数はモデルを一時的に読み込みます。

[mdls,blks] = find_mdlrefs(sys,Name=Value) は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、モデルを一時的に読み込むのではなく読み込んだままにする場合、KeepModelsLoadedtrue に設定します。

すべて折りたたむ

指定されたモデルによって参照されるすべてのモデルの参照モデルおよび Model ブロックを検索します。

mdl = "sldemo_mdlref_basic";
load_system(mdl);
[myModels,myModelBlks] = find_mdlrefs(mdl)
myModels = 2×1 cell
    {'sldemo_mdlref_counter'}
    {'sldemo_mdlref_basic'  }

myModelBlks = 3×1 cell
    {'sldemo_mdlref_basic/CounterA'}
    {'sldemo_mdlref_basic/CounterB'}
    {'sldemo_mdlref_basic/CounterC'}

既定では、関数 find_mdlrefs はまだ読み込まれていないモデルを読み込んでから閉じます。

sldemo_mdlref_depgraph モデルを含むプロジェクトを開きます。

openProject("ModelReferenceHierarchy");

このプロジェクトで sldemo_mdlref_depgraph モデルが開きます。

読み込まれたモデルを特定するには、関数 find_system を使用します。

find_system(type="block_diagram")
ans = 2×1 cell
    {'simulink_extras'       }
    {'sldemo_mdlref_depgraph'}

モデルの階層構造内のすべてのモデルを検索するには、関数 find_mdlrefs を使用します。

mdl = "sldemo_mdlref_depgraph";
find_mdlrefs(mdl)
ans = 7×1 cell
    {'sldemo_mdlref_heat2cost'   }
    {'sldemo_mdlref_house'       }
    {'sldemo_mdlref_F2C'         }
    {'sldemo_mdlref_outdoor_temp'}
    {'sldemo_mdlref_thermostat'  }
    {'sldemo_mdlref_heater'      }
    {'sldemo_mdlref_depgraph'    }

読み込まれたままのモデルを特定するには、関数 find_system を使用します。

find_system(type="block_diagram")
ans = 2×1 cell
    {'simulink_extras'       }
    {'sldemo_mdlref_depgraph'}

以前に読み込まれたモデルのみが、読み込まれたままになります。

モデルの階層構造内のすべてのモデルを検索して読み込むには、find_mdlrefs 関数を使用します。KeepModelsLoadedtrue に設定します。

find_mdlrefs(mdl, KeepModelsLoaded=true);
find_system(type="block_diagram")
ans = 8×1 cell
    {'sldemo_mdlref_thermostat'  }
    {'sldemo_mdlref_heater'      }
    {'sldemo_mdlref_F2C'         }
    {'sldemo_mdlref_outdoor_temp'}
    {'sldemo_mdlref_house'       }
    {'sldemo_mdlref_heat2cost'   }
    {'simulink_extras'           }
    {'sldemo_mdlref_depgraph'    }

最上位モデルとすべての参照モデルは読み込まれたままになります。すべての参照モデルが読み込まれている状態では、各参照モデルを開いてその参照モデルが読み込まれるのを待つことなく、モデルの階層構造を移動できます。

カスタム フィルター関数でMatchFilter引数を使用して、InitFcn コールバックが定義されているすべての Model ブロックを検索します。

カスタム関数は、ファイル initFcnMdlBlocks.m で定義されています。

type initFcnMdlBlocks.m
function match = initFcnMdlBlocks(handle)
  match = ~isempty(get_param(handle,'InitFcn'));
end

関数ハンドルを MatchFilter 引数の値として指定します。

mdl = "slexVariantMdlRefCondProp";
load_system(mdl);
[mdls,blks] = find_mdlrefs(mdl, MatchFilter=@initFcnMdlBlocks)
mdls = 1×1 cell array
    {'slexVariantMdlRefCondProp'}

blks =

  0×0 empty cell array

モデルのコンパイル後にシミュレーションでアクティブなバリアント ブロックを検索するには、Simulink.match.activeVariants という名前の組み込みフィルター関数を使用します。

model1 = "slexVariantMdlRefCondProp";
load_system(model1);
set_param(model1, SimulationCommand="update");
[models,blocks] = find_mdlrefs(model1, ...
    MatchFilter=@Simulink.match.activeVariants)
models = 3×1 cell
    {'slexVariantMdlRefCondProp_sub1'}
    {'slexVariantMdlRefCondProp_sub2'}
    {'slexVariantMdlRefCondProp'     }

blocks = 2×1 cell
    {'slexVariantMdlRefCondProp/sub1'}
    {'slexVariantMdlRefCondProp/sub2'}

モデルのコンパイル後に、生成された C コードの一部であるバリアント選択肢を検索するには、Simulink.match.codeCompileVariants という名前の組み込みフィルター関数を使用します。

assignin("base", VSS_MODE=2);
slexVariantMdlRefCondProp([],[],[],"compileForCodegen");
### Searching for referenced models in model 'slexVariantMdlRefCondProp'.
### Total of 3 models to build.
### Starting serial code generation build.
### Starting build procedure for: slexVariantMdlRefCondProp_sub1
### Successful completion of build procedure for: slexVariantMdlRefCondProp_sub1
### Starting build procedure for: slexVariantMdlRefCondProp_sub2
### Successful completion of build procedure for: slexVariantMdlRefCondProp_sub2

Build Summary

Model reference code generation targets:

Model                           Build Reason                                              Status                        Build Duration
======================================================================================================================================
slexVariantMdlRefCondProp_sub1  Target (slexVariantMdlRefCondProp_sub1.c) did not exist.  Code generated and compiled.  0h 0m 14.193s 
slexVariantMdlRefCondProp_sub2  Target (slexVariantMdlRefCondProp_sub2.c) did not exist.  Code generated and compiled.  0h 0m 5.423s  

2 of 2 models built (0 models already up to date)
Build duration: 0h 0m 20.787s
codeInterfacePackaging: Nonreusable function
codeInterfacePackaging: NonReusable
codeInterfacePackaging: Nonreusable function
codeInterfacePackaging: NonReusable
[models,blocks] = find_mdlrefs(model1, ...
    MatchFilter=@Simulink.match.codeCompileVariants)
models = 3×1 cell
    {'slexVariantMdlRefCondProp_sub1'}
    {'slexVariantMdlRefCondProp_sub2'}
    {'slexVariantMdlRefCondProp'     }

blocks = 2×1 cell
    {'slexVariantMdlRefCondProp/sub1'}
    {'slexVariantMdlRefCondProp/sub2'}

slexVariantMdlRefCondProp([],[],[],"term");

バリアントが原因でブロックがアクティブか非アクティブかに関係なく、すべてのブロックを検索するには、Simulink.match.allVariants という名前の組み込みフィルター関数を使用します。

[models,blocks] = find_mdlrefs(model1, ...
    MatchFilter=@Simulink.match.allVariants)
models = 3×1 cell
    {'slexVariantMdlRefCondProp_sub1'}
    {'slexVariantMdlRefCondProp_sub2'}
    {'slexVariantMdlRefCondProp'     }

blocks = 2×1 cell
    {'slexVariantMdlRefCondProp/sub1'}
    {'slexVariantMdlRefCondProp/sub2'}

シミュレーション内でアクティブであるか、編集時に生成されたコードの一部である Variant Subsystem ブロック選択肢を検索するには、Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices という名前の組み込みフィルター関数を使用します。

model2 = 'sldemo_mdlref_variants';
load_system(model2);
[models,blocks] = find_mdlrefs(model2, ...
    MatchFilter=@Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices)
models = 3×1 cell
    {'sldemo_mrv_linear_controller'   }
    {'sldemo_mrv_nonlinear_controller'}
    {'sldemo_mdlref_variants'         }

blocks = 2×1 cell
    {'sldemo_mdlref_variants/Controller/Linear'   }
    {'sldemo_mdlref_variants/Controller/Nonlinear'}

編集時にアクティブな Variant Subsystem ブロック選択肢を検索するには、Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices という名前の組み込みフィルター関数を使用します。

[models,blocks] = find_mdlrefs(model2, ...
   MatchFilter=@Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices)
models = 2×1 cell
    {'sldemo_mrv_nonlinear_controller'}
    {'sldemo_mdlref_variants'         }

blocks = 1×1 cell array
    {'sldemo_mdlref_variants/Controller/Nonlinear'}

編集時フィルターの制限の詳細については、MatchFilterを参照してください。

入力引数

すべて折りたたむ

システム名、ブロック パス、またはハンドル。文字ベクトル、string スカラー、または数値スカラーとして指定します。

システムは SLX ファイル、MDL ファイル、Model ブロック、または Subsystem ブロックでなければなりません。

R2025a より前: ファイル名を指定するときに、ファイルの拡張子を含めないでください。

データ型: double | char | string

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: refModels = find_mdlrefs(topmodel,KeepModelsLoaded=true,ReturnTopModelAsLastElement=false)

モデルを読み込まれたままにするオプション。数値または logical 1 (true) または 0 (false) として指定します。

既定では、関数はまだ読み込まれていないモデルを読み込んでから閉じます。モデルを読み込んだままにするには、この引数を true に設定します。モデルを読み込んだままにすると、モデルの検索後にモデルを操作する予定がある場合に役立ちます。

データ型: logical

検索するレベル。数値または logical 1 (true) または 0 (false) として指定します。

  • true — 指定されたシステムのモデルの階層構造内のすべての Model ブロックを検索します。

  • false — 最上位レベルのシステムのみを検索します。

データ型: logical

保護モデルを検索結果に含めるオプション。数値または logical 1 (true) または 0 (false) として指定します。

この設定は、返される参照モデルのリストにのみ影響します。この設定は、返される Model ブロックのリストには影響しません。

データ型: logical

コメント化されたブロックを検索結果に含めるオプション。数値または logical 1 (true) または 0 (false) として指定します。

データ型: logical

ライブラリ リンクに従って検索するオプション。true または false として指定します。true の場合、検索はライブラリ ブロックまでリンクをたどります。

データ型: logical

マスクされたブロックを検索するオプション。"all""none""functional"、または "graphical" として指定します。

  • "all" — マスクされたすべてのブロック内を検索します。

  • "none" — マスクされたシステムでの検索を回避します。

  • "functional" — ダイアログをもたないマスク サブシステムも検索します。

  • "graphical" — ワークスペースまたはダイアログをもたないマスク サブシステムも検索します。

検索でブロック、システム、ライン、端子、注釈などの要素を照合してフィルターを適用するオプション。関数ハンドルとして指定します。MatchFilter を使用して、検索で要素を含めるべきか、スキップすべきかどうかを決定します。

この引数の動作は次のとおりです。

  • カスタム フィルター関数を使用した要素のフィルター処理を許可する

  • フィルターに一致しない場合に要素の処理を回避する

  • ブロック、ライン、または注釈に複雑なフィルターを適用して結果を内部でフィルター処理する

名前付き関数は MATLAB® プログラム ファイル内で定義されていなければなりません。関数は要素のハンドルを入力として取り、2 つの出力を返します。

 function [match, prune] = func(element)
  • 入力 element は処理されているブロックのハンドルです。

  • 1 つ目の出力 match は logical 値です。false の場合、検索で要素がスキップされます。

  • 2 つ目の出力 prune は、element がサブシステムである場合にのみ適用される、オプションの logical 値です。既定値は false です。この値が true に設定されている場合、サブシステム全体が検索対象から除外されます。

バリアント ブロックを検索するために、ソフトウェアには次のコンパイル後フィルター関数が用意されています。

  • Simulink.match.activeVariants — モデルのコンパイル後にシミュレーションでアクティブなブロックを検索するためのフィルター関数

  • Simulink.match.codeCompileVariants — モデルのコンパイル後に生成されたコードの一部であるブロックを検索するためのフィルター関数

  • Simulink.match.allVariants — バリアントが原因でブロックがアクティブか非アクティブかに関係なく、すべてのブロックを検索するためのフィルター関数

メモ

正しい結果を得るには、Simulink.match.activeVariants フィルターと Simulink.match.codeCompileVariants フィルターを使用する前に、モデルをコンパイルする必要があります。モデルがコンパイルされない場合、これらのフィルターによってモデル内のすべてのブロックが返されます。これらのフィルターのコンパイル前とコンパイル後の結果を比較した例については、バリアント ブロック用のマッチ フィルターのコンパイル前とコンパイル後の動作の比較を参照してください。

Variant Subsystem ブロックの場合、ソフトウェアには次の編集時フィルター関数が用意されています。

  • Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices — シミュレーション内でアクティブであるか、生成されたコードの一部である Variant Subsystem ブロック選択肢を検索するためのフィルター関数

  • Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices — アクティブな Variant Subsystem ブロック選択肢を検索するためのフィルター関数

編集時フィルター:

  • [CompiledVariantInfo] ブロック パラメーターのコンパイル後のブロックのアクティブ性情報を使用しません。

  • [バリアント制御モード][式] または [ラベル] に設定され、[Variant Subsystem の外部に条件を伝播する]off に設定されている Variant Subsystem ブロックにのみ適用されます。

  • find_systemfind_mdlrefs、および Simulink.FindOptions 関数のコンテキスト内で使用されている場合にのみ、ブロック ハンドルが Variant Subsystem ブロックのアクティブな選択肢内にあるかどうかを特定できます。

すべてのタイプのバリアント ブロックに対して処理するには、モデルのコンパイル後に Simulink.match.codeCompileVariants フィルターまたは Simulink.match.activeVariants フィルターを使用します。

データ型: function_handle

R2025a 以降

無効なモデル名に対して実行する診断アクション。"error""warning"、または "ignore" として指定します。

  • "error" — ソフトウェアで無効なモデル名または参照モデルの欠落が検出されると、エラーが表示されます。

  • "warning" — ソフトウェアで無効なモデル名または参照モデルの欠落が検出されると、警告が出されます。

  • "ignore" — ソフトウェアで無効なモデル名と参照モデルの欠落が無視されます。

指定されたシステムを検索結果に含めるオプション。数値または logical 1 (true) または 0 (false) として指定します。

既定では、参照モデルの返されたリスト内の最後の要素は、sys 引数で指定したモデル、ライブラリ、またはサブシステム ファイルの名前です。ブロックを指定する場合、最後の要素はブロックを含むファイルの名前です。

データ型: logical

出力引数

すべて折りたたむ

モデルの名前。文字ベクトルの cell 配列として返されます。

既定では、最後の要素は、sys 引数で指定したモデル、ライブラリ、またはサブシステム ファイルの名前です。ブロックを指定する場合、最後の要素はブロックを含むモデル、ライブラリ、またはサブシステム ファイルの名前です。

Model ブロックの名前。文字ベクトルの cell 配列として返されます。

バージョン履歴

R2006a より前に導入

すべて展開する