Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

find_system

查找模型、模块、信号线、端口和注释

说明

示例

Objects = find_system 返回加载的模型及其模块,包括子系统。

示例

Objects = find_system(Model) 返回指定的模型及其模块。

示例

Objects = find_system(Name,Value) 返回加载的模型以及这些模型中满足一个或多个 Name,Value 对组参数指定的条件的对象。您可以使用此语法指定搜索约束和搜索特定的参数值。在参数和值对组之前指定搜索约束。

示例

Objects = find_system(Model,Name,Value) 返回指定模型中满足指定条件的对象。

示例

全部折叠

打开示例。然后,加载 vdp 模型。

load_system('vdp')

查找所有加载的模型和库及其模块。

find_system
ans = 13x1 cell
    {'vdp'                }
    {'vdp/Callback Button'}
    {'vdp/Constant'       }
    {'vdp/Mu'             }
    {'vdp/Product'        }
    {'vdp/Scope'          }
    {'vdp/Square'         }
    {'vdp/Sum'            }
    {'vdp/Sum1'           }
    {'vdp/x1'             }
    {'vdp/x2'             }
    {'vdp/Out1'           }
    {'vdp/Out2'           }

打开示例。然后,加载 vdp ex_sldemo_clutch 模型。

load_system({'vdp','ex_sldemo_clutch'})

查找 vdp 模型及其模块。

find_system('vdp')
ans = 13x1 cell
    {'vdp'                }
    {'vdp/Callback Button'}
    {'vdp/Constant'       }
    {'vdp/Mu'             }
    {'vdp/Product'        }
    {'vdp/Scope'          }
    {'vdp/Square'         }
    {'vdp/Sum'            }
    {'vdp/Sum1'           }
    {'vdp/x1'             }
    {'vdp/x2'             }
    {'vdp/Out1'           }
    {'vdp/Out2'           }

打开示例。然后,加载 vdp 模型。

load_system('vdp')

查找所有加载的模型、子系统和库。仅当子系统可以独立加载时,才会返回子系统名称。

find_system('type','block_diagram')
ans = 1x1 cell array
    {'vdp'}

打开示例。然后,加载 ex_sldemo_clutch 模型。

load_system('ex_sldemo_clutch')

返回作为 ex_sldemo_clutch 模型中的 Unlocked 子系统的子级存在的所有 Goto 模块的名称。

find_system('ex_sldemo_clutch/Unlocked','SearchDepth',1,'BlockType','Goto')
ans = 2x1 cell
    {'ex_sldemo_clutch/Unlocked/Goto' }
    {'ex_sldemo_clutch/Unlocked/Goto1'}

打开示例。然后,加载 vdp 模型。

load_system('vdp')

vdp 模型中查找满足以下两个条件的模块。

  • 该模块是 Integrator 模块。

  • 初始条件的值为 0。

find_system('vdp','BlockType','Integrator','InitialCondition','0')
ans = 1x1 cell array
    {'vdp/x2'}

打开示例。然后,加载 vdp 模型。

load_system('vdp')

使用 find_system 函数查找 vdp 模型中的信号线。要在搜索中包括信号线,请将 'FindAll' 指定为 'on'

l = find_system('vdp','FindAll','on','type','line')
l = 18×1

   31.0002
   30.0002
   29.0002
   28.0002
   27.0002
   26.0002
   25.0002
   24.0002
   23.0002
   22.0002
      ⋮

使用 find_system 函数在 vdp 模型中查找注释。要在搜索中包括注释,请将 'FindAll' 指定为 'on'

an = find_system('vdp','FindAll','on','type','annotation')
an = 3×1

   34.0002
   33.0002
   32.0002

打开示例。然后,加载 vdpf14 模型。

models={'vdp','f14'};
load_system(models)

vdpf14 模型中查找任何具有 Block Dialog 框参数且其值为 3 的模块。

find_system(models,'BlockDialogParams','3')
ans = 3x1 cell
    {'vdp/Square'                 }
    {'f14/Aircraft...'            }
    {'f14/Controller/q (rad//sec)'}

打开示例。然后,加载 ex_sldemo_clutch vdp 模型。

load_system({'ex_sldemo_clutch','vdp'})

在当前加载的模型的顶层查找“模块参数”对话框参数值以 3 开头的所有模块。

