Main Content

Simulink.findVars

分析模型中的变量与模块之间的关系

说明

示例

[variables] = Simulink.findVars(context) 查找并返回 context 指定的模块和模型(包括子系统和引用模型)中使用的变量。如果 context 不使用任何变量,则此函数返回空向量。

示例

[variables] = Simulink.findVars(context,variablefilter) 只查找 variablefilter 指定的变量或枚举类型。例如,使用此语法可确定模型中使用变量的位置。

示例

[variables] = Simulink.findVars(___,Name,Value) 使用一个或多个 Name,Value 对组参量指定的其他选项查找变量。例如,可以搜索未使用的变量。除了变量外,还可以搜索 context 中使用的枚举数据类型。

示例

全部折叠

查找 MyModel 使用的变量。

variables = Simulink.findVars('MyModel');

查找 MyModel 使用基础工作区变量 k 的所有情形。使用缓存的结果可以避免编译 MyModel

variables = Simulink.findVars('MyModel','Name','k',...
'SearchMethod','cached','SourceType','base workspace');

查找名称与正则表达式 ^trans 匹配的某个变量的所有使用情形。

variables = Simulink.findVars('MyModel','Regexp','on',...
'Name','^trans');

假定有两个模型,查找第一个模型使用的变量、第二个模型使用的变量以及两个模型都使用的变量。

model1Vars = Simulink.findVars('model1');
model2Vars = Simulink.findVars('model2');
commonVars = intersect(model1vars,model2Vars);

查找在 MyModel 的模型工作区中定义的但该模型未使用的变量。

unusedVars = Simulink.findVars('MyModel','FindUsedVars','off',...
'SourceType','model workspace');

确定基础工作区变量 k 是否未被 MyModel 使用。

varObj = Simulink.VariableUsage('k','base workspace');
unusedVar = Simulink.findVars('MyModel',varObj,...
'FindUsedVars','off');

查找 MyModel 中的模块 Gain1 使用的变量。

variables = Simulink.findVars('MyModel',...
'Users','MyModel/Gain1');

查找模型引用层次结构中使用的变量。从模型 MyNestedModel 开始搜索,并搜索 MyNestedModel 下方的整个层次结构。

variables = Simulink.findVars('MyNestedModel','SearchReferencedModels','on');

查找 MyModel 中使用的变量和枚举类型。

varsAndEnumTypes = Simulink.findVars('MyModel','IncludeEnumTypes','on');

输入参数

全部折叠

要搜索的模型和模块,指定为字符向量、字符串、字符向量元胞数组或字符串数组。您可以通过以下方式之一指定 context

  • 模型的名称。例如,('vdp') 指定模型 vdp.slx

  • 模块或封装模块的名称或路径。例如,('vdp/Gain1') 指定名为 Gain1 并位于模型 vdp.slx 根级别的模块。

  • 模型或模块名称的元胞数组。

数据类型: char | cell

要查找的特定变量,指定为 Simulink.VariableUsage 对象数组。每个 Simulink.VariableUsage 对象标识一个要查找的变量。

名称-值参数

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

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

示例: 'FindUsedVars','off'

指明查找显式使用或未使用的变量的标志,以逗号分隔的对组形式指定,其中包含 'FindUsedVars' 以及 'on''off'。如果您将 FindUsedVars 指定为 'off',此函数将查找 context 中未使用但在 SourceType 指定的工作区中定义的变量。

示例: 'FindUsedVars','off'

指明查找使用的枚举数据类型的标志,以逗号分隔的对组形式指定,其中包含 'IncludeEnumTypes' 以及 'on''off'。此函数查找 context 中显式使用的枚举类型,以及定义 context 中使用的变量的类型。

此函数不报告关于哪些模块或对象正在使用枚举类型的详细信息。

如果您将 SourceType 指定为 'base workspace''model workspace''mask workspace',此函数将不会报告枚举类型,因为这些源不能定义枚举类型。

