find_mdlrefs
在模型层次结构中查找引用的模型和模型块
描述
例子
在模型层次结构中查找引用模型
查找指定模型引用的所有模型的引用模型和模型块。
load_system (“sldemo_mdlref_basic”);[myModels,myModelBlks] = find_mdlrefs(“sldemo_mdlref_basic”)
myModels =2 x1细胞{'sldemo_mdlref_counter'} {'sldemo_mdlref_basic'}
myModelBlks =3 x1细胞{'sldemo_mdlref_basic/CounterA'} {'sldemo_mdlref_basic/CounterB'} {'sldemo_mdlref_basic/CounterC'}
在模型层次结构中查找并加载所有模型
默认情况下,find_mdlrefs
函数加载,然后关闭尚未加载的模型。要确定加载了哪些模型,请使用find_system
函数。
find_mdlrefs (“sldemo_mdlref_depgraph”);find_system (“类型”,“block_diagram”)
Ans = 0x1空单元格数组
要查找并加载模型层次结构中的所有模型,请设置KeepModelsLoaded
来真正的
.
find_mdlrefs (“sldemo_mdlref_depgraph”,“KeepModelsLoaded”,真正的);find_system (“类型”,“block_diagram”)
ans =7 x1细胞{'sldemo_mdlref_thermostat'} {' sldemo_mdlref_加热器'}{'sldemo_mdlref_F2C'} {'sldemo_mdlref_outdoor_temp'} {'sldemo_mdlref_house'} {'sldemo_mdlref_heat2cost'} {'sldemo_mdlref_depgraph'}
顶部模型和所有引用的模型仍然加载。如果你打开sldemo_mdlref_depgraph
,您可以在模型层次结构中导航,而不必等待被引用的模型在打开它们时加载。
输入参数
系统
- - - - - -系统名称、块路径或句柄
特征向量|字符串标量|数字标量
系统名称、块路径或句柄,指定为字符向量、字符串标量或数字标量。
系统必须是SLX文件、MDL文件、模型块,或子系统块。
如果指定了文件名,请不要包含文件扩展名。
数据类型:双
|字符
|字符串
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:refModels = find_mdlrefs(topmodel,' keepmodelloaded ',true,'ReturnTopModelAsLastElement',false)
KeepModelsLoaded
- - - - - -选项保持模型加载
假
或0
(默认)|真正的
或1
选项以保持模型加载,指定为逗号分隔的对,由“KeepModelsLoaded”
数字或逻辑1
(真正的
)或0
(假
).
默认情况下,该函数加载并关闭尚未加载的模型。要保持模型加载,将此参数设置为真正的
.如果您计划在找到模型后与它们进行交互,那么保持模型加载是有用的。
数据类型:逻辑
AllLevels
- - - - - -搜索级别
真正的
或1
(默认)|假
或0
IncludeProtectedModels
- - - - - -选项,包括受保护的模型
假
或0
(默认)|真正的
或1
选项,在搜索结果中包括受保护的模型,指定为逗号分隔的对,由“IncludeProtectedModels”
数字或逻辑1
(真正的
)或0
(假
).
此设置仅影响返回的引用模型列表;的返回列表不受影响模型块。
数据类型:逻辑
IncludeCommented
- - - - - -选项,包括注释块
假
或0
(默认)|真正的
或1
选项,在搜索结果中包含注释块,指定为逗号分隔的对,由“IncludeCommented”
数字或逻辑1
(真正的
)或0
(假
).
数据类型:逻辑
CaseSensitive
- - - - - -搜索时匹配大小写的选项
真正的
(默认)|假
选项,在搜索时匹配大小写,指定为真正的
区分大小写的搜索或假
用于不区分大小写的搜索。
数据类型:逻辑
FollowLinks
- - - - - -选项搜索遵循图书馆链接
真正的
(默认)|假
选项,以搜索库链接,指定为真正的
或假
.如果真正的
,搜索会跟随链接进入库块。
数据类型:逻辑
LookUnderMasks
- - - - - -用于搜索屏蔽块的选项
“所有”
(默认)|“没有”
|“功能”
|“图形”
搜索屏蔽块的选项,指定为:
“所有”
-搜索所有屏蔽块。“没有”
—屏蔽系统中禁止搜索。“功能”
—包括没有对话框的屏蔽子系统。“图形”
—包括没有工作空间或对话框的屏蔽子系统。
数据类型:字符
|字符串
MatchFilter
- - - - - -在搜索中匹配和过滤元素的选项
函数处理
选项,用于匹配和筛选搜索中的块、系统、行、端口和注释等元素,指定为函数句柄。使用MatchFilter
以确定在搜索中是否应该包括或跳过元素。
论点:
允许您使用自定义筛选函数筛选元素
避免在过滤器不匹配时处理元素
在块、行或注释上应用复杂过滤器,以便在内部过滤结果
命名函数必须在MATLAB中定义®程序文件。该函数接受元素的句柄作为输入,并返回两个输出。
函数[match, prune] = func(element)
输入
元素
正在处理的块的句柄。第一个输出,
匹配
,为逻辑值。如果假
,搜索跳过元素。第二个输出,
修剪
,是一个可选的逻辑值,仅适用于元素
是一个子系统。默认值为假
.如果该值设置为真正的
时,整个子系统将从搜索中省略。
例如,使用MatchFilter
找到所有模型控件的模型中InitFcn
Callback是使用filter函数定义的initFcnMdlBlocks
:
函数match = initFcnMdlBlocks(handle) match = ~isempty(get_param(handle,“InitFcn”));结束
目录(fullfile (matlabroot,“例子”,“金宝appsimulink_variants”,“主要”));模型=“slexVariantMdlRefCondProp”;load_system(模型);[models,blocks] = find_mdlrefs(model,“MatchFilter”@initFcnMdlBlocks)
变体:金宝app®提供这些内置匹配筛选器函数,以查找模拟中活动的变量块或部分生成的代码。
金宝appSimulink.match.activeVariants
-过滤功能,以查找在模型编译后的模拟中活跃的块。金宝appSimulink.match.codeCompileVariants
-过滤器功能,以查找块的一部分,生成的代码在模型编译后。金宝appSimulink.match.allVariants
-过滤功能,查找所有的块,而不管块是否由于变量而处于活动或非活动状态。
请注意
为了得到正确的结果,您必须编译模型使用前金宝appSimulink.match.activeVariants
而且金宝appSimulink.match.codeCompileVariants
过滤器。如果没有编译模型,这些过滤器将返回模型中的所有块。
例如,使用金宝appSimulink.match.activeVariants
在模型中查找活动变量的选项。
目录(fullfile (matlabroot,“例子”,“金宝appsimulink_variants”,“主要”));模型=“slexVariantMdlRefCondProp”;load_system(模型);set_param(模型,“SimulationCommand”,“更新”);[models,blocks] = find_mdlrefs(model,“MatchFilter”, 金宝app@Simulink.match.activeVariants);
例如,使用金宝appSimulink.match.codeCompileVariants
选项来查找生成的C代码中的变体选项。
目录(fullfile (matlabroot,“例子”,“金宝appsimulink_variants”,“主要”));load_system (“slexVariantMdlRefCondProp”);assignin (“基地”,“VSS_MODE”2);slexVariantMdlRefCondProp ([],[],[],“compileForCodegen”);[models,blocks] = find_mdlrefs(“slexVariantMdlRefCondProp”,...“MatchFilter”, 金宝app@Simulink.match.codeCompileVariants);slexVariantMdlRefCondProp ([],[],[],“术语”);
示例:使用金宝appSimulink.match.allVariants ()
筛选器以查找模型中的所有块。
目录(fullfile (matlabroot,“例子”,“金宝appsimulink_variants”,“主要”));模型=“slexVariantMdlRefCondProp”;load_system(模型);(模型、块)= find_mdlrefs(模型,“MatchFilter”, 金宝app@Simulink.match.allVariants);
变体
- - - - - -选项包括不同的模型
“ActivePlusCodeVariants”
(默认)|“ActiveVariants”
|“AllVariants”
请注意
的变体
参数将被删除。使用MatchFilter
代替。有关更多信息,请参见兼容性的考虑.
选项,在搜索结果中包括不同的模型,指定为逗号分隔的对,由“变异”
而且“ActivePlusCodeVariants”
,“ActiveVariants”
,或“AllVariants”
.
“ActivePlusCodeVariants”
-包括所有的变型模型不同的子系统在模拟中是活跃的,并且是生成代码的一部分。“ActiveVariants”
-包括现役的变型模型不同的子系统块。“AllVariants”
-包括所有的变型模型不同的子系统块。
此搜索限制仅适用于不同的子系统具有变型控制方式设置为表达式
或标签
.使用find_mdlrefs
函数与MatchFilter
选项操作的所有类型的变体块。
数据类型:字符
|字符串
ReturnTopModelAsLastElement
- - - - - -选项,包括指定的系统
真正的
或1
(默认)|假
或0
选项,在搜索结果中包括指定的系统,指定为逗号分隔的对,由“ReturnTopModelAsLastElement”
数字或逻辑1
(真正的
)或0
(假
).
默认情况下,返回的引用模型列表中的最后一个元素是您使用系统
论点。如果指定一个块,最后一个元素是包含它的文件的名称。
数据类型:逻辑
输出参数
版本历史
R2006a之前介绍R2022b:拆卸的警告变体
论点
作为移除的一部分变体
参数,已引入以下警告:
当你使用
find_mdlrefs
函数没有变体
参数的非活动选择时,函数将生成警告不同的子系统在搜索过程中阻塞。考虑一个带有变体模型Block有两个不同的选项,
Mdl_Linear_Controller
而且Mdl_NonLinear_Controller
.的Mdl_NonLinear_Controller
Block是主动选择。该命令跳过非活动
Mdl_Linear_Controller
阻塞并生成警告。[myModels,myModelBlks] = find_mdlrefs...(“sldemo_variant_subsystems_modelblocks”)
警告:使用不带“variables”参数的find_mdlrefs会在搜索中跳过不活跃的Variant子系统块。这种行为将在未来的版本中改变,以查看变体子系统的所有选择。要找到在模拟或代码生成中活跃的块,编译模型并使用带有'MatchFilter'选项的内置变体过滤器。myModels = 2×1单元格阵列{' mdlref_非线性控制器'}{'sldemo_variant_subsystems_modelblocks'} myModelBlks = 1×1单元格阵列{'sldemo_variant_subsystems_modelblocks/Controller/ mdl_非线性控制器'}
当你使用
变体
参数,其值设置为“AllVariants”
时,该函数生成警告。[myModels,myModelBlks] = find_mdlrefs...(“sldemo_variant_subsystems_modelblocks”,“变异”,“AllVariants”)
警告:“变体”将被删除。不要使用值设置为“allvariables”的“variables”,而是使用值设置为@ simulink .match. allvariables的“MatchFilter”。金宝appmyModels = 3×1单元阵列{'线性控制器'}{'非线性控制器'}{'sldemo_variant_subsystems_modelblocks'} myModelBlks = 2×1单元阵列{'sldemo_variant_subsystems_modelblocks/控制器/线性控制器'}{'sldemo_variant_subsystems_modelblocks/控制器/非线性控制器'}
R2022a:新的内置匹配过滤器找到所有的变体块
你可以使用内置的匹配过滤器,金宝appSimulink.match.allVariants
,以查找变体模型中的所有块,而不管该块是否由于变体而处于活动或非活动状态。此过滤器是推荐的替换AllVariants
选择。
待移除 | 建议更换 |
---|---|
find_mdlrefs(模型,“变异”,“AllVariants”); |
find_mdlrefs(模型,“MatchFilter”,...@金宝appSimulink.match.allVariants); |
R2021a:默认行为已更改变体
而且MatchFilter
模型中的参数具有不同的块
变体
:当你使用find_mdlrefs
函数没有变体
论点,不同的子系统块,该函数目前只包括那些在默认情况下搜索模拟或代码生成期间活动的选择。对于其他变体块,如变异来源,变体水槽,或不同的子系统块。在变量子系统之外传播条件参数设置为
在
,该函数包含搜索中的所有选项。考虑一个带有变体模型Block有两个不同的选项,
Mdl_Linear_Controller
而且Mdl_NonLinear_Controller
.此命令只返回活动的模型模型中的块。
[myModels,myModelBlks] = find_mdlrefs...(“sldemo_variant_subsystems_modelblocks”)
myModels = 2×1单元格阵列{' mdlref_非线性控制器'}{'sldemo_variant_subsystems_modelblocks'} myModelBlks = 1×1单元格阵列{'sldemo_variant_subsystems_modelblocks/Controller/ mdl_非线性控制器'}
MatchFilter
:当你使用find_mdlrefs
函数与MatchFilter
参数时,该函数默认对激活和非激活变量选项应用筛选器。考虑一个带有变体模型Block有两个不同的选项,
Mdl_Linear_控制器
而且Mdl_NonLinear_Controller
.过滤函数initFcnMdlBlocks
找到所有模型块,其中InitFcn
Callback已设置。函数match = initFcnMdlBlocks(handle) match = ~isempty(get_param(handle,“InitFcn”));结束
该命令返回active和inactive模型模型中的块。
[myModels,myModelBlks] = find_mdlrefs(“sldemo_variant_subsystems_modelblocks”,...“MatchFilter”@initFcnMdlBlocks)
myModels = 3×1单元阵列{' mdlref_线性控制器'}{' mdlref_非线性控制器'}{'sldemo_variant_subsystems_modelblocks'} myModelBlks = 2×1单元阵列{'sldemo_variant_subsystems_modelblocks/控制器/ mdl_线性控制器'}{'sldemo_variant_subsystems_modelblocks/控制器/ mdl_非线性控制器'}
R2021a:变体
参数将被删除。
的变体
参数将从find_mdlrefs
在未来的版本中。函数调用变体
论点继续工作,警告。
使用find_mdlrefs
函数与变体
参数产生不一致的搜索结果。的find_mdlrefs
函数是一个编辑时操作,但是要确定一个块在包含所有类型的变量块的模型中是否处于活动状态,您需要编译模型。
找到模型在模拟或代码生成期间活动的块,编译模型并使用find_mdlrefs
函数与MatchFilter
论点。
该表列出了不同值的推荐替换变体
论点。
待移除 | 建议更换 |
---|---|
find_mdlrefs(模型,“变异”,...“ActiveVariants”); |
set_param(模型,“SimulationCommand”,“更新”);find_mdlrefs(模型,“MatchFilter”,...@金宝appSimulink.match.activeVariants); |
find_mdlrefs(模型,“变异”,...“ActivePlusCodeVariants”); |
模型 ([],[],[],“compileForCodegen”);[models,blocks] = find_mdlrefs(model,“MatchFilter”,...@金宝appSimulink.match.codeCompileVariants);模型 ([],[],[],“术语”); |
当你使用find_system
函数时,不能同时指定MatchFilter
而且变体
参数。
该命令将产生一个错误。
find_mdlrefs (bdroot“MatchFilter”, 金宝app@Simulink.match.activeVariants...“变异”,“ActiveVariants”);
R2020b:搜索时的筛选元素MatchFilter
类的值来匹配和筛选模型元素,可以定义自定义筛选函数并将函数句柄作为值传递给MatchFilter
名称-值参数。
要查找模拟中活动的变量块或部分生成的代码,您可以使用内置的匹配过滤器函数,金宝appSimulink.match.activeVariants
,金宝appSimulink.match.codeCompileVariants
,金宝appSimulink.match.allVariants
,在编译模型后。
R2020b:的第二个参数指定逻辑值find_mdlrefs
不鼓励
的find_mdlrefs
函数提供了两种方法来指定是否搜索模型层次结构的所有级别。这两种技术都给出了相同的结果,但是只有名称-值对技术允许您指定其他选项。
而不是指定是否使用逻辑作为第二个参数搜索模型层次结构的所有级别,而是使用AllLevels
名称-值对。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。