在模型中寻找克隆
克隆是将具有相同模块类型和连接的模型模式。您可以通过从这些克隆模式创建库块,并将克隆替换为指向库块的链接来重构您的模型,这样您就可以重用这些组件。有关克隆的更多信息,请参阅使用克隆检测启用组件重用。
您可以搜索子系统中的克隆,也可以搜索模型中的任何克隆。
子系统克隆:仅在子系统中识别克隆。
跨模型克隆:识别模型中任意位置的克隆。
本示例展示了如何使用克隆检测器应用程序和 API 来识别模型中任意位置的克隆,然后将其替换为指向库块的链接。
使用克隆检测器应用程序识别模型中的克隆体
本示例展示了如何使用克隆检测器识别模型中的克隆。

打开模型
similar_clones_model。将模型保存到当前工作目录。
在 App 选项卡上,点击克隆检测器。或者,在 MATLAB® 命令行中,输入:
clonedetection("similar_clones_model")。要设置克隆检测的参数,点击设置。在克隆任意位置设置下,点击跨模型检测克隆。

最小区域大小和最小克隆组大小默认设置为 2。最小区域大小参数表示每个克隆区域所需的最小块数,而最小克隆组大小参数表示将其定义为克隆组所需的最小克隆出现次数。
点击查找克隆以标识克隆。
该应用会突出显示克隆产品。完全相同的克隆体以红色突出显示,相似的克隆体以蓝色突出显示。

本示例中突出显示的克隆包括子系统内部和外部识别的克隆,以及连接到子系统的 Simulink® 模块。
点击替换克隆。
该应用程序重构了模型,并将克隆替换为指向工作目录中 newLibraryFile 库文件的链接。该应用程序将子系统外部的 Simulink 克隆块替换为链接的 Subsystem 块。
通过编程方式识别克隆
使用
Simulink.CloneDetection.Settings类创建一个对象。cloneDetectionSettings = Simulink.CloneDetection.Settings()
cloneDetectionSettings = IgnoreSignalName: 0 IgnoreBlockProperty: 0 ExcludeModelReferences: 0 ExcludeLibraryLinks: 0 FindClonesRecursivelyInFolders: 1 ParamDifferenceThreshold: 50 ReplaceExactClonesWithSubsystemReference: 0 Libraries: {} Folders: {} DetectClonesAcrossModel: 0 ExcludeInactiveRegions: 0要搜索模型中的克隆,请将
DetectClonesAcrossModel设置为 1。cloneDetectionSettings.DetectClonesAcrossModel = 1
cloneDetectionSettings = IgnoreSignalName: 0 IgnoreBlockProperty: 0 ExcludeModelReferences: 0 ExcludeLibraryLinks: 0 SelectedSystemBoundary: [] FindClonesRecursivelyInFolders: 1 ParamDifferenceThreshold: 50 ReplaceExactClonesWithSubsystemReference: 0 Libraries: {} Folders: {} DetectClonesAcrossModel: 1 ExcludeInactiveRegions: 0 MinimumRegionSize: 2 MinimumCloneGroupSize: 2MinimumRegionSize和MinimumCloneGroupSize的默认值为 2。您可以更改它们的值。要查找克隆,请使用
cloneDetectionSettings对象执行函数 Simulink.CloneDetection.findClones。cloneResults = Simulink.CloneDetection.findClones('similar_clones_model',cloneDetectionSettings)cloneResults = Clones: [1×1 struct] ExceptionLog: ''cloneResults.Clones =
Results with properties: Summary: [1×1 struct] CloneGroups: [1×2 struct]有关克隆检测 API 的更多详细信息,请参阅 通过编程方式检测和替换子系统克隆。