Main Content

find_mdlrefs

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

説明

[models,blocks] = find_mdlrefs(system) は、指定されたシステムの下のモデルの階層構造内で、すべての参照モデルと Model ブロックを検索します。関数 find_mdlrefs は、モデルを一時的に読み込みます。

[models,blocks] = find_mdlrefs(system,Name,Value) は、1 つ以上の名前と値のペアを使用して、追加の検索オプションを提供します。たとえば、モデルを一時的に読み込むのではなく読み込んだままにする場合、KeepModelsLoadedtrue に設定します。

すべて折りたたむ

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

load_system('sldemo_mdlref_basic');
[myModels,myModelBlks] = find_mdlrefs('sldemo_mdlref_basic')
myModels = 2x1 cell
    {'sldemo_mdlref_counter'}
    {'sldemo_mdlref_basic'  }

myModelBlks = 3x1 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 = 2x1 cell
    {'simulink_extras'       }
    {'sldemo_mdlref_depgraph'}

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

find_mdlrefs('sldemo_mdlref_depgraph')
ans = 7x1 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 = 2x1 cell
    {'simulink_extras'       }
    {'sldemo_mdlref_depgraph'}

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

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

find_mdlrefs('sldemo_mdlref_depgraph','KeepModelsLoaded',true);
find_system('type','block_diagram')
ans = 8x1 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 で定義されています。

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

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

load_system('slexVariantMdlRefCondProp');
[models,blocks] = find_mdlrefs('slexVariantMdlRefCondProp','MatchFilter',@initFcnMdlBlocks);

Simulink.match.activeVariants

モデルのコンパイル後にシミュレーションでアクティブなバリアント ブロックを検索します。

model1='slexVariantMdlRefCondProp';
load_system(model1);
set_param(model1,'SimulationCommand','update');
[models,blocks] = find_mdlrefs(model1,'MatchFilter',@Simulink.match.activeVariants);

Simulink.match.codeCompileVariants

モデルのコンパイル後に、生成された C コードの一部であるバリアントの選択を検索します。

