В этом примере показано, как программно обнаружить клоны через многоуровневые модели, расположенные в других папках. Для получения дополнительной информации о 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.Results
Clones
и 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'}
Точно так же можно найти результаты других групп клонов с помощью перечисленных выше шагов.