find_system
查找系统、模块、信号线、端口和注释
语法
说明
示例
查找已加载的系统及其模块
返回所有已加载的系统及其模块的名称。
load_system('vdp')
find_system
ans = 15x1 cell
{'vdp' }
{'vdp/Constant' }
{'vdp/More Info' }
{'vdp/More Info/Model Info'}
{'vdp/Mu' }
{'vdp/Mux' }
{'vdp/Product' }
{'vdp/Scope' }
{'vdp/Square' }
{'vdp/Sum' }
{'vdp/Sum1' }
{'vdp/x1' }
{'vdp/x2' }
{'vdp/Out1' }
{'vdp/Out2' }
返回已加载的系统和库,包括 vdp
。
查找特定的系统及其模块
返回 vdp
系统及其模块。
load_system({'vdp','ex_sldemo_clutch'}) find_system('vdp')
ans = 15x1 cell
{'vdp' }
{'vdp/Constant' }
{'vdp/More Info' }
{'vdp/More Info/Model Info'}
{'vdp/Mu' }
{'vdp/Mux' }
{'vdp/Product' }
{'vdp/Scope' }
{'vdp/Square' }
{'vdp/Sum' }
{'vdp/Sum1' }
{'vdp/x1' }
{'vdp/x2' }
{'vdp/Out1' }
{'vdp/Out2' }
返回加载的模型、子系统和库的名称
返回加载的模型、子系统和库的名称。仅当子系统可以独立加载时,才会返回子系统名称。
load_system('vdp'); find_system('type','block_diagram')
ans = 1x1 cell array
{'vdp'}
搜索子系统的子级
返回作为 ex_sldemo_clutch
系统的 Unlocked 子系统的子级存在的所有 Goto 模块的名称。
load_system('ex_sldemo_clutch'); find_system('ex_sldemo_clutch/Unlocked','SearchDepth',1,'BlockType','Goto')
ans = 2x1 cell
{'ex_sldemo_clutch/Unlocked/Goto' }
{'ex_sldemo_clutch/Unlocked/Goto1'}
Copyright 2020 The MathWorks, Inc.
使用多个条件进行搜索
在 vdp
系统中进行搜索,并返回增益值设置为 1
的所有 Gain 模块的名称。
load_system('vdp'); find_system('vdp','BlockType','Gain','Gain','1')
ans = 1x1 cell array
{'vdp/Mu'}
以句柄形式返回信号线和注释
获取 vdp
系统中所有信号线和注释的句柄。对于 'FindAll'
,不管您如何指定要搜索的系统,该函数都会返回句柄。
load_system('vdp'); L = find_system('vdp','FindAll','on','type','line')
L = 19×1
417.0028
416.0023
415.0026
414.0034
413.0029
412.0029
411.0037
31.0028
30.0026
29.0032
⋮
A = find_system('vdp','FindAll','on','type','annotation')
A = 2×1
419.0024
418.0029
搜索特定的模块参数值
在 vdp
和 ex_sldemo_clutch
系统中查找值为 0
的任何模块对话框参数。
load_system({'vdp','f14'}) find_system({'vdp','f14'},'BlockDialogParams','0')
ans = 32×1 cell array {'vdp/More Info' } {'vdp/More Info/Model Info' } {'vdp/Scope' } {'vdp/x2' } {'vdp/Out1' } {'vdp/Out1' } {'vdp/Out2' } {'vdp/Out2' } {'f14/Aircraft↵Dynamics↵Model' } {'f14/Aircraft↵Dynamics↵Model/Vertical Velocity↵w (ft//sec)'} {'f14/Aircraft↵Dynamics↵Model/Vertical Velocity↵w (ft//sec)'} {'f14/Aircraft↵Dynamics↵Model/Pitch Rate↵q (rad//sec)' } {'f14/Aircraft↵Dynamics↵Model/Pitch Rate↵q (rad//sec)' } . . .
使用正则表达式进行搜索
在当前加载的系统的顶层查找模块对话框参数值以 3
开头的所有模块。
load_system({'ex_sldemo_clutch','vdp'}); find_system('SearchDepth','1','regexp','on','BlockDialogParams','^3')
ans = 4x1 cell
{'vdp/Scope' }
{'vdp/Scope' }
{'vdp/Square' }
{'ex_sldemo_clutch/w'}
正则表达式搜索部分匹配
使用正则表达式进行搜索时,您可以指定要匹配的字符向量的一部分,以返回包含该字符向量的所有对象。在 ex_sldemo_clutch
模型中查找所有 Inport 和 Outport 模块。
load_system('ex_sldemo_clutch'); find_system('ex_sldemo_clutch','regexp','on','blocktype','port')
ans = 39x1 cell
{'ex_sldemo_clutch/Friction...' }
{'ex_sldemo_clutch/Friction...' }
{'ex_sldemo_clutch/Friction...' }
{'ex_sldemo_clutch/Friction Mode Logic/Tin' }
{'ex_sldemo_clutch/Friction Mode Logic/Tfmaxs' }
{'ex_sldemo_clutch/Friction Mode Logic/Break Apart...' }
{'ex_sldemo_clutch/Friction Mode Logic/Break Apart...' }
{'ex_sldemo_clutch/Friction Mode Logic/Break Apart...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup...' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup FSM/lock' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup FSM/unlock' }
{'ex_sldemo_clutch/Friction Mode Logic/Lockup FSM/locked' }
{'ex_sldemo_clutch/Friction Mode Logic/Requisite Friction/Tin'}
{'ex_sldemo_clutch/Friction Mode Logic/Requisite Friction/Tf' }
{'ex_sldemo_clutch/Friction Mode Logic/locked' }
{'ex_sldemo_clutch/Friction Mode Logic/lock' }
{'ex_sldemo_clutch/Friction Mode Logic/unlock' }
{'ex_sldemo_clutch/Friction Mode Logic/Tf' }
{'ex_sldemo_clutch/Locked/Tin' }
{'ex_sldemo_clutch/Locked/w' }
{'ex_sldemo_clutch/Unlocked/Tfmaxk' }
{'ex_sldemo_clutch/Unlocked/Tin' }
{'ex_sldemo_clutch/Unlocked/we' }
⋮
更新子系统中的库链接
在本示例中,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
。搜索值为 0
的模块对话框参数。如果您对同一个模块多次调用 get_param
,则使用模块句柄比以字符向量形式指定完整模块路径更高效。
load_system('vdp'); sys = get_param('vdp','Handle'); find_system(sys,'BlockDialogParams','0')
ans = 8×1
3.0028
4.0028
10.0028
15.0028
16.0029
16.0029
17.0029
17.0029
输入参数
System
— 要搜索的系统
路径名称 | 路径名称元胞数组 | 句柄 | 句柄向量
要搜索的系统,指定为完整的系统路径名称、系统路径名称元胞数组、句柄或句柄向量。
示例: '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
对组实参中可以包括搜索约束以及形参名称-值对组。您可以按任意顺序指定搜索约束,但搜索约束必须在参数名称-值对组之前。
有关模块参数列表,请参阅模块特定的参数。
BlockDialogParams
— 用于在模块对话框参数中搜索指定值的选项。
字符向量 | 字符串标量
用于在模块对话框参数中搜索指定值的选项,指定为以逗号分隔的对组,其中包含 'BlockDialogParams'
和一个字符向量或字符串标量。该对组必须跟在其他搜索约束对组之后。
CaseSensitive
— 用于在匹配时考虑大小写的选项
'on'
(默认) | 'off'
用于在匹配时考虑大小写的选项,指定为以逗号分隔的对组,由 'CaseSensitive'
和 'on'
(表示搜索区分大小写)或 'off'
组成。
FindAll
— 用于指示是否包括系统中的信号线、端口和注释的选项
'off'
(默认) | 'on'
用于指示是否在搜索中包括系统中的信号线、端口和注释的选项,指定为以逗号分隔的对组,由 'FindAll'
和 'on'
或 'off'
组成。当此选项设置为 'on'
时,无论您如何指定 System
参数,find_system
都会返回句柄向量。
FirstResultOnly
— 用于仅返回第一个结果的选项
'off'
(默认) | 'on'
用于仅返回第一个结果然后停止搜索的选项,指定为以逗号分隔的对组,由 'FirstResultOnly'
和 'on'
或 'off'
组成。
LookInsideSubsystemReference
— 查看引用子系统内部的选项
'on'
(默认) | 'off'
用于查看模型中的引用子系统内部并列出子模块的选项,指定为以逗号分隔的对组,其中包含 'LookInsideSubsystemReference'
和 'on'
或 'off'
。
FollowLinks
— 用于跟随链接进入库模块的选项
'off'
(默认) | 'on'
用于跟随链接进入库模块的选项,指定为以逗号分隔的对组,由 'FollowLinks'
和 'on'
或 'off'
组成。如果您不指定要搜索的系统,find_system
将在结果中包括已加载的库,不管您将 'FollowLinks'
设置为 'on'
还是 'off'
。您可以将 'FollowLinks'
与 'LookUnderMasks'
结合使用,以更新子系统中的库链接。请参阅更新子系统中的库链接。
IncludeCommented
— 用于指示是否包含带注释的模块的选项
'off'
(默认) | 'on'
用于指示是否在搜索中包含带注释的模块的选项,指定为以逗号分隔的对组,由 'IncludeCommented'
和 'on'
或 'off'
组成。
LoadFullyIfNeeded
— 用于指示是否将部分加载的模型完全加载的选项
'on'
(默认) | 'off'
用于指示是否将部分加载的模型完全加载的选项,指定为以逗号分隔的对组,包含 'LoadFullyIfNeeded'
和 'on'
(表示加载模型)或 'off'
(表示禁用加载)。例如,使用此选项可以防止出现加载警告。
LookUnderMasks
— 用于指示如何搜索封装子系统的选项
'graphical'
(默认) | 'none'
| 'functional'
| 'all'
| 'on'
| 'off'
用于指示如何搜索封装子系统的选项,指定为以逗号分隔的对组,由 'LookUnderMasks'
和以下选项之一组成:
'graphical'
- 搜索包括没有工作区和对话框的封装子系统。'none'
- 搜索将跳过封装子系统。'functional'
- 搜索包括没有对话框的封装子系统。'all'
- 搜索包括所有封装子系统。'on'
- 搜索包括所有封装子系统。'off'
- 搜索将跳过封装子系统。
RegExp
— 用于将搜索表达式视为正则表达式的选项
'off'
(默认) | 'on'
用于将搜索表达式视为正则表达式的选项,指定为以逗号分隔的对组,由 'RegExp'
和 'on'
(表示将搜索表达式视为正则表达式)或 'off'
组成。有关 MATLAB® 正则表达式的详细信息,请参阅正则表达式。
SearchDepth
— 用于限制搜索深度的选项
正整数字符向量或字符串标量
用于将搜索深度限制在指定级别的选项,指定为以逗号分隔的对组,由 'SearchDepth'
和正整数字符向量或字符串标量组成。例如,指定 '0'
会仅搜索加载的系统,指定 '1'
会搜索顶层系统的模块和子系统,指定 '2'
会搜索顶层系统及其子级,等等。默认值为搜索所有级别。
Variants
— 用于搜索变体的选项
'ActiveVariants'
(默认) | 'AllVariants'
| 'ActivePlusCodeVariants'
注意
Variants
参数将被删除。请改用 MatchFilter
。有关详细信息,请参阅 兼容性注意事项。
用于搜索变体的选项,指定为以逗号分隔的对组,由 'Variants'
和以下选项之一组成:
'ActiveVariants'
- 仅搜索 Variant Subsystem 中的活动变体选择项。'AllVariants'
- 搜索 Variant Subsystem 中的所有变体选择项。'ActivePlusCodeVariants'
- 搜索 Variant Subsystem 中的在仿真中处于活动状态并且是生成代码一部分的所有变体选择项。
此搜索约束仅适用于变体控制项模式设置为 expression
或 label
的 Variant Subsystem 模块。将 find_system
函数与 MatchFilter
选项结合使用,可对所有类型的变体模块进行操作。
MatchFilter
— 匹配元素的函数句柄
函数句柄
在搜索中匹配元素的函数句柄,如模块、系统、信号线、端口和注释。使用 MatchFilter
确定在搜索中应包括还是跳过元素。
命名函数必须在 MATLAB 程序文件中定义。该函数将元素的句柄作为输入,并返回两个输出。
function [match, prune] = func(element)
输入
element
是要处理的模块的句柄。第一个输出
match
是逻辑值。如果为false
,搜索将跳过该元素。第二个输出
prune
是可选的逻辑值,仅在element
是子系统时适用。默认值为false
。如果此值设置为true
,则搜索中将忽略整个子系统。
示例:使用 MatchFilter
可使用您自己定义的筛选器函数 nonInOutBlocks
来查找模型中的所有非 Inport 和 Outport 模块。
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
load_system('vdp'); blks = find_system('vdp', 'MatchFilter', @nonInOutBlocks)
变体:Simulink 提供这些内置的匹配筛选器函数,用于查找在仿真中处于活动状态或作为生成代码一部分的变体模块。
Simulink.match.activeVariants
- 筛选器函数,用于查找模型编译后在仿真中处于活动状态的模块。Simulink.match.codeCompileVariants
- 筛选器函数,用于查找在模型编译后作为生成代码一部分的模块。Simulink.match.allVariants
- 用于查找所有模块的筛选器函数,而不管该模块是否因变体而处于活动或非活动状态。
注意
为了获得正确的结果,在使用 Simulink.match.activeVariants
和 Simulink.match.codeCompileVariants
筛选器之前,您必须编译模型。如果模型未编译,这些筛选器将返回模型中的所有模块。
示例:使用 Simulink.match.activeVariants
筛选器查找模型中的活动变体。
model='sldemo_variant_subsystems'; load_system(model); assignin('base','VSS_MODE',2); set_param(model, 'SimulationCommand', 'update'); activeBlks = find_system(model, 'MatchFilter', @Simulink.match.activeVariants);
示例:使用 Simulink.match.codeCompileVariants
筛选器查找生成的 C 代码中的变体选择项。
load_system('sldemo_variant_subsystems'); assignin('base','VSS_MODE',2); sldemo_variant_subsystems([], [], [], 'compileForCodegen'); activeBlks= find_system('sldemo_variant_subsystems', 'MatchFilter', @Simulink.match.codeCompileVariants); sldemo_variant_subsystems([], [], [], 'term');
示例:使用 Simulink.match.allVariants()
筛选器查找模型中的所有模块。
find_system('sldemo_variant_subsystems', 'MatchFilter', @Simulink.match.allVariants);
输出参数
版本历史记录
在 R2006a 之前推出R2021a: Variants
参数将被删除
Variants
选项将在以后的版本中从 find_system
中删除。使用 Variants
选项的脚本继续工作,但会出现警告。
要查找模型中在仿真或代码生成过程中处于活动状态的变体模块,请编译模型并使用带 MatchFilter
选项的 find_system
函数。
R2021a: 在具有变体模块的模型中,具有 Variants
和 MatchFilter
选项的 find_system
的默认行为已更改
Variants
:默认情况下,在使用不带Variants
选项的find_system
函数时,搜索中将只包含活动变体选择项。以包含一个 Variant Subsystem 的模型为例,该模型有两个变体选择项
Linear Controller
和Non-Linear Controller
。此命令仅返回模型中的活动 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
选项结合使用时,会对活动和非活动变体选择项应用筛选器。以包含一个 Variant Subsystem 的模型为例,该模型有两个变体选择项
Linear Controller
和Non-Linear Controller
。筛选器函数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'}
find_system
不支持将MatchFilter
与Variants
选项结合使用。以下命令会生成错误:
find_system(bdroot,'MatchFilter',@Simulink.match.activeVariants,... 'Variants','ActiveVariants');
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)