不能通过将 FindUsedVars 指定为 'off' 来查找未使用的枚举类型。

示例: 'IncludeEnumTypes','on'

指明为输入参量启用正则表达式匹配的标志,以逗号分隔的对组形式指定,其中包含 'RegExp''on'。只能匹配具有字符向量值的输入参量。

示例: 'RegExp','on'

编译状态,指定为逗号分隔的对组,其中包含 'SearchMethod' 和下列值之一:

  • 'compiled' - 通过在搜索之前编译搜索上下文中的每个模型返回最新结果。

  • 'cached' - 通过使用上次编译时缓存的结果更快地返回结果。

示例: 'SearchMethod','compiled'

指明在引用模型中启用搜索的标志,以逗号分隔的对组形式指定,其中包含 'SearchReferencedModels''on'

如果引用模型使用了某全局变量,例如存储在数据字典中的变量,则函数在对父模型调用时返回此全局变量。如果 SearchReferencedModels 设置为 'on',函数返回的 Simulink.VariableUsage 对象将引用模型中的模块指定为变量使用者。否则,对象将 Model 模块指定为使用者。

示例: 'SearchReferencedModels','on'

要搜索的变量或枚举数据类型的名称,以逗号分隔的对组形式指定,其中包含 'Name' 和一个字符向量或字符串。

示例: 'Name','trans'

数据类型: char

定义变量的工作区或源,以逗号分隔的对组形式指定,其中包含 'SourceType' 和以下选项之一:

  • 'base workspace'

  • 'model workspace'

  • 'mask workspace'

  • 'data dictionary'

此函数过滤指定源中定义的变量的结果。

示例: 'SourceType','base workspace'

如果您通过将 'IncludeEnumTypes' 指定为 'on' 来搜索枚举数据类型,则 'SourceType' 表示定义枚举类型的方式。您可以指定下列选项之一:

  • 'MATLAB file'

  • 'dynamic class'

  • 'data dictionary'

此函数过滤指定源中定义的枚举类型的结果。

示例: 'SourceType','MATLAB file'

如果您不指定 SourceType,则此函数不会按源过滤结果。

要搜索变量的特定模块的名称,以逗号分隔的对组形式指定,其中包含 'Users' 和一个字符向量或字符串。

要搜索一组特定的模块,请通过将 RegExp 指定为 'on' 来启用正则表达式匹配,并在字符向量中使用正则表达式。例如,您可以指定 'Users','MyModel/Gain*' 以搜索 MyModel 中名称以 Gain 开头的所有模块。

示例: 'Users','MyModel/Gain1'

示例: 'Users','MyModel/mySubsystem/Gain2'

示例: 'Users','MyModel/Gain*'

限制

Simulink.findVars 不适用于以下构造:

  • 脚本中的 MATLAB® 代码以及初始化和回调函数。

  • 库和库中的模块。

  • MATLAB Function 模块中的变量,输入参量除外。但是,Simulink.findVars 可以查找 MATLAB Function 模块中任意位置使用的枚举类型。

  • 从 Stateflow® 模块直接调用 MATLAB。

  • 使用通过 ssRegisterDataType 注册的数据类型变量的 S-Function。要使变量可搜索,请改用 ssRegisterTypeFromNamedObject

  • 字符串中的变量。

  • struct 中的字段。

  • 为并行模型引用编译配置的顶层模型。在这种情况下,Simulink.findVars 在使用以下任一名称-值参量调用时都不起作用:

    • 'SearchMethod' 指定为 'cached'

    • 'SearchReferencedModels' 指定为 'on'

  • 仅当 Variant Subsystem 模块对话框中的变体激活时间参数设置为代码编译时,Simulink.findVars 才会发现非活动 Variant Subsystem 模块中的变量使用情况。如果未选中此值,则此函数不会查找非活动变体中变量的使用情形。

版本历史记录

在 R2010a 中推出