find_system('SearchDepth','1','regexp','on','BlockDialogParams','^3')
ans = 2x1 cell
    {'vdp/Square'        }
    {'ex_sldemo_clutch/w'}

使用正则表达式进行搜索时,您可以指定要匹配的字符向量的一部分,以返回包含该字符向量的所有对象。

查找 ex_sldemo_clutch 模型中的所有 Integrator 模块。

load_system('ex_sldemo_clutch');
ports=find_system('ex_sldemo_clutch','regexp','on','blocktype','Integrator')
ports = 3x1 cell
    {'ex_sldemo_clutch/Locked/Engine//Vehicle...'}
    {'ex_sldemo_clutch/Unlocked/Engine...'       }
    {'ex_sldemo_clutch/Unlocked/Vehicle...'      }

假设您有一个名为 myModel 的模型,它包含一个库链接子系统。上次打开模型后,向库中对应的子系统中添加了一个 Gain 模块。

打开模型。使用 find_system 并将 'FollowLinks' 设置为 'off'。此命令不会跟随库链接进入子系统,并且只返回顶层子系统。

open_system('myModel')
find_system(bdroot,'LookUnderMasks','on','FollowLinks', 'off')
ans = 

    'myModel'
    'myModel/Subsystem'

使用 find_system 并将 'FollowLinks' 设置为 'on'find_system 将更新库链接,并返回子系统中的模块。

find_system(bdroot,'LookUnderMasks','on','FollowLinks','on')
Updating Link: myModel/Subsystem/Gain
Updating Link: myModel/Subsystem/Gain

ans = 

    'myModel'
    'myModel/Subsystem'
    'myModel/Subsystem/Gain'

如果您进行多个函数调用且这些调用要求您指定函数所作用的模型或模块,请使用句柄而不是文件路径来指定模型或模块。

如果要对 find_system 函数进行多次调用,请将 vdp model 指定为句柄。

打开示例。然后,加载 vdp 模型。

load_system('vdp')

获取 vdp 模型的句柄。

h = get_param('vdp','Handle')
h = 4.8828e-04

vdp 模型中查找 vdp 模型中值为 0 的“模块参数”对话框参数。将要搜索的模型指定为 vdp 模型的句柄。

find_system(h,'BlockDialogParams','0')
ans = 8×1

    4.0005
    4.0005
    6.0005
   11.0005
   12.0005
   12.0005
   13.0005
   13.0005

vdp 模型中查找“模块参数”对话框参数值以 3 开头的模块参数。将要搜索的模型指定为 vdp 模型的句柄。

find_system(h,'regexp','on','BlockDialogParams','^3')
ans = 7.0005

vdp 模型中查找模块名称包含字符向量 'port' 的模块。将要搜索的模型指定为 vdp 模型的句柄。

find_system(h,'regexp','on','blocktype','port')
ans = 2×1

   12.0005
   13.0005

MatchFilter 参数与自定义过滤器函数结合使用,在 vdp 模型中查找除 Inport 和 Outport 模块之外的模块。

此示例的自定义函数在文件 nonInOutBlocks.m 中定义。

function 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

提供函数句柄作为 MatchFilter 参数的值。

load_system('vdp');
blks = find_system('vdp','MatchFilter',@nonInOutBlocks);

加载 slexVariantSubsystems 模型。

model = 'slexVariantSubsystems';
load_system(model);
VSS_LINEAR_CONTROLLER = 
  VariantExpression with properties:

    Condition: 'VSS_MODE==1'

VSS_NONLINEAR_CONTROLLER = 
  VariantExpression with properties:

    Condition: 'VSS_MODE==2'

VSS_MODE = 2
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.allVariants 函数查找所有模块的过滤器函数,而不管该模块是否因变体而处于活动或非活动状态。

find_system(model,'MatchFilter',@Simulink.match.allVariants);

使用 Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoice 函数查找在仿真中处于活动状态或在编辑时作为生成代码一部分的可变子系统模块选择项。有关编辑时过滤器的限制的信息,请参阅 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);

输入参数

全部折叠

要搜索的模型,指定为完整的模型路径名称、模型路径名称元胞数组、句柄或句柄向量。

示例: 'MyModel/Subsystem1'

