Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

find_system

查找系统、模块、信号线、端口和注释

说明

示例

Objects = find_system 返回已加载的系统及其模块,包括子系统。

示例

Objects = find_system(System) 返回指定的系统及其模块。

示例

Objects = find_system(Name,Value) 返回已加载的系统以及这些系统中满足一个或多个 Name,Value 对组参数指定的条件的对象。您可以使用此语法指定搜索约束条件和搜索特定的参数值。在参数和值对组之前指定搜索约束条件。

示例

Objects = find_system(System,Name,Value) 返回指定系统中满足指定条件的对象。

示例

全部折叠

返回所有已加载的系统及其模块的名称。

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','fuelsys'})
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'}

返回作为 sldemo_clutch 系统的 Unlocked 子系统的子级存在的所有 Goto 模块的名称。

load_system('sldemo_clutch');
find_system('sldemo_clutch/Unlocked','SearchDepth',1,'BlockType','Goto')
ans = 2x1 cell
    {'sldemo_clutch/Unlocked/Goto' }
    {'sldemo_clutch/Unlocked/Goto1'}

vdp 系统中进行搜索,并返回 Gain 值设置为 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

   34.0052
   33.0052
   32.0052
   31.0052
   30.0052
   29.0052
   28.0052
   27.0052
   26.0052
   25.0052
      ⋮

A = find_system('vdp','FindAll','on','type','annotation')
A = 2×1

   36.0052
   35.0052

vdpfuelsys 系统中查找值为 0 的任何模块对话框参数。

load_system({'vdp','fuelsys'})
find_system({'vdp','fuelsys'},'BlockDialogParams','0')
ans = 

    'vdp/x2'
    'vdp/Out1'
    'vdp/Out2'
    'fuelsys/Constant2'
    'fuelsys/Constant4'
    'fuelsys/Constant5'
    'fuelsys/engine …'
    'fuelsys/engine …'
    'fuelsys/engine …'
    'fuelsys/engine …'
				.
				.
				.

在当前加载的系统的顶层查找模块对话框参数值以 3 开头的所有模块。

load_system({'fuelsys','vdp'});
find_system('SearchDepth','1','regexp','on','BlockDialogParams','^3')
ans = 4x1 cell
    {'vdp/Scope'         }
    {'vdp/Scope'         }
    {'vdp/Square'        }
    {'fuelsys/Nominal...'}

使用正则表达式进行搜索时,您可以指定要匹配的字符向量的一部分,以返回包含该字符向量的所有对象。在 sldemo_clutch 模型中查找所有 Inport 和 Outport 模块。

