find_system
R2026bモデル、ブロック、ライン、端子、注釈を検索する
構文
説明
は、サブシステムを含む、読み込まれたモデルとそれらのブロックを返します。Objects = find_system
は、読み込まれたモデルと、1 つ以上の Objects = find_system(Name=Value)Name=Value のペアの引数で指定された基準を満たすそれらのモデル内のオブジェクトを返します。この構文を使用して検索条件を指定し、特定のパラメーター値を検索できます。検索条件はパラメーターと値のペアの前に指定します。
は、指定されたモデルの指定された基準を満たすオブジェクトを返します。Objects = find_system(Model,Name=Value)
例
myModel という名前の読み込み済みのモデルがあるとします。
モデル名、およびモデルに含まれるすべてのブロックのパスを取得します。
p = find_system("myModel",Type="block")
myModel という名前の読み込み済みのモデルがあるとします。モデルに含まれているすべてのブロックのハンドルを取得します。
モデル ハンドルを取得します。
hModel = get_param("myModel","Handle");
モデルに含まれているすべてのブロックのハンドルを取得します。
hBlocks = find_system(hModel,Type="block")mySubsystem という名前の Subsystem ブロックを含む myModel という名前の読み込み済みのモデルがあるとします。サブシステムに含まれているすべての Transfer Fcn ブロックのハンドルを取得します。
Subsystem ブロックのハンドルを取得します。
hModel = get_param("myModel/mySubsystem","Handle");
サブシステムに含まれているすべての Transfer Fcn ブロックのハンドルを取得します。
hBlocks = find_system(hModel,BlockType="TransferFcn")myModel という名前の読み込み済みのモデルがあるとします。モデル内にある、初期条件が 0 であるすべての Integrator ブロックのハンドルを取得します。
モデルのハンドルを取得します。
hModel = get_param("myModel","Handle");
InitialCondition パラメーターの値が 0 であるすべての Integrator ブロックのハンドルを取得します。
hBlocks = find_system(hModel,BlockType="Integrator",InitialCondition="0")
myModel という名前の読み込み済みのモデルがあるとします。モデル内にある、名前にキーワード speed が含まれているすべての Subsystem ブロックのハンドルを取得します。
モデルのハンドルを取得します。
hModel = get_param("myModel","Handle");
名前にキーワード speed が含まれているすべての Subsystem ブロックのハンドルを取得します。
hBlocks = find_system(hModel,Regexp="on",CaseSensitive="off",BlockType="Subsystem",Name='.*speed.*')
mySubsystem という名前の Subsystem ブロックを含む myModel という名前の読み込み済みのモデルがあるとします。サブシステムに含まれているすべての信号線のハンドルを取得します。
Subsystem ブロックのハンドルを取得します。
hModel = get_param("myModel/mySubsystem","Handle");
サブシステムに含まれているすべての信号線のハンドルを取得します。検索に信号線、端子、および注釈を含めるために、忘れずに FindAll を "on" に設定します。その後、Type を "line" に設定することで、検索を信号線のみに絞り込みます。
hLines = find_system(h,FindAll="on",Type="line")
作業結果を確認するには、サブシステムを開きます。
open_system(h);
ハンドルが hLines に格納されている信号線を強調表示します。
hilite_system(hLines)
独自のファイルに保存されている、読み込まれているすべてのモデル、ライブラリ、およびサブシステムの名前を取得します。
find_system(Type="block_diagram")ライブラリ リンクである単一のサブシステムを含む myModel という名前のモデルがあるとします。モデルが最後に開かれた後に、ライブラリ内の対応するサブシステムに Gain ブロックが追加されています。
モデルを開きます。SearchInsideLibraryLinks を "off" に設定して find_system 関数を使用します。このコマンドは、サブシステムへのライブラリ リンクに従わず、最上位のサブシステムのみを返します。
open_system("myModel") find_system(bdroot,SearchUnderMasks="all",'SearchInsideLibraryLinks="off")
ans =
'myModel'
'myModel/Subsystem'
SearchInsideLibraryLinks を "on" に設定して find_system 関数を使用します。find_system 関数はライブラリ リンクを更新し、サブシステムのブロックを返します。
find_system(bdroot,SearchUnderMasks="all",SearchInsideLibraryLinks="on")
Updating Link: myModel/Subsystem/Gain
Updating Link: myModel/Subsystem/Gain
ans =
'myModel'
'myModel/Subsystem'
'myModel/Subsystem/Gain'
カスタム フィルター関数で定義されているように、MatchFilter引数を使用することで、検索に含める要素を指定できます。
たとえば、検索からモデルの Inport ブロックと Outport ブロックを除外するには、ファイル nonInOutBlocks.m に示されているようにカスタム フィルター関数を定義します。この関数は、各ブロックのタイプをチェックして、Inport でも Outport でもないブロックの場合にのみ true を返します。
type nonInOutBlocks.mfunction match = nonInOutBlocks(handle)
match = true;
if strcmp(get_param(handle, 'Type'), 'block')
blockType = get_param(handle, 'BlockType');
if strcmp(blockType, 'Inport') || ...
strcmp(blockType, 'Outport')
match = false;
end
end
end
このフィルターを slexVariantSubsystemEnableChoice モデルに適用するには、find_system コマンドで関数ハンドルを MatchFilter 引数の値として指定します。
load_system("slexVariantSubsystemEnableChoice"); blks = find_system("slexVariantSubsystemEnableChoice","MatchFilter",@nonInOutBlocks)
blks = 12×1 cell
{'slexVariantSubsystemEnableChoice' }
{'slexVariantSubsystemEnableChoice/Controller' }
{'slexVariantSubsystemEnableChoice/Controller/Enable' }
{'slexVariantSubsystemEnableChoice/Controller/Linear' }
{'slexVariantSubsystemEnableChoice/Controller/Linear/Enable' }
{'slexVariantSubsystemEnableChoice/Controller/Linear/Discrete Filter' }
{'slexVariantSubsystemEnableChoice/Controller/Nonlinear' }
{'slexVariantSubsystemEnableChoice/Controller/Nonlinear/Enable' }
{'slexVariantSubsystemEnableChoice/Controller/Nonlinear/Discrete Filter'}
{'slexVariantSubsystemEnableChoice/Controller/Nonlinear/Lookup Table' }
{'slexVariantSubsystemEnableChoice/Sine Wave' }
{'slexVariantSubsystemEnableChoice/help' }
Simulink® には、モデル内のバリアント ブロックの検索に使用できる組み込み関数が用意されています。詳細については、MatchFilterを参照してください。
slexVariantSubsystems モデルを読み込みます。
model = 'slexVariantSubsystems'; load_system(model); assignin('base','VSS_MODE',2);
Simulink.match.activeVariants 関数を使用して、モデルのコンパイル後にシミュレーションでアクティブなブロックを検索します。
set_param(model,'SimulationCommand','update'); find_system(model,'MatchFilter',@Simulink.match.activeVariants);
Simulink.match.codeCompileVariants 関数を使用して、モデルのコンパイル後に生成 C コードの一部であるブロックを検索します。
slexVariantSubsystems([],[],[],'compileForCodegen'); find_system(model,'MatchFilter',@Simulink.match.codeCompileVariants); slexVariantSubsystems([],[],[],'term');
メモ: 正しい結果を得るには、Simulink.match.activeVariants フィルターと Simulink.match.codeCompileVariants フィルターを使用する前に、"モデルをコンパイルする" 必要があります。モデルがコンパイルされない場合、これらのフィルターによってモデル内のすべてのブロックが返されます。
関数 Simulink.match.allVariants を使用して、バリアントが原因でブロックがアクティブか非アクティブかに関係なく、すべてのブロックを検索します。
find_system(model,'MatchFilter',@Simulink.match.allVariants);バリアント サブシステムの選択肢内のシミュレーションでアクティブなブロックと生成コードの一部であるブロックを検索に含めるには、編集時フィルター関数 Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices を使用します。編集時フィルターの制限の詳細については、MatchFilterを参照してください。
find_system(model, ... 'MatchFilter',@Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices);
バリアント サブシステムのアクティブな選択肢内のブロックを検索に含めるには、編集時フィルター関数 Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices を使用します。編集時フィルターの制限の詳細については、MatchFilterを参照してください。
find_system(model, ... 'MatchFilter',@Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices);
関数 Simulink.match.variantAssemblySubsystems を使用して、slexVariantAssemblySubsystemWithMaskInLabel モデル内のすべての Variant Assembly Subsystem ブロックを検索します。
load_system('slexVariantAssemblySubsystemWithMaskInLabel'); find_system('slexVariantAssemblySubsystemWithMaskInLabel','MatchFilter',@Simulink.match.variantAssemblySubsystems);
この例では、バリアント ブロックを検索するための find_system の組み込みのMatchFilter関数について、コンパイル前とコンパイル後の結果を比較します。シミュレーションでアクティブなバリアント ブロックの検索や生成コードの一部であるバリアント ブロックの検索には、次のフィルターが役立ちます。
Simulink.match.activeVariantsSimulink.match.codeCompileVariants
モデル slexVariantSubsystems を開きます。このモデルは Embedded Coder® を使用してコードを生成するように構成されており、ERT ベースのシステム ターゲット ファイル
ert.tlcを使用しています。
model="slexVariantSubsystems";
open_system(model); 2. "Controller" ブロックの VariantActivationTime パラメーターを code compile に設定します。このアクティベーションのタイミングでは、Embedded Coder を使用して生成されるコードにアクティブと非アクティブの両方のバリアント選択肢が含まれます。
set_param('slexVariantSubsystems/Controller','VariantActivationTime','code compile');
3. Controller ブロックの選択肢について、TreatAsAtomicUnit パラメーターを on に設定します。この手順は、"Controller" ブロックに code compile のアクティベーションのタイミングを使用するために必要です。
set_param('slexVariantSubsystems/Controller/Linear Controller', 'TreatAsAtomicUnit', 'on'); set_param('slexVariantSubsystems/Controller/Nonlinear Controller', 'TreatAsAtomicUnit', 'on');
モデルのコンパイル前の find_system の結果
モデルのコンパイル前に組み込みのマッチ フィルターを使用すると、ブロックのバリアントのアクティブ性に関係なく、モデル内のすべてのブロックが返されます。
find_system(model,MatchFilter=@Simulink.match.activeVariants)
ans = 25×1 cell
{'slexVariantSubsystems' }
{'slexVariantSubsystems/Controller' }
{'slexVariantSubsystems/Controller/sensor1' }
{'slexVariantSubsystems/Controller/sensor2' }
{'slexVariantSubsystems/Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller/Add' }
{'slexVariantSubsystems/Controller/Linear Controller/Discrete↵Transfer Fcn'}
{'slexVariantSubsystems/Controller/Linear Controller/Out1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/1-D Lookup Table' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Add' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Out1' }
{'slexVariantSubsystems/Controller/Out1' }
{'slexVariantSubsystems/Scope' }
{'slexVariantSubsystems/sine1' }
{'slexVariantSubsystems/sine2' }
{'slexVariantSubsystems/sine3' }
{'slexVariantSubsystems/Out1' }
find_system(model,MatchFilter=@Simulink.match.codeCompileVariants)
ans = 25×1 cell
{'slexVariantSubsystems' }
{'slexVariantSubsystems/Controller' }
{'slexVariantSubsystems/Controller/sensor1' }
{'slexVariantSubsystems/Controller/sensor2' }
{'slexVariantSubsystems/Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller/Add' }
{'slexVariantSubsystems/Controller/Linear Controller/Discrete↵Transfer Fcn'}
{'slexVariantSubsystems/Controller/Linear Controller/Out1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/1-D Lookup Table' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Add' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Out1' }
{'slexVariantSubsystems/Controller/Out1' }
{'slexVariantSubsystems/Scope' }
{'slexVariantSubsystems/sine1' }
{'slexVariantSubsystems/sine2' }
{'slexVariantSubsystems/sine3' }
{'slexVariantSubsystems/Out1' }
モデルのコンパイル後の find_system の結果
モデルをコンパイルします。
set_param(model,"SimulationCommand","update");
Simulink.match.activeVariants フィルターを使用すると、シミュレーションでアクティブなブロックが返されます。
find_system(model,MatchFilter=@Simulink.match.activeVariants)
ans = 18×1 cell
{'slexVariantSubsystems' }
{'slexVariantSubsystems/Controller' }
{'slexVariantSubsystems/Controller/sensor1' }
{'slexVariantSubsystems/Controller/sensor2' }
{'slexVariantSubsystems/Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller/Add' }
{'slexVariantSubsystems/Controller/Linear Controller/Discrete↵Transfer Fcn'}
{'slexVariantSubsystems/Controller/Linear Controller/Out1' }
{'slexVariantSubsystems/Controller/Out1' }
{'slexVariantSubsystems/Scope' }
{'slexVariantSubsystems/sine1' }
{'slexVariantSubsystems/sine2' }
{'slexVariantSubsystems/sine3' }
{'slexVariantSubsystems/Out1' }
Simulink.match.codeCompileVariants フィルターを使用すると、生成された C コードの一部であるブロックが返されます。
slexVariantSubsystems([],[],[],"compileForCodegen"); slexVariantSubsystems([],[],[],"term"); find_system("slexVariantSubsystems",MatchFilter=@Simulink.match.codeCompileVariants)
ans = 25×1 cell
{'slexVariantSubsystems' }
{'slexVariantSubsystems/Controller' }
{'slexVariantSubsystems/Controller/sensor1' }
{'slexVariantSubsystems/Controller/sensor2' }
{'slexVariantSubsystems/Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller/Add' }
{'slexVariantSubsystems/Controller/Linear Controller/Discrete↵Transfer Fcn'}
{'slexVariantSubsystems/Controller/Linear Controller/Out1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/1-D Lookup Table' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Add' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Out1' }
{'slexVariantSubsystems/Controller/Out1' }
{'slexVariantSubsystems/Scope' }
{'slexVariantSubsystems/sine1' }
{'slexVariantSubsystems/sine2' }
{'slexVariantSubsystems/sine3' }
{'slexVariantSubsystems/Out1' }
ブロックのアクティブ性に関係なくすべてのブロックを検索
ブロックがバリアントによってアクティブであるか非アクティブであるかに関係なく、すべてのブロックを検索するには、Simulink.match.allVariants() フィルターを使用します。
find_system(model,MatchFilter=@Simulink.match.allVariants)
ans = 25×1 cell
{'slexVariantSubsystems' }
{'slexVariantSubsystems/Controller' }
{'slexVariantSubsystems/Controller/sensor1' }
{'slexVariantSubsystems/Controller/sensor2' }
{'slexVariantSubsystems/Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Linear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Linear Controller/Add' }
{'slexVariantSubsystems/Controller/Linear Controller/Discrete↵Transfer Fcn'}
{'slexVariantSubsystems/Controller/Linear Controller/Out1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor1' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor2' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/sensor3' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/1-D Lookup Table' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Add' }
{'slexVariantSubsystems/Controller/Nonlinear Controller/Out1' }
{'slexVariantSubsystems/Controller/Out1' }
{'slexVariantSubsystems/Scope' }
{'slexVariantSubsystems/sine1' }
{'slexVariantSubsystems/sine2' }
{'slexVariantSubsystems/sine3' }
{'slexVariantSubsystems/Out1' }
入力引数
検索するモデルおよびサブシステム。モデルはハンドルまたは名前として指定します。サブシステムは、対応する Subsystem ブロックのブロック パスとして指定します。ハンドルは数値スカラーまたは数値配列の形式に設定します。名前は string、string 配列、文字ベクトル、または文字ベクトルの cell 配列の形式に設定します。
ハンドルとパスの取得については、Get Handles and Pathsを参照してください。
例: "myModel/mySubsystem"
例: ["myModel1","myModel2"]
データ型: double | array of doubles | string | string array | character vector | cell array of character vectors
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: SearchDepth="0",SearchUnderMasks="none",BlockType ="Goto" は、マスク サブシステムは除き、読み込まれたモデルで Goto ブロックを検索します。
find_system 関数を使用するときは、Name=Value の引数に以下を含めることができます。
検索条件 (例:
CaseSensitive="on")パラメーター値 (例:
BlockType="Gain")
検索条件は任意の順序で指定でき、パラメーター値も任意の順序で指定できますが、検索条件はパラメーター値よりも前に指定しなければなりません。
ブロック パラメーターの詳細については、プログラムによるブロックのパラメーターとプロパティの指定を参照してください。
検索条件
特定の値のブロック ダイアログ ボックス パラメーターを検索するオプション。string または文字ベクトルとして指定します。この引数は他の検索条件の引数よりも後に指定しなければなりません。
データ型: string | character vector
テキストの大文字と小文字を区別するオプション。"on" または "off" として指定します。
データ型: string | character vector
ライン、端子、および注釈を検索に含めるオプション。"on" または 'off' として指定します。このオプションが "off" に設定されている場合、Model 引数をモデルの絶対パス名、モデルのパス名の cell 配列、ハンドル、ハンドルのベクトルのいずれとして指定したかに関係なく、find_system 関数はハンドルのベクトルを返します。
データ型: string | character vector
特定のタイプのモデル要素を検索するオプション。次のいずれかとして指定します。
"block""line""port""annotation""block_diagram"
ライン、端子、または注釈を検索するには、まず FindAll の値を "on" として指定しなければなりません。その後、必要に応じて Type の値を指定することで、検索対象とするモデル要素のタイプを絞り込むことができます。FindAll と Type の前後やそれらの間に他の検索条件オプションを指定できます。たとえば、myModel という名前のモデルで注釈を検索し、マスク内も調べるには、MATLAB® コマンド ウィンドウで次のコマンドを入力します。
find_system("myModel",FindAll="on",SearchUnderMasks="all",Type="annotation")
データ型: string | character vector
最初の結果のみを返して検索を停止するオプション。"on" または "off" として指定します。
データ型: string | character vector
モデルの参照サブシステム内を検索して子ブロックをリストするオプション。"on" または "off" として指定します。
データ型: string | character vector
モデルの参照モデル内を検索して子ブロックをリストするオプション。"on" または "off" として指定します。SearchInsideModelReferences を有効にすると、find_system 関数は最上位モデルとすべての参照モデルを読み込み、階層内のすべてのモデルで再帰的に検索を行います。
データ型: string | character vector
ライブラリ リンク内を検索するオプション。"on" または "off" として指定します。検索するモデルを指定しない場合、SearchInsideLibraryLinks が "on" または "off" のどちらに設定されているのかに関係なく、find_system 関数の結果には読み込まれたライブラリが含まれます。SearchInsideLibraryLinks を SearchUnderMasks と共に使用すると、サブシステムでライブラリ リンクを更新できます。サブシステムのライブラリ リンクを更新するを参照してください。
データ型: string | character vector
コメント化されたブロックを検索に含めるオプション。"on" または "off" として指定します。
データ型: string | character vector
部分的に読み込まれたすべてのモデルを読み込むオプション。モデルを読み込むには "on"、読み込みを無効にするには "off" として指定します。たとえば、読み込み関連の警告が表示されるのを防ぐために、このオプションを使用します。
データ型: string | character vector
マスク内を検索するオプション。次のいずれかとして指定します。
"none"— マスク サブシステムを検索しません。"all"— すべてのマスク サブシステムを検索します。"functional"— パラメーター、説明、ヘルプ文字列、および UI 要素がない、アイコン描画コマンドまたはマスク初期化コマンドをもつマスク サブシステムを検索に含めます。"graphical"— ワークスペース、ダイアログ、ヘルプ文字列、および UI 要素がない、アイコン描画コマンドのみをもつマスク サブシステムを検索に含めます。
メモ
オプション "none" は以前のオプション "off" に置き換わるものです。オプション "all" は以前のオプション "on" に置き換わるものです。
データ型: string | character vector
検索式を正規表現として扱うオプション。"on" または "off" として指定します。RegExp が "on" に設定されている場合、検索では検索式が正規表現として取り扱われます。MATLAB 正規表現の詳細については、正規表現を参照してください。
データ型: string | character vector
指定したレベルまでに検索の深さを制限するオプション。正の整数、string、または文字ベクトルとして指定します。たとえば、読み込まれたモデルのみを検索する場合は 0、モデルの階層構造の最上位のブロックとサブシステムを検索する場合は 1、モデルの階層構造の最上位とその子を検索する場合は 2 のように指定します。既定では、すべてのレベルを検索します。
データ型: string | character vector
メモ
Variants 引数は削除される予定です。代わりに MatchFilter を使用してください。詳細については、バージョン履歴を参照してください。
バリアントを検索するオプション。次のいずれかとして指定します。
"ActiveVariants"— Variant Subsystem 内のアクティブなバリアントの選択肢のみを検索します。"AllVariants"— Variant Subsystem 内のすべてのバリアントの選択肢を検索します。"ActivePlusCodeVariants"— シミュレーション内でアクティブであり、生成されたコードの一部である Variant Subsystem 内のすべてのバリアントの選択肢を検索します。
この検索条件は、[バリアント制御モード] が expression または label に設定されている Variant Subsystem ブロックにのみ適用されます。MatchFilter オプションを指定して関数 find_system を使用すると、すべてのタイプのバリアント ブロックについて動作します。
データ型: string | character vector
検索でブロック、モデル、信号線、端子、注釈などのモデル要素を照合してフィルターを適用するオプション。関数ハンドルとして指定します。MatchFilter を使用して、検索で要素を含めるべきか、スキップすべきかどうかを決定します。
この引数の動作は次のとおりです。
カスタム フィルター関数を使用して要素へのフィルターの適用を許可する
フィルターに一致しない場合に要素の処理を回避する
ブロック、信号線、または注釈に複雑なフィルターを適用して内部で結果にフィルターを適用する
名前付き関数は MATLAB プログラム ファイル内で定義されていなければなりません。関数はモデル要素のハンドルを入力として取り、2 つの出力を返します。
function [match, prune] = func(element)
入力
elementは、ブロック ハンドルなど、処理対象のモデル要素のハンドルです。1 つ目の出力
matchは logical 値です。falseの場合、検索で要素がスキップされます。2 つ目の出力
pruneは、モデル要素がサブシステムである場合にのみ適用される、オプションの logical 値です。既定値はfalseです。この値がtrueに設定されている場合、サブシステム全体が検索対象から除外されます。
カスタム マッチ フィルター関数の作成方法を示す例については、カスタムの MatchFilter 関数を使用した find_system の検索でのフィルターの適用を参照してください。
バリアント: Simulink® には、バリアント ブロックを検索するための、次の組み込みマッチ フィルター関数が用意されています。
コンパイル後のフィルター関数:
Simulink.match.activeVariants— モデルのコンパイル後にシミュレーションでアクティブなブロックを検索します。Simulink.match.codeCompileVariants— モデルのコンパイル後に生成コードの一部であるブロックを検索します。Simulink.match.allVariants— バリアントが原因でブロックがアクティブか非アクティブかに関係なくすべてのブロックを検索します。Simulink.match.variantAssemblySubsystems— すべての Variant Assembly Subsystem ブロックを検索します。
これらのフィルターの使用方法を示す例については、find_system での組み込みの MatchFilter 関数を使用したバリアント ブロックの検索を参照してください。
メモ
アクティベーションのタイミングが [ブロック線図の更新] である Variant Subsystem ブロックについて、@Simulink.match.allVariants マッチ フィルターを使用してすべての選択肢内のブロックを特定する場合、関数は非アクティブなバリアント選択肢をリストしますが、LoadFcn コールバックを実行する対象はアクティブなバリアント選択肢のみになります。非アクティブなバリアント選択肢はモデルの実行に影響しないため、関数はそれらに対して LoadFcn コールバックを実行しません。
正しい結果を得るには、Simulink.match.activeVariants フィルターと Simulink.match.codeCompileVariants フィルターを使用する前に、"モデルをコンパイルする" 必要があります。モデルがコンパイルされない場合、これらのフィルターによってモデル内のすべてのブロックが返されます。これらのフィルターのコンパイル前とコンパイル後の結果を比較した例については、バリアント ブロック用のマッチ フィルターのコンパイル前とコンパイル後の動作の比較を参照してください。
Variant Subsystem ブロックの編集時フィルターの関数:
Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices— バリアント サブシステムの選択肢内のシミュレーションでアクティブなブロックと生成コードの一部であるブロックを検索に含めます。この関数では、Variants引数のActivePlusCodeVariantsオプションと同じような結果が生成されます。Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices— バリアント サブシステムのアクティブな選択肢内のブロックを検索に含めます。この関数では、Variants引数のActiveVariantsオプションと同じような結果が生成されます。
編集時フィルター制限:
フィルターは CompiledVariantInfo ブロック パラメーターのコンパイル後のブロックのアクティブ性情報を使用しません。
フィルターは、以下のブロック パラメーターの設定をもつ Variant Subsystem ブロックにのみ適用されます。
[バリアント制御モード] が
[式]または[ラベル]に設定されている[Variant Subsystem の外部に条件を伝播する] が
offに設定されている
フィルターは、
find_system関数、find_mdlrefs関数、およびSimulink.FindOptionsオブジェクトのコンテキスト内で使用されている場合にのみ、ブロック ハンドルが Variant Subsystem のアクティブな選択肢内にあるかどうかを特定できます。
すべてのタイプのバリアント ブロックに対して処理するには、モデルのコンパイル後に Simulink.match.codeCompileVariants フィルターまたは Simulink.match.activeVariants フィルターを使用します。
分岐した信号線の特定の部分を検索するオプション。次のいずれかとして指定します。
"trunk"– 出力端子に接続されているかソースに接続されていない分岐"branch"– トランクに接続されている分岐
分岐した信号線の特定の部分を検索するには、まず FindAll の値を "on" として指定し、Type の値を "line" として指定してから、SegmentType の値を指定する必要があります。FindAll、Type、および SegmentType オプションの前後やそれらの間に他の検索条件オプションを指定できます。たとえば、myModel という名前のモデルでトランクの信号ライン セグメントを検索し、マスク内も調べるには、MATLAB コマンド ウィンドウで次のコマンドを入力します。
trunkSegments = find_system("myModel",FindAll="on",.. SearchUnderMasks="all",type="line",SegmentType="trunk");
データ型: string | character vector
出力引数
見つかった一致するオブジェクト。ハンドル、名前、またはパスとして返されます。ハンドルは、数値スカラーまたは数値配列の形式に設定されます。名前とパスは、文字ベクトルまたは文字ベクトルの cell 配列の形式に設定されます。
以下の条件の両方が満たされている場合、見つかったオブジェクトは名前またはパスとして返されます。
検索条件オプション
FindAllが既定値"off"に設定されている。名前を使用して
Modelを指定したか、モデルを指定しなかった。
以下の条件の 1 つ以上が満たされている場合、見つかったオブジェクトはハンドルとして返されます。
FindAllの値を"on"に設定した。ハンドルを使用して
Modelを指定した。
データ型: double | array of doubles | character vector | cell array of character vectors
バージョン履歴
R2006a より前に導入LookUnderModelBlocks オプションを使用してモデルのブロック内の検索を有効にできます。たとえば、find_system("mymodel",LookUnderModelBlocks=on,BlockType="Constant") は、モデル mymodel 内のブロックとすべての参照モデルで Constant ブロックを検索します。
いくつかのオプションは名前が変更されています。
LookUnderModelBlocksの名前はSearchInsideModelReferencesに変更されました。LookInsideSubsystemReferenceの名前はSearchInsideSubsystemReferencesに変更されました。LookUnderMasksの名前はSearchUnderMasksに変更されました。FollowLinksの名前はSearchInsideLibraryLinksに変更されました。
従来の名前は引き続き有効です。
将来のリリースで Variants 引数が削除されることに伴い、次の警告が導入されています。
関数
find_systemをVariants引数なしで使用する場合、関数は検索中に Variant Subsystem ブロックの非アクティブな選択肢をスキップすると警告を生成します。2 つのバリアントの選択肢
Linear ControllerおよびNonlinear Controllerをもつ Variant Subsystem ブロックをもつモデルについて検討します。Nonlinear Controllerブロックがアクティブな選択肢です。次のコマンドでは、非アクティブな
Linear Controllerブロックがスキップされ、警告が生成されます。blocks = find_system('sldemo_variant_subsystems/Controller')Warning: Using find_system without the 'Variants' argument skips inactive Variant Subsystem blocks in the search. This behavior will change in a future release to look at all choices of the Variant Subsystem. To find blocks thatare active in simulation or code generation, compile the model and use the built-in variant filters with the 'MatchFilter' option. blocks = 12×1 cell array {'sldemo_variant_subsystems/Controller' } {'sldemo_variant_subsystems/Controller/sensor1' } {'sldemo_variant_subsystems/Controller/sensor2' } {'sldemo_variant_subsystems/Controller/sensor3' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table'} {'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' } {'sldemo_variant_subsystems/Controller/Out1' }Variants引数を使用する場合、関数はその値が'AllVariants'に設定されていると警告を生成します。blocks = find_system('sldemo_variant_subsystems/Controller',... 'Variants','AllVariants')
Warning: 'Variants' will be removed. Instead of using 'Variants' with value set to 'AllVariants', use 'MatchFilter' with value set to @Simulink.match.allVariants. blocks = 19×1 cell array {'sldemo_variant_subsystems/Controller' } {'sldemo_variant_subsystems/Controller/sensor1' } {'sldemo_variant_subsystems/Controller/sensor2' } {'sldemo_variant_subsystems/Controller/sensor3' } {'sldemo_variant_subsystems/Controller/Linear Controller' } {'sldemo_variant_subsystems/Controller/Linear Controller/sensor1' } {'sldemo_variant_subsystems/Controller/Linear Controller/sensor2' } {'sldemo_variant_subsystems/Controller/Linear Controller/sensor3' } {'sldemo_variant_subsystems/Controller/Linear Controller/Add' } {'sldemo_variant_subsystems/Controller/Linear Controller/Discrete↵Transfer Fcn'} {'sldemo_variant_subsystems/Controller/Linear Controller/Out1' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor1' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor2' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/sensor3' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/1-D Lookup Table' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/Out1' } {'sldemo_variant_subsystems/Controller/Out1' }
組み込みのマッチ フィルター Simulink.match.allVariants を使用して、ブロックがバリアントによってアクティブであるか非アクティブであるかに関係なく、バリアント モデル内のすべてのブロックを検出できます。このフィルターは AllVariants オプションに対する推奨される置き換えです。
| 削除予定 | 推奨される置き換え |
|---|---|
find_system(model,'Variants', ... 'AllVariants'); | find_system(model,'MatchFilter', ... @Simulink.match.allVariants); |
Variants:関数find_systemをVariants引数を指定せずに使用する場合、既定では Variant Subsystem ブロックのアクティブなバリアントの選択肢のみが検索に含まれるようになりました。[Variant Subsystem の外部に条件を伝播する] パラメーターが
onに設定された Variant Source ブロック、Variant Sink ブロック、Variant Subsystem ブロックなどの他のバリアント ブロックについては、すべての選択肢が検索に含まれます。2 つのバリアントの選択肢
Linear ControllerおよびNonlinear Controllerをもつ Variant Subsystem をもつモデルについて検討します。このコマンドは、モデル内のアクティブな Add ブロックのみを返します。
add_blocks = find_system('sldemo_variant_subsystems/Controller',... 'BlockType','Sum')
add_blocks = 1×1 cell array {'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add'}MatchFilter:関数find_systemでMatchFilter引数を使用する場合、既定ではアクティブと非アクティブのバリアントの選択肢にフィルターが適用されます。2 つのバリアントの選択肢
Linear ControllerおよびNonlinear Controllerをもつ Variant Subsystem をもつモデルについて検討します。フィルター関数findAddBlocksは、モデル内のすべての Add ブロックを検索します。function match = findAddBlocks(handle) match = strcmp(get_param(handle, 'Type'), 'block') &&... strcmp(get_param(handle, 'BlockType'), 'Sum'); end
次のコマンドでは、モデル内のアクティブと非アクティブの Add ブロックが返されます。
add_blocks = find_system('sldemo_variant_subsystems','MatchFilter',... @findAddBlocks)
add_blocks = 2×1 cell array {'sldemo_variant_subsystems/Controller/Linear Controller/Add' } {'sldemo_variant_subsystems/Controller/Nonlinear Controller/Add'}
Variants 引数は将来のリリースで find_system から削除されます。Variants 引数を使用する関数呼び出しは引き続き動作しますが、警告が出ます。
関数 find_system で Variants 引数を使用すると、一貫しない検索結果が出力されます。関数 find_system は編集時の操作ですが、すべてのタイプのバリアント ブロックをもつモデルでブロックがアクティブであるかどうかを判定するためにモデルをコンパイルする必要があります。
シミュレーション中またはコード生成中にアクティブであるバリアント ブロックを検索するには、"モデルをコンパイル" し、関数 find_system を MatchFilter 引数を指定して使用します。
次の表に、Variants 引数の異なる値について、推奨される置き換えを示します。
| 削除予定 | 推奨される置き換え |
|---|---|
find_system(model,'Variants', ... 'ActiveVariants'); | set_param(model,'SimulationCommand','update'); find_system(model,'MatchFilter', ... @Simulink.match.activeVariants); |
find_system(model,'Variants', ... 'ActivePlusCodeVariants'); | model([], [], [], 'compileForCodegen'); activeBlks= find_system(model,'MatchFilter', ... @Simulink.match.codeCompileVariants); model([], [], [], 'term'); |
関数 find_system を使用するときに MatchFilter 引数と Variants 引数の両方を指定することはできません。
次のコマンドではエラーが発生します。
find_system(bdroot,'MatchFilter',@Simulink.match.activeVariants,... 'Variants','ActiveVariants');
検索で要素を照合してフィルターを適用するために、カスタム フィルター関数を定義し、名前と値の引数 MatchFilter に対する値として関数ハンドルを渡すことができます。
シミュレーション内でアクティブであるか生成コードの一部であるバリアント ブロックを検索するには、モデルをコンパイルした後に、組み込みのマッチ フィルター関数 Simulink.match.activeVariants、Simulink.match.codeCompileVariants、および Simulink.match.allVariants を使用します。
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)