assignin('base','VSS_MODE',2);
slexVariantMdlRefCondProp([],[],[],'compileForCodegen');
### Starting serial model reference code generation build.
### Checking status of model reference code generation target for model 'slexVariantMdlRefCondProp_sub1' used in 'slexVariantMdlRefCondProp'.
### Model reference code generation target (slexVariantMdlRefCondProp_sub1.c) for model slexVariantMdlRefCondProp_sub1 is out of date because slexVariantMdlRefCondProp_sub1.c does not exist.
### Starting build procedure for: slexVariantMdlRefCondProp_sub1
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: /tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub1
### Invoking Target Language Compiler on slexVariantMdlRefCondProp_sub1.rtw
### Using System Target File: /mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/ert/ert.tlc
### Loading TLC function libraries
.......
### Initial pass through model to cache user defined code
### Caching model source code
................................
### Writing header file slexVariantMdlRefCondProp_sub1_types.h
### Writing header file slexVariantMdlRefCondProp_sub1.h
### Writing header file rtwtypes.h
### Writing source file slexVariantMdlRefCondProp_sub1.c
.
### Writing header file slexVariantMdlRefCondProp_sub1_private.h
### TLC code generation complete (took 7.056s).
### Creating HTML report file index.html
### Saving binary information cache.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub1/slexVariantMdlRefCondProp_sub1.mk' ...
### Building 'slexVariantMdlRefCondProp_sub1_rtwlib': "/mathworks/devel/bat/Bdoc23b/build/matlab/bin/glnxa64/gmake"  -f slexVariantMdlRefCondProp_sub1.mk all
gcc -c -fwrapv -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=slexVariantMdlRefCondProp_sub1 -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 -I/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893 -I/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub1 -I/mathworks/devel/bat/Bdoc23b/build/matlab/extern/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/simulink/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/ert -I/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/_sharedutils -o "slexVariantMdlRefCondProp_sub1.o" "/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub1/slexVariantMdlRefCondProp_sub1.c"
### Creating static library ./slexVariantMdlRefCondProp_sub1_rtwlib.a ...
ar ruvs  ./slexVariantMdlRefCondProp_sub1_rtwlib.a slexVariantMdlRefCondProp_sub1.o
ar: creating ./slexVariantMdlRefCondProp_sub1_rtwlib.a
a - slexVariantMdlRefCondProp_sub1.o
### Created: ./slexVariantMdlRefCondProp_sub1_rtwlib.a
### Successfully generated all binary outputs.
gmake: Nothing to be done for `all'.
### Successful completion of build procedure for: slexVariantMdlRefCondProp_sub1
### Checking status of model reference code generation target for model 'slexVariantMdlRefCondProp_sub2' used in 'slexVariantMdlRefCondProp'.
### Model reference code generation target (slexVariantMdlRefCondProp_sub2.c) for model slexVariantMdlRefCondProp_sub2 is out of date because slexVariantMdlRefCondProp_sub2.c does not exist.
### Starting build procedure for: slexVariantMdlRefCondProp_sub2
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: /tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub2
### Invoking Target Language Compiler on slexVariantMdlRefCondProp_sub2.rtw
### Using System Target File: /mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/ert/ert.tlc
### Loading TLC function libraries
.......
### Generating TLC interface API for custom data
.
### Initial pass through model to cache user defined code
.
### Caching model source code
........................................
### Writing header file slexVariantMdlRefCondProp_sub2_types.h
### Writing header file slexVariantMdlRefCondProp_sub2.h
.
### Writing header file variant_defines.h
### Writing source file slexVariantMdlRefCondProp_sub2.c
### Writing header file slexVariantMdlRefCondProp_sub2_private.h
### TLC code generation complete (took 6.245s).
### Creating HTML report file index.html
### Saving binary information cache.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub2/slexVariantMdlRefCondProp_sub2.mk' ...
### Building 'slexVariantMdlRefCondProp_sub2_rtwlib': "/mathworks/devel/bat/Bdoc23b/build/matlab/bin/glnxa64/gmake"  -f slexVariantMdlRefCondProp_sub2.mk all
gcc -c -fwrapv -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=slexVariantMdlRefCondProp_sub2 -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 -I/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893 -I/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub2 -I/mathworks/devel/bat/Bdoc23b/build/matlab/extern/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/simulink/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/ert -I/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/_sharedutils -o "slexVariantMdlRefCondProp_sub2.o" "/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slprj/ert/slexVariantMdlRefCondProp_sub2/slexVariantMdlRefCondProp_sub2.c"
### Creating static library ./slexVariantMdlRefCondProp_sub2_rtwlib.a ...
ar ruvs  ./slexVariantMdlRefCondProp_sub2_rtwlib.a slexVariantMdlRefCondProp_sub2.o
ar: creating ./slexVariantMdlRefCondProp_sub2_rtwlib.a
a - slexVariantMdlRefCondProp_sub2.o
### Created: ./slexVariantMdlRefCondProp_sub2_rtwlib.a
### Successfully generated all binary outputs.
gmake: Nothing to be done for `all'.
### Successful completion of build procedure for: slexVariantMdlRefCondProp_sub2
### Simulink cache artifacts for 'slexVariantMdlRefCondProp_sub1' were created in '/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slexVariantMdlRefCondProp_sub1.slxc'.
### Simulink cache artifacts for 'slexVariantMdlRefCondProp_sub2' were created in '/tmp/Bdoc23b_2355056_1864936/tpf09337a2/simulink_variants-ex24779893/slexVariantMdlRefCondProp_sub2.slxc'.

Build Summary

Code generation targets built:

Model                           Action                        Rebuild Reason                                    
================================================================================================================
slexVariantMdlRefCondProp_sub1  Code generated and compiled.  slexVariantMdlRefCondProp_sub1.c does not exist.  
slexVariantMdlRefCondProp_sub2  Code generated and compiled.  slexVariantMdlRefCondProp_sub2.c does not exist.  

2 of 2 models built (0 models already up to date)
Build duration: 0h 0m 48.862s
[models,blocks] = find_mdlrefs(model1,...
                               'MatchFilter',@Simulink.match.codeCompileVariants);
slexVariantMdlRefCondProp([],[],[],'term');

Simulink.match.allVariants

バリアントが原因でブロックがアクティブか非アクティブになっているのかに関係なく、すべてのブロックを検索します。

