Main Content

find_mdlrefs

在模型层次结构中查找引用模型和 Model 模块

说明

[models,blocks] = find_mdlrefs(system) 查找模型层次结构中指定系统下的所有引用模型和 Model 模块。find_mdlrefs 函数临时加载模型。

示例

[models,blocks] = find_mdlrefs(system,Name,Value) 使用一个或多个名称-值对组提供其他搜索选项。例如,要保持模型处于已加载状态而不是临时加载,请将 KeepModelsLoaded 设置为 true

示例

示例

全部折叠

查找指定的模型所引用的所有模型的引用模型和 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 函数,并将 KeepModelsLoaded 设置为 true

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');
### Searching for referenced models in model 'slexVariantMdlRefCondProp'.
### Found 2 model reference targets to update.
### Starting serial model reference 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 19.027s 
slexVariantMdlRefCondProp_sub2  Target (slexVariantMdlRefCondProp_sub2.c) did not exist.  Code generated and compiled.  0h 0m 10.335s 

2 of 2 models built (0 models already up to date)
Build duration: 0h 0m 32.347s
[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

查找在仿真中处于活动状态或在编辑时作为生成代码一部分的可变子系统模块选择项。有关编辑时过滤器的限制的信息,请参阅 MatchFilter

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

Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices

查找在编辑时处于活动状态的可变子系统模块选择项。有关编辑时过滤器的限制的信息,请参阅 MatchFilter

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

输入参数

全部折叠

系统名称、模块路径或句柄,指定为字符向量、字符串标量或数值标量。

系统必须为 SLX 文件、MDL 文件、Model 模块或 Subsystem 模块。

如果指定文件名,请不要包含文件扩展名。

数据类型: double | char | string

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但参量对组的顺序无关紧要。

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

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

保持模型处于已加载状态的选项,指定为以逗号分隔的对组,其中包含 'KeepModelsLoaded' 和数值或逻辑值 1 (true) 或 0 (false)。

默认情况下,该函数加载并关闭尚未加载的模型。要保持模型处于已加载状态,请将此参量设置为 true。如果您计划在找到模型后与模型进行交互,则保持模型处于已加载状态会很有用。

数据类型: logical

要搜索的级别,指定为由 'AllLevels' 和数值或逻辑值 1 (true) 或 0 (false) 组成的以逗号分隔的对组。

  • true - 搜索指定 system 的模型层次结构中的所有 Model 模块。

  • false - 仅搜索顶层系统。

数据类型: logical

在搜索结果中包含受保护模型的选项,指定为以逗号分隔的对组,其中包含 'IncludeProtectedModels' 和数值或逻辑值 1 (true) 或 0 (false)。

此设置只影响返回的引用模型列表;它不影响返回的 Model 模块列表。

数据类型: logical

在搜索结果中包含带注释的模块的选项,指定为以逗号分隔的对组,其中包含 'IncludeCommented' 和数值或逻辑值 1 (true) 或 0 (false)。

数据类型: logical

搜索时匹配大小写的选项,对于区分大小写的搜索指定为 true,对于不区分大小写的搜索指定为 false

数据类型: logical

跟随库链接的搜索选项,指定为 truefalse。如果为 true,搜索将跟随链接进入库模块。

数据类型: logical

搜索封装模块的选项,指定为:

  • 'all' - 在所有封装模块中搜索。

  • 'none' - 防止在封装系统中搜索。

  • 'functional' - 包括没有对话框的封装子系统。

  • 'graphical' - 包括没有工作区或对话框的封装子系统。

数据类型: char | string

用于在搜索中匹配和过滤元素(如模块、系统、信号线、端口和注释)的选项,指定为函数句柄。使用 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.activeVariantsSimulink.match.codeCompileVariants 过滤器之前,您必须编译模型。如果模型未编译,这些过滤器将返回模型中的所有模块。有关比较这些滤波器的编译前和编译后时间结果的示例,请参阅Compare Pre-Compile and Post-Compile Behavior of Match Filters 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 过滤器。

注意

Variants 参量将被删除。请改用 MatchFilter。有关详细信息,请参阅 版本历史记录

在搜索结果中包含变体模型的选项,指定为以逗号分隔的对组,其中包含 'Variants''ActivePlusCodeVariants''ActiveVariants''AllVariants'

  • 'ActivePlusCodeVariants' - 包括 Variant Subsystem 中所有在仿真中处于活动状态并且是所生成代码一部分的变体模型。

  • 'ActiveVariants' - 包括 Variant Subsystem 模块中的活动变体模型。

  • 'AllVariants' - 包括 Variant Subsystem 模块中的所有变体模型。

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

数据类型: char | string

在搜索结果中包含指定系统的选项,指定为以逗号分隔的对组,其中包含 'ReturnTopModelAsLastElement' 和数值或逻辑值 1 (true) 或 0 (false)。

默认情况下,返回的引用模型列表中的最后一个元素是您用 system 参量指定的模型、库或子系统文件的名称。如果指定模块,最后一个元素是包含该模块的文件的名称。

数据类型: logical

输出参量

全部折叠

模型的名称,以字符向量元胞数组形式返回。

默认情况下,最后一个元素是您用 system 参量指定的模型、库或子系统文件的名称。如果指定模块,最后一个元素是包含该模块的模型、库或子系统文件。

Model 模块的名称,以字符向量元胞数组形式返回。

版本历史记录

在 R2006a 之前推出

全部展开