示例: {'vdp','ex_sldemo_clutch'}

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'SearchDepth','0','LookUnderMasks','none','BlockType','Goto' 在加载的模型(不包括封装子系统)中搜索 Goto 模块。

使用 find_system 函数时,Name,Value 对组参数可以包括:

  • 指定为条件选项和值对组的搜索约束,例如 'CaseSensitive','on'

  • 指定为参数名称和值对组的参数值,例如 'BlockType','Gain'

您可以按任意顺序指定搜索条件参量对组以及按任意顺序指定参数值参量对组,但搜索条件参量对组必须在参数值参量对组之前。

有关模块参数列表,请参阅模块特定的参数

用于在模块对话框参数中搜索指定值的选项,指定为以逗号分隔的对组,其中包含 'BlockDialogParams' 和一个字符向量或字符串标量。该对组必须跟在其他搜索约束对组之后。

用于在匹配时考虑大小写的选项,指定为以逗号分隔的对组,由 'CaseSensitive''on'(表示搜索区分大小写)或 'off' 组成。

用于指示是否在搜索中包括模型中的信号线、端口和注释的选项,指定为由 'FindAll''on''off' 组成的以逗号分隔的对组。当此选项设置为 'on' 时,无论您是将 Model 参数指定为完整模型路径名称、模型路径名称元胞数组、句柄还是句柄向量,find_system 都会返回句柄向量。

用于仅返回特定类型的结果的选项,指定为由 'Type' 和以下选项之一组成的以逗号分隔的对组:

  • 'block'

  • 'line'

  • 'port'

  • 'annotation'

要在模型中查找信号线、端口或注释,您必须首先将 FindAll 的值指定为 'on',然后指定类型。例如,要在名为 myModel 的模型中查找注释,请在命令行中输入以下命令。

find_system('myModel','FindAll','on','Type','annotation')

用于仅返回第一个结果然后停止搜索的选项,指定为以逗号分隔的对组,由 'FirstResultOnly''on''off' 组成。

用于查看模型中的引用子系统内部并列出子模块的选项,指定为以逗号分隔的对组,其中包含 'LookInsideSubsystemReference''on''off'

用于跟随链接进入库模块的选项,指定为以逗号分隔的对组,由 'FollowLinks''on''off' 组成。如果您不指定要搜索的模型,find_system 将在结果中包括已加载的库,不管您将 'FollowLinks' 设置为 'on' 还是 'off'。您可以将 'FollowLinks''LookUnderMasks' 结合使用,以更新子系统中的库链接。请参阅更新子系统中的库链接

用于指示是否在搜索中包含带注释的模块的选项,指定为以逗号分隔的对组,由 'IncludeCommented''on''off' 组成。

用于指示是否将部分加载的模型完全加载的选项,指定为以逗号分隔的对组,包含 'LoadFullyIfNeeded''on'(表示加载模型)或 'off'(表示禁用加载)。例如,使用此选项可以防止出现加载警告。

用于指示如何搜索封装子系统的选项,指定为以逗号分隔的对组,由 'LookUnderMasks' 和以下选项之一组成:

  • 'graphical' - 搜索包括只有图标绘图命令而没有工作区、对话框、帮助字符串和 UI 元素的封装子系统。

  • 'none' - 搜索将跳过封装子系统。

  • 'functional' - 搜索包括具有图标绘图命令或封装初始化命令但没有参数、描述、帮助字符串和 UI 元素的封装子系统

  • 'all' - 搜索包括所有封装子系统。

  • 'on' - 搜索包括所有封装子系统。

  • 'off' - 搜索将跳过封装子系统。

用于将搜索表达式视为正则表达式的选项,指定为由 'RegExp''on''off' 组成的以逗号分隔的对组。当 'RegExp' 设置为 'on' 时,搜索将搜索表达式视为正则表达式。有关 MATLAB® 正则表达式的详细信息,请参阅正则表达式

用于将搜索深度限制在指定级别的选项,指定为以逗号分隔的对组,由 'SearchDepth' 和正整数字符向量或字符串标量组成。例如,指定 '0' 将仅搜索加载的模型,指定 '1' 将搜索模型层次结构顶层的模块和子系统,指定 '2' 将搜索模型层次结构的顶层及其子级等。默认值为搜索所有级别。

注意

Variants 参数将被删除。请改用 MatchFilter。有关详细信息,请参阅兼容性注意事项