[models,blocks] = find_mdlrefs(model1,'MatchFilter',@Simulink.match.allVariants);

Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices

シミュレーション内でアクティブであるか、編集時に生成されたコードの一部である Variant Subsystem 選択ブロックを検索します。編集時フィルターの制限の詳細については、MatchFilterを参照してください。

model2='sldemo_mdlref_variants';
load_system(model2);
[models,blocks] = find_mdlrefs(model2, ...
   'MatchFilter',@Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices)

Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices

編集時にアクティブな Variant Subsystem 選択ブロックを検索します。編集時フィルターの制限の詳細については、MatchFilterを参照してください。

[models,blocks] = find_mdlrefs(model2, ...
   'MatchFilter',@Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices)

入力引数

すべて折りたたむ

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

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

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

データ型: double | char | string

名前と値の引数

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

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

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

モデルを読み込まれたままにするオプション。'KeepModelsLoaded' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。

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

データ型: logical

検索するレベル。'AllLevels' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。

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

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

データ型: logical

保護モデルを検索結果に含めるオプション。'IncludeProtectedModels' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。

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

データ型: logical

コメント付きブロックを検索結果に含めるオプション。'IncludeCommented' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。

データ型: logical

検索時に大文字小文字を区別するオプション。大文字小文字を区別する検索の場合は true、大文字小文字を区別しない検索の場合は false として指定します。

データ型: logical

ライブラリ リンクに従って検索するオプション。true または false として指定します。true の場合、検索はライブラリ ブロックへリンクされたものを含みます。

データ型: logical

マスクされたブロックを検索するオプション。次として指定します。

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

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

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

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

データ型: char | string

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

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

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

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

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

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

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

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

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

バリアント: Simulink® には、バリアント ブロックを検索するための、次の組み込みマッチ フィルター関数が用意されています。

コンパイル後のフィルター関数:

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

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

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

メモ

正しい結果を得るには、Simulink.match.activeVariants フィルターと Simulink.match.codeCompileVariants フィルターを使用する前に、"モデルをコンパイルする" 必要があります。モデルがコンパイルされない場合、これらのフィルターによってモデル内のすべてのブロックが返されます。

Variant Subsystem ブロックの編集時フィルターの関数:

  • Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices — シミュレーション内でアクティブであるか、生成されたコードの一部である Variant Subsystem 選択ブロックを検索するためのフィルター関数。この関数では、Variants 引数の 'ActivePlusCodeVariants' オプションと同じような結果が生成されます。

  • Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices — アクティブな Variant Subsystem 選択ブロックを検索するためのフィルター関数。この関数では、Variants 引数の 'ActiveVariants' オプションと同じような結果が生成されます。

編集時フィルター制限:

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

  • フィルターは、以下のブロック パラメーターの設定をもつ Variant Subsystem ブロックにのみ適用されます。

    • [バリアント制御モード][式] または [ラベル] に設定されている

    • [Variant Subsystem の外部に条件を伝播する]off に設定されている

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

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

メモ

Variants 引数は削除される予定です。代わりに MatchFilter を使用してください。詳細については、互換性についての考慮事項を参照してください。

バリアント モデルを検索結果に含めるオプション。'Variants''ActivePlusCodeVariants''ActiveVariants'、または 'AllVariants' で構成されるコンマ区切りのペアとして指定します。

  • 'ActivePlusCodeVariants' — シミュレーション内でアクティブであり、生成されたコードの一部である Variant Subsystem 内のすべてのバリアント モデルを含めます。

  • 'ActiveVariants'Variant Subsystem ブロック内のアクティブなバリアント モデルを含めます。

  • 'AllVariants'Variant Subsystem ブロック内のすべてのバリアント モデルを含めます。

この検索条件は、[バリアント制御モード]expression または label に設定されている Variant Subsystem ブロックにのみ適用されます。MatchFilter オプションを指定して関数 find_mdlrefs を使用すると、すべてのタイプのバリアント ブロックについて動作します。

データ型: char | string

指定されたシステムを検索結果に含めるオプション。'ReturnTopModelAsLastElement' と数値または logical 1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。

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

データ型: logical

出力引数

すべて折りたたむ

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

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

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

バージョン履歴

R2006a より前に導入

すべて展開する