find_mdlrefs
モデルの階層構造内の参照モデルと Model ブロックの検索
説明
[ は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、モデルを一時的に読み込むのではなく読み込んだままにする場合、mdls,blks] = find_mdlrefs(sys,Name=Value)KeepModelsLoaded を true に設定します。
例
指定されたモデルによって参照されるすべてのモデルの参照モデルおよび 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 関数を使用します。KeepModelsLoaded を true に設定します。
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.mfunction 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_system、find_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
出力引数
バージョン履歴
R2006a より前に導入find_mdlrefs 関数が無効なモデル名に対してエラーを出すのか、警告を出すのか、または診断を行わないのかを制御するには、InvalidModelNames を "error"、"warning"、または "ignore" に設定します。
sys にファイル名を指定するときに、指定するファイル名に拡張子を付けても付けなくてもよくなりました。以前は、拡張子付きのファイル名を指定できませんでした。
find_mdlrefs 関数の実行中にソフトウェアでエラーが検出されたとき、KeepModelsLoaded の値により、関数で読み込まれたモデルをソフトウェアで閉じるかどうかが決定されるようになりました。既定では、関数で読み込まれたモデルがソフトウェアで閉じられます。
find_mdlrefs 関数が出力モデル名を 1 行 n 列の cell 配列として一貫して提供するようになりました。以前は、関数がモデル名を返さなかった場合、出力は 1 行 0 列の cell 配列ではなく、0 行 1 列の cell 配列でした。
Variants 引数は将来のリリースで削除される予定です。代わりに MatchFilter 引数を使用してください。
MatchFilter 引数では次のことができます。
モデルをコンパイルした後、シミュレーション中またはコード生成中にアクティブな Model ブロックを検出します。
一方、
Variants引数では一貫性のない検索結果が生成されます。find_mdlrefs関数は編集時の操作ですが、すべてのタイプのバリアント ブロックをもつモデルでブロックがアクティブであるかどうかを判定するにはモデルをコンパイルする必要があります。すべてのタイプのバリアント ブロックを処理します。
一方、
Variants引数は、[バリアント制御モード] が[式]または[ラベル]に設定されている Variant Subsystem ブロックにのみ適用されます。
この削除は R2021a で発表されました。
R2022b 以降、次の場合に警告が表示されます。
Variants引数を指定せずにfind_mdlrefs関数を使用し、関数が検索中に Variant Subsystem ブロックの非アクティブな選択肢をスキップした場合。Variantsを'AllVariants'に設定してfind_mdlrefs関数を使用した場合。
次の表に、Variants 引数の異なる値について、推奨される置き換えを示します。
| 削除予定 | 推奨される置き換え |
|---|---|
[mdls,blks] = find_mdlrefs(mdl, ... 'Variants','ActiveVariants') |
set_param(mdl, SimulationCommand="update"); [mdls,blks] = find_mdlrefs(mdl, ... MatchFilter=@Simulink.match.activeVariants) |
[mdls,blks] = find_mdlrefs(mdl, ... 'Variants','ActivePlusCodeVariants') |
mdlname([],[],[],'compileForCodegen'); [mdls,blks] = find_mdlrefs(mdl, ... MatchFilter=@Simulink.match.codeCompileVariants); mdlname([],[],[],'term') |
[mdls,blks] = find_mdlrefs(mdl, ... 'Variants','AllVariants') |
[mdls,blks] = find_mdlrefs(mdl, ...
MatchFilter=@Simulink.match.allVariants) |
find_mdlrefs 関数を使用するときに MatchFilter 引数と Variants 引数の両方を指定することはできません。
組み込みのマッチ フィルター Simulink.match.allVariants を使用して、ブロックがバリアントによってアクティブであるか非アクティブであるかに関係なく、バリアント モデル内のすべてのブロックを検出できます。このフィルターは 'AllVariants' オプションに対する推奨される置き換えです。
| 削除予定 | 推奨される置き換え |
|---|---|
[mdls,blks] = find_mdlrefs(mdl, ... 'Variants','AllVariants') | [mdls,blks] = find_mdlrefs(mdl, ...
MatchFilter=@Simulink.match.allVariants) |
Variants:関数find_mdlrefsをVariants引数なしで使用する場合、Variant Subsystem ブロックについて、既定ではシミュレーション中またはコード生成中にアクティブである選択肢のみが検索に含まれるようになりました。[Variant Subsystem の外部に条件を伝播する] パラメーターが
onに設定された Variant Source ブロック、Variant Sink ブロック、Variant Subsystem ブロックなどの他のバリアント ブロックについては、すべての選択肢が検索に含まれます。2 つのバリアントの選択肢
Mdl_Linear_ControllerおよびMdl_NonLinear_Controllerをもつ Variant Model ブロックをもつモデルについて検討します。このコマンドは、モデル内のアクティブな Model ブロックのみを返します。
[myModels,myModelBlks] = find_mdlrefs... ('sldemo_variant_subsystems_modelblocks')
myModels = 2×1 cell array {'mdlref_nonlinear_controller' } {'sldemo_variant_subsystems_modelblocks'} myModelBlks = 1×1 cell array {'sldemo_variant_subsystems_modelblocks/Controller/Mdl_NonLinear_Controller'}MatchFilter:関数find_mdlrefsでMatchFilter引数を使用する場合、既定ではアクティブと非アクティブのバリアントの選択肢にフィルターが適用されます。2 つのバリアントの選択肢
Mdl_Linear_ ControllerおよびMdl_NonLinear_Controllerをもつ Variant Model ブロックをもつモデルについて検討します。フィルター関数initFcnMdlBlocksは、InitFcnコールバックが設定されている Model ブロックをすべて検索します。function match = initFcnMdlBlocks(handle) match = ~isempty(get_param(handle, 'InitFcn')); end
次のコマンドでは、モデル内のアクティブと非アクティブの Model ブロックが返されます。
[myModels,myModelBlks] = find_mdlrefs('sldemo_variant_subsystems_modelblocks',... 'MatchFilter', @initFcnMdlBlocks)
myModels = 3×1 cell array {'mdlref_linear_controller' } {'mdlref_nonlinear_controller' } {'sldemo_variant_subsystems_modelblocks'} myModelBlks = 2×1 cell array {'sldemo_variant_subsystems_modelblocks/Controller/Mdl_Linear_Controller' } {'sldemo_variant_subsystems_modelblocks/Controller/Mdl_NonLinear_Controller'}
検索で要素を照合してフィルターを適用するために、カスタム フィルター関数を定義し、MatchFilter 引数に対する値として関数ハンドルを渡すことができます。
シミュレーション内でアクティブであるか生成コードの一部であるバリアント ブロックを検索するには、モデルをコンパイルした後に、Simulink.match.activeVariants、Simulink.match.codeCompileVariants、および Simulink.match.allVariants という名前の組み込みのマッチ フィルター関数を使用します。
関数 find_mdlrefs では、モデルの階層構造のすべてのレベルを検索するかどうかを指定する方法が 2 つあります。どちらの方法でも同じ結果になりますが、追加のオプションを指定できるのは名前と値のペアの手法のみです。
モデルの階層構造のすべてのレベルを検索するかどうかを指定せずに、logical を 2 番目の引数として使用して名前と値のペア AllLevels を使用します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)