主要内容

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

Simulink.FindOptions

指定在模型和子系统中查找模块的选项

说明

Simulink.FindOptions 对象允许您使用 Simulink.findBlocksSimulink.findBlocksOfType 函数来限制搜索范围。

创建对象

描述

f = Simulink.FindOptions 创建一个使用默认搜索选项的 FindOptions 对象。

f = Simulink.FindOptions(Name,Value) 使用名称-值对组设置属性。例如,Simulink.FindOptions('SearchDepth',1) 创建一个搜索深度为 1FindOptions 对象。您可以指定多个名称-值对组。用单引号将每个属性名称引起来。

示例

属性

全部展开

在匹配时考虑大小写的选项,指定为以逗号分隔的对组,由 'CaseSensitive'truefalse 组成。

数据类型: logical

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

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

数据类型: logical

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

数据类型: logical

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

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

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

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

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

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

数据类型: char | string

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

数据类型: logical

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

数据类型: int32

注意

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

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

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

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

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

此搜索约束仅适用于变体控制项模式设置为 expressionlabelVariant 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.activeVariantsSimulink.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_systemfind_mdlrefsSimulink.FindOptions 的上下文中使用时,过滤器才能识别模块句柄是否在 Variant Subsystem 的活动选择项内。

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

示例

全部折叠

创建一个指定搜索深度为 1Simulink.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 中增益值在 110 之间的所有 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 中推出

全部展开