用于搜索变体的选项,指定为以逗号分隔的对组,由 'Variants' 和以下选项之一组成:

  • 'ActiveVariants' - 仅搜索 Variant Subsystem 中的活动变体选择项。

  • 'AllVariants' - 搜索 Variant Subsystem 中的所有变体选择项。

  • 'ActivePlusCodeVariants' - 搜索 Variant Subsystem 中的在仿真中处于活动状态并且是生成代码一部分的所有变体选择项。

此搜索约束仅适用于变体控制项模式设置为 expressionlabelVariant Subsystem 模块。将 find_system 函数与 MatchFilter 选项结合使用,可对所有类型的变体模块进行操作。

用于在搜索中匹配和过滤元素(如模块、模型、信号线、端口和注释)的选项,指定为函数句柄。使用 MatchFilter 确定在搜索中应包括还是跳过元素。

参数:

  • 允许您使用自定义过滤器函数过滤元素

  • 在过滤器不匹配时避免处理元素

  • 对模块、信号线或注释应用复杂过滤器,以在内部过滤结果

命名函数必须在 MATLAB 程序文件中定义。该函数将元素的句柄作为输入,并返回两个输出。

 function [match, prune] = func(element)
 
  • 输入 element 是正在处理的组件的句柄,例如模块句柄。

  • 第一个输出 match 是逻辑值。如果为 false,搜索将跳过该元素。

  • 第二个输出 prune 是可选的逻辑值,仅在 element 是子系统时适用。默认值为 false。如果此值设置为 true,则搜索中将忽略整个子系统。

变体:Simulink® 提供这些内置的匹配过滤器函数来查找变体模块。

编译后过滤器函数:

  • Simulink.match.activeVariants - 过滤器函数,用于查找模型编译后在仿真中处于活动状态的模块。

  • Simulink.match.codeCompileVariants - 过滤器函数,用于查找在模型编译后作为生成代码一部分的模块。

  • Simulink.match.allVariants - 用于查找所有模块的过滤器函数,而不管该模块是否因变体而处于活动或非活动状态。

  • Simulink.match.variantAssemblySubsystems - 用于查找所有 Variant Assembly Subsystem 模块的过滤器函数。

注意

为了获得正确的结果,在使用 Simulink.match.activeVariantsSimulink.match.codeCompileVariants 过滤器之前,您必须编译模型。如果模型未编译,这些过滤器将返回模型中的所有模块。

有关比较这些滤波器的编译前和编译后结果的示例,请参阅Use find_system with Built-In MatchFilter Options for Variant Blocks

Variant Subsystem 模块的编辑时过滤器函数:

  • Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices - 用于查找 Variant Subsystem 模块选择项的过滤器函数,这些模块选择项在仿真中处于活动状态或者作为生成代码的一部分。此函数产生的结果与 Variants 参数的 'ActivePlusCodeVariants' 选项类似。

  • Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices - 查找处于活动状态的 Variant Subsystem 模块选择项的过滤器函数。此函数产生的结果与 Variants 参数的 'ActiveVariants' 选项类似。

编辑时过滤器的限制:

  • 过滤器不使用 CompiledVariantInfo 模块参数中的编译后模块活动性信息。

  • 过滤器仅适用于具有以下模块参数设置的 Variant Subsystem 模块:

    • 变体控制项模式设置为表达式标签

    • 将条件传播到可变子系统之外设置为 off

  • 仅在 find_systemfind_mdlrefsSimulink.FindOptions 的上下文中使用时,过滤器才能识别模块句柄是否在 Variant Subsystem 的活动选择项内。

要对所有类型的变体模块进行操作,请在模型编译后使用 Simulink.match.codeCompileVariantsSimulink.match.activeVariants 过滤器。

输出参数

全部折叠

找到匹配对象,以路径名称元胞数组或句柄向量形式返回。

当以下两个条件都满足时,找到的对象将以路径名称元胞数组的形式返回。

  • 搜索条件选项 FindAll 设置为其默认值 'off'

  • 指定了 Model 作为路径名称或路径名称元胞数组,或未指定模型。

当至少满足以下一个条件时,找到的对象将以句柄向量形式返回。

  • FindAll 的值设置为了 'on'

  • Model 指定为了句柄或句柄向量。

版本历史记录

在 R2006a 之前推出

全部展开