В этом примере показано, как программно обнаружить клоны через многоуровневые модели, расположенные в других папках. Для получения дополнительной информации о API обнаружения клонов, смотрите, Обнаруживают и Клоны Подсистемы Замены Программно.
Этот пример демонстрирует, как использовать API обнаружения клонов, чтобы идентифицировать клоны в шести моделях Simulink®, существующих в папке. ПРИМЕЧАНИЕ: API Clone Detector не поддерживают заменяющий клоны в многоуровневых моделях.
1. В командной строке MATLAB®, введите:
addpath(fullfile(docroot,'toolbox','simulink','examples'))
ex_clone_detection_A
ex_clone_detection_B
ex_clone_detection_C
ex_clone_detection_D
ex_clone_detection_E
ex_clone_detection_FСохраните модели в writeable папку.
2. Используйте класс, чтобы создать объект.Simulink.CloneDetection.Settings
cloneDetectionSettings = Simulink.CloneDetection.Settings();
3. Добавьте путь папки с моделями к cloneDetectionSettings объект.
cloneDetectionSettings.Folders = {'D:\models'}
cloneDetectionSettings =
Settings with properties:
IgnoreSignalName: 0
IgnoreBlockProperty: 0
ExcludeModelReferences: 0
ExcludeLibraryLinks: 0
ExcludeInactiveRegions: 0
DetectClonesAcrossModel: 0
FindClonesRecursivelyInFolders: 1
ParamDifferenceThreshold: 50
ReplaceExactClonesWithSubsystemReference: 0
Libraries: {}
Folders: {'D:\models'}
4. Чтобы найти клоны, выполните функциональный Simulink.CloneDetection.findClones использование cloneDetectionSettings объект.
cloneResults = Simulink.CloneDetection.findClones(cloneDetectionSettings)
cloneResults =
Results with properties:
Clones: [1×1 struct]
ExceptionLog: ''
cloneResults объект класс, который имеет два свойства, Simulink.CloneDetection.ResultsClones и ExceptionLog.
5. Просмотрите Clones.Summary поле .
cloneResults.Clones.Summary
ans =
struct with fields:
CloneGroups: 4
SimilarClones: 18
ExactClones: 8
Clones: 26
PotentialReusePercentage: [1×1 struct]
В этом примере модели имеют четыре различных группы клонов с соответствием с шаблонами подсистемы, восемнадцатью подобными клонами, и восемью точными клонами и двадцатью шестью клонами подсистемы.
5. Посмотрите детали первой группы клонов.
cloneResults.Clones.CloneGroups(1)
ans =
struct with fields:
Name: 'Exact Clone Group 1'
Summary: [1×1 struct]
CloneList: {5×1 cell}
6. Просмотрите сводные данные первой группы клонов.
cloneResults.Clones.CloneGroups(1).Summary
ans =
struct with fields:
ParameterDifferences: [1×1 struct]
Clones: 5
BlocksPerClone: 5
CloneType: 'Exact'
BlockDifference: 0
7. Просмотрите список клонов первой группы клонов.
cloneResults.Clones.CloneGroups(1).CloneList
ans =
5×1 cell array
{'ex_clone_detection_A/Subsystem'}
{'ex_clone_detection_B/Subsystem'}
{'ex_clone_detection_C/Subsystem'}
{'ex_clone_detection_D/Subsystem'}
{'ex_clone_detection_F/Subsystem'}
Точно так же можно найти результаты других групп клонов с помощью перечисленных выше шагов.