Simulink.FindOptions
指定在模型和子系统中查找模块的选项
说明
Simulink.FindOptions
对象允许您使用 Simulink.findBlocks
和 Simulink.findBlocksOfType
函数来限制搜索范围。
创建对象
属性
在匹配时考虑大小写的选项,指定为以逗号分隔的对组,由 'CaseSensitive'
和 true
或 false
组成。
数据类型: logical
用于查看模型中的引用子系统内部并列出子模块的选项,指定为以逗号分隔的对组,其中包含 'LookInsideSubsystemReference'
和 true
或 false
。
用于跟随链接进入库模块的选项,指定为以逗号分隔的对组,由 'FollowLinks'
和 true
或 false
组成。如果您不指定要搜索的模型,find_system
将在结果中包括已加载的库,不管您将 'FollowLinks'
设置为 true
还是 false
。您可以将 'FollowLinks'
与 'LookUnderMasks'
结合使用,以更新子系统中的库链接。请参阅更新子系统中的库链接。
数据类型: logical
用于指示是否在搜索中包含带注释的模块的选项,指定为以逗号分隔的对组,由 'IncludeCommented'
和 true
或 false
组成。
数据类型: logical
用于指示是否将部分加载的模型完全加载的选项,指定为以逗号分隔的对组,包含 'LoadFullyIfNeeded'
和 true
(表示加载模型)或 false
(表示禁用加载)。例如,使用此选项可以防止出现加载警告。
用于指示如何搜索封装子系统的选项,指定为以逗号分隔的对组,由 'LookUnderMasks'
和以下选项之一组成:
'none'
- 搜索将跳过封装子系统。'all'
- 搜索包括所有封装子系统。'functional'
- 搜索包括具有图标绘图命令或封装初始化命令但没有参数、描述、帮助字符串和 UI 元素的封装子系统'graphical'
- 搜索包括只有图标绘图命令而没有工作区、对话框、帮助字符串和 UI 元素的封装子系统。
数据类型: char
| string
用于将搜索表达式视为正则表达式的选项,指定为由 'RegExp'
和 true
或 false
组成的以逗号分隔的对组。当 'RegExp'
设置为 true
时,搜索将搜索表达式视为正则表达式。有关 MATLAB® 正则表达式的详细信息,请参阅正则表达式。
数据类型: logical
用于将搜索深度限制在指定级别的选项,指定为以逗号分隔的对组,由 'SearchDepth'
和正整数字符向量或字符串标量组成。例如,指定 0
将仅搜索加载的模型,指定 1
将搜索模型层次结构顶层的模块和子系统,指定 2
将搜索模型层次结构的顶层及其子级等。默认值 -1
是搜索所有层级。
数据类型: int32
注意
Variants
参量将被删除。请改用 MatchFilter
。有关详细信息,请参阅版本历史记录。
用于搜索变体的选项,指定为以逗号分隔的对组,由 'Variants'
和以下选项之一组成:
'ActiveVariants'
- 仅搜索 Variant Subsystem 中的活动变体选择项。'AllVariants'
- 搜索 Variant Subsystem 中的所有变体选择项。'ActivePlusCodeVariants'
- 搜索 Variant Subsystem 中的在仿真中处于活动状态并且是生成代码一部分的所有变体选择项。
此搜索约束仅适用于变体控制项模式设置为 expression
或 label
的 Variant Subsystem 模块。将 find_system
函数与 MatchFilter
选项结合使用,可对所有类型的变体模块进行操作。
数据类型: 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.activeVariants
和 Simulink.match.codeCompileVariants
过滤器之前,您必须编译模型。如果模型未编译,这些过滤器将返回模型中的所有模块。
有关比较这些过滤器的编译前和编译后时间结果的示例,请参阅比较变体模块的匹配过滤器的编译前和编译后行为。
Variant Subsystem 模块的编辑时过滤器函数:
Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices
- 用于查找 Variant Subsystem 模块选择项的过滤器函数,这些模块选择项在仿真中处于活动状态或者作为生成代码的一部分。此函数产生的结果与Variants
参量的'ActivePlusCodeVariants'
选项类似。Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices
- 查找处于活动状态的 Variant Subsystem 模块选择项的过滤器函数。此函数产生的结果与Variants
参量的'ActiveVariants'
选项类似。
编辑时过滤器的限制:
过滤器不使用 CompiledVariantInfo 模块参数中的编译后模块活动性信息。
过滤器仅适用于具有以下模块参数设置的 Variant Subsystem 模块:
变体控制项模式设置为表达式或标签
将条件传播到可变子系统之外设置为
off
仅在
find_system
、find_mdlrefs
和Simulink.FindOptions
的上下文中使用时,过滤器才能识别模块句柄是否在 Variant Subsystem 的活动选择项内。
要对所有类型的变体模块进行操作,请在模型编译后使用 Simulink.match.codeCompileVariants
或 Simulink.match.activeVariants
过滤器。
示例
创建一个指定搜索深度为 1
的 Simulink.FindOptions
对象。
f = Simulink.FindOptions('SearchDepth',1);
使用 FindOptions
对象,搜索名为 Unlocked
的子系统中的所有模块,但不搜索其子级中的任何模块。
openExample('sldemo_clutch'); bh = Simulink.findBlocks('sldemo_clutch/Unlocked',f);
Simulink.findBlocks
函数返回模块句柄。
要获取模块路径,请使用 getfullname
函数。
bp = getfullname(bh)
bp = 20×1 cell array {'sldemo_clutch/Unlocked/Tfmaxk' } {'sldemo_clutch/Unlocked/Tin' } {'sldemo_clutch/Unlocked/Enable' } {'sldemo_clutch/Unlocked/E_Sum' } {'sldemo_clutch/Unlocked/Engine↵Damping' } {'sldemo_clutch/Unlocked/Engine↵Inertia' } {'sldemo_clutch/Unlocked/Engine↵Integrator' } {'sldemo_clutch/Unlocked/Goto' } {'sldemo_clutch/Unlocked/Goto1' } {'sldemo_clutch/Unlocked/Max↵Dynamic↵Friction↵Torque'} {'sldemo_clutch/Unlocked/V_Sum' } {'sldemo_clutch/Unlocked/Vehicle↵Damping' } {'sldemo_clutch/Unlocked/Vehicle↵Inertia' } {'sldemo_clutch/Unlocked/Vehicle↵Integrator' } {'sldemo_clutch/Unlocked/W_Slip' } {'sldemo_clutch/Unlocked/slip direction' } {'sldemo_clutch/Unlocked/w0' } {'sldemo_clutch/Unlocked/w0 ' } {'sldemo_clutch/Unlocked/we' } {'sldemo_clutch/Unlocked/wv' }
使用具有自定义过滤器函数的 MatchFilter
选项,查找模型 vdp
中增益值在 1
和 10
之间的所有 Gain 模块。
自定义函数是在文件 gainOneToTen.m
中定义的。
function match = gainOneToTen(blk) match = false; if strcmp(get_param(blk,'Type'),'block') ... && strcmp(get_param(blk,'BlockType'),'Gain') gainValue = str2double(get_param(blk,'Gain')); match = gainValue >= 1 && gainValue <= 10; end end
提供函数句柄作为 MatchFilter
参量的值。
load_system('vdp'); findOptObj = Simulink.FindOptions('MatchFilter',@gainOneToTen); blks = getfullname((Simulink.findBlocks('vdp',findOptObj)));
加载 slexVariantSubsystems
模型。
model = 'slexVariantSubsystems'; load_system(model); assignin('base','VSS_MODE',2);
使用 MatchFilter
选项和 Simulink.match.activeVariants
来查找模型中的活动变体。
set_param(model,'SimulationCommand','update'); findOptObj = Simulink.FindOptions('MatchFilter',@Simulink.match.activeVariants); blks = getfullname((Simulink.findBlocks(model,findOptObj)));
结合使用 MatchFilter
选项和 Simulink.match.codeCompileVariants
查找生成的 C 代码中的变体选择项。
slexVariantSubsystems([],[],[],'compileForCodegen'); findOptObj = Simulink.FindOptions('MatchFilter',@Simulink.match.codeCompileVariants); blks = getfullname((Simulink.findBlocks(model,findOptObj))); slexVariantSubsystems([],[],[],'term');
使用 MatchFilter
选项和 Simulink.match.allVariants
查找模型中的所有模块。
findOptObj = Simulink.FindOptions('MatchFilter',@Simulink.match.allVariants);
blks = getfullname((Simulink.findBlocks(model,findOptObj)));
结合使用 MatchFilter
选项和 Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices
查找在仿真中处于活动状态或在编辑时作为生成代码一部分的可变子系统模块选择项。有关编辑时过滤器的限制的信息,请参阅 MatchFilter。
findOptObj = Simulink.FindOptions('MatchFilter',@Simulink.match.legacy.filterOutCodeInactiveVariantSubsystemChoices);
blks = getfullname((Simulink.findBlocks(model,findOptObj)));
结合使用 MatchFilter
选项和 Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices
查找在编辑时处于活动状态的可变子系统模块选择项。有关编辑时过滤器的限制的信息,请参阅 MatchFilter。
findOptObj = Simulink.FindOptions('MatchFilter',@Simulink.match.legacy.filterOutInactiveVariantSubsystemChoices);
blks = getfullname((Simulink.findBlocks(model,findOptObj)));
版本历史记录
在 R2018a 中推出您可以使用内置的匹配过滤器 Simulink.match.allVariants
来查找变体模型中的所有模块,而不管该模块由于变体而处于活动状态还是非活动状态。此滤波器是 AllVariants
选项的推荐替代项。
将删除 | 推荐的替代项 |
---|---|
findOptObj= Simulink.FindOptions('Variants', ... 'AllVariants'); | findOptObj= Simulink.FindOptions('MatchFilter', ... @Simulink.match.allVariants); |
Variants
选项将在以后的版本中从 Simulink.FindOptions
中删除。使用 Variants
选项的脚本继续工作,但会出现警告。
将 Simulink.FindOptions
对象与 Variants
参量结合使用会产生不一致的搜索结果。Simulink.FindOptions
在编辑时使用,但要确定一个模块在包含所有类型的变体模块的模型中是否为活动模块,您需要编译该模型。
要查找在仿真或代码生成过程中处于活动状态的变体模块,请编译模型并使用带 MatchFilter
选项的 Simulink.FindOptions
对象。
下表列出了 Variants
选项的不同值的建议替代项。
将删除 | 推荐的替代项 |
---|---|
findOptObj= Simulink.FindOptions('Variants', ... 'ActiveVariants'); | set_param(model,'SimulationCommand','update'); findOptObj= Simulink.FindOptions('MatchFilter', ... @Simulink.match.activeVariants); |
findOptObj= Simulink.FindOptions('Variants', ... 'ActivePlusCodeVariants'); | model([], [], [], 'compileForCodegen'); findOptObj = Simulink.FindOptions('MatchFilter', ... @Simulink.match.codeCompileVariants); blks=getfullname((Simulink.findBlocks(model,findOptObj))); model([], [], [], 'term'); |
使用 Simulink.FindOptions
对象时,不能同时指定 MatchFilter
和 Variants
参量。
以下命令会生成错误。
f = Simulink.FindOptions('MatchFilter',... @Simulink.match.activeVariants, 'Variants', 'ActiveVariants'); blocks=Simulink.findBlocks('sldemo_variant_subsystems',f)
要在搜索过程中匹配和过滤模型元素,您可以定义自定义过滤器函数,并将函数句柄作为值传递给 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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 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)