load_system('sldemo_clutch');
find_system('sldemo_clutch','regexp','on','blocktype','port')
ans = 39x1 cell
    {'sldemo_clutch/Friction...'                               }
    {'sldemo_clutch/Friction...'                               }
    {'sldemo_clutch/Friction...'                               }
    {'sldemo_clutch/Friction Mode Logic/Tin'                   }
    {'sldemo_clutch/Friction Mode Logic/Tfmaxs'                }
    {'sldemo_clutch/Friction Mode Logic/Break Apart...'        }
    {'sldemo_clutch/Friction Mode Logic/Break Apart...'        }
    {'sldemo_clutch/Friction Mode Logic/Break Apart...'        }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup...'             }
    {'sldemo_clutch/Friction Mode Logic/Lockup FSM/lock'       }
    {'sldemo_clutch/Friction Mode Logic/Lockup FSM/unlock'     }
    {'sldemo_clutch/Friction Mode Logic/Lockup FSM/locked'     }
    {'sldemo_clutch/Friction Mode Logic/Requisite Friction/Tin'}
    {'sldemo_clutch/Friction Mode Logic/Requisite Friction/Tf' }
    {'sldemo_clutch/Friction Mode Logic/locked'                }
    {'sldemo_clutch/Friction Mode Logic/lock'                  }
    {'sldemo_clutch/Friction Mode Logic/unlock'                }
    {'sldemo_clutch/Friction Mode Logic/Tf'                    }
    {'sldemo_clutch/Locked/Tin'                                }
    {'sldemo_clutch/Locked/w'                                  }
    {'sldemo_clutch/Unlocked/Tfmaxk'                           }
    {'sldemo_clutch/Unlocked/Tin'                              }
    {'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.0055
    4.0055
    8.0055
   13.0055
   14.0055
   14.0055
   15.0055
   15.0055

输入参数

全部折叠

要搜索的系统,指定为完整的系统路径名称、系统路径名称元胞数组、句柄或句柄向量。

示例: 'MyModel/Subsystem1'

示例: {'vdp','fuelsys'}

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须显示在引号内。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN

示例: 'SearchDepth','0','LookUnderMasks','none','BlockType','Goto' 在加载的系统(不包括封装子系统)中搜索 Goto 模块。

当您使用 find_system 函数时,Name,Value 对组实参中可以包括搜索约束条件以及形参名称-值对组。您可以按任意顺序指定搜索约束条件,但搜索约束条件必须在参数名称-值对组之前。

有关模块参数列表,请参阅模块特定的参数

用于在模块对话框参数中搜索指定值的选项,指定为以逗号分隔的对组,其中包含 'BlockDialogParams' 和一个字符向量或字符串标量。该对组必须跟在其他搜索约束对组之后。

用于在匹配时考虑大小写的选项,指定为以逗号分隔的对组,由 'CaseSensitive''on'(表示搜索区分大小写)或 'off' 组成。

用于指示是否在搜索中包括系统中的信号线、端口和注释的选项,指定为以逗号分隔的对组,由 'FindAll''on''off' 组成。当此选项设置为 'on' 时,无论您如何指定 System 参数,find_system 都会返回句柄向量。

用于仅返回第一个结果然后停止搜索的选项,指定为以逗号分隔的对组,由 'FirstResultOnly''on''off' 组成。

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

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

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

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

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

  • 'graphical' - 搜索包括没有工作区和对话框的封装子系统。

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

  • 'functional' - 搜索包括没有对话框的封装子系统。

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

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

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

用于将搜索表达式视为正则表达式的选项,指定为以逗号分隔的对组,由 'RegExp''on'(表示将搜索表达式视为正则表达式)或 'off' 组成。有关 MATLAB® 正则表达式的详细信息,请参阅正则表达式

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

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

  • 'ActiveVariants' - 仅在活动可变子系统中搜索。

  • 'AllVariants' - 在所有变体中搜索。

  • 'ActivePlusCodeVariants' - 如果有任何变体生成预处理器条件句,则搜索所有变体。否则,只搜索活动变体。

注意

此搜索条件仅适用于可变子系统。要处理所有其他变体模块,请使用 Variants MatchFilter 选项。

在搜索中匹配元素的函数句柄,如模块、系统、信号线、端口和注释。使用 MatchFilter 确定在搜索中应选择还是跳过元素。

示例:使用 MatchFilter 可使用您自己定义的筛选器函数 nonInOutBlocks 来查找模型中的所有非 InportOutport 模块:

blks = find_system('ModelName', 'MatchFilter', @nonInOutBlocks)
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

此示例说明如何将 MatchFilter 与第二个输出参数 prune 结合使用。

 [match, prune] = fcn(element)
 where
  element - Handle of the block being processed.
  match   - Logical. If false, skip the element.
  prune   - Optional logical (default false). If true, do not look in subsystems.

变体:Simulink 为变体模块提供 Simulink.match.activeVariantsSimulink.match.codeCompileVariants 匹配筛选器函数,您可以使用这些函数来查找活动变体或代码编译变体模块。为此,请编译模型并应用适当的 MatchFilter 选项:

  • Simulink.match.activeVariants - 匹配在模型编译后在仿真中活动的模块

  • Simulink.match.codeCompileVariants - 匹配在模型编译后作为生成代码一部分的模块

示例:使用 Simulink.match.activeVariants 选项查找模型中的活动变体:

set_param(model, 'SimulationCommand', 'update');
activeBlks = find_system(model, 'MatchFilter', @Simulink.match.activeVariants);

示例:使用 Simulink.match.codeCompileVariants 选项查找生成的 C 代码中的变体选择项:

 MODEL([],[],[],'compileForRTW')
 find_system(MODEL, 'MatchFilter', @Simulink.match.codeCompileVariants);
 MODEL([],[],[],'term')

输出参数

全部折叠

返回找到的匹配对象:

  • 如果您指定 System 为路径名称或路径名称元胞数组,或者您未指定系统,则返回为路径名称元胞数组

  • 如果您指定 System 为句柄或句柄向量,则返回为句柄向量

在 R2006a 之前推出