使用模型库识别和替换克隆
克隆是将具有相同模块类型和连接的模型模式。通过使用 克隆件检测器 应用程序,您可以找到克隆内容并将其替换为指向库块的链接。这样便于重用模型库中的组件,从而更容易更新模型。您可以对库中的建模模式基线,并使用克隆检测器将模型中所有此类建模模式的实例替换为指向库块的链接。
如果模型中重复出现的克隆模式尚未存在于库中,您还可以使用克隆检测器应用程序创建新的库块,然后将克隆替换为指向这些新库块的链接。有关详细信息,请参阅使用克隆检测启用组件重用。
利用外部库识别克隆
本示例展示了如何使用克隆检测器应用程序来识别克隆,然后将其替换为指向外部库块的链接。
检测克隆
打开模型
ex_detect_clones。openExample("ex_detect_clones")
将模型保存到您的工作文件夹中。该模型必须处于开放状态才能访问该应用程序。
在 App 选项卡上,从应用库中选择克隆检测器。或者,在 MATLAB® 命令行中输入:
clonedetection("ex_detect_clones")打开库
ex_clone_library。在 MATLAB 命令行中,输入:openExample("ex_clone_library")
在克隆检测器选项卡中,选择设置 > 匹配库中的模式。

添加库文件
ex_clone_library.slx。您还可以提供包含库文件的文件夹路径,克隆检测器将选择该文件夹中的所有库文件。
点击查找克隆以标识克隆。
在克隆检测结果和操作面板的克隆结果选项卡中,显示了克隆组列表。
点击
ex_clone_library/libsubsystem旁边的>,然后选择克隆区域 2。模型中突出显示了子系统SS2,表明它是克隆体。
在重构好处窗格中,您可以评估完全克隆和相似克隆的数量占模型中块总数的百分比。

替换克隆
点击替换克隆。在重构过程中,只有完全相同的克隆代码会被替换为库链接。除非经过精确修改以完全匹配,否则相似的克隆不会链接到库中。
您可以通过点击克隆检测结果和操作窗格的克隆结果选项卡中的还原按钮,将模型恢复到其原始状态。克隆检测器应用程序会在工作目录中创建一个备份文件夹。备份文件夹名称以 m2m_model name 为前缀。克隆数据保存在 MAT 文件中。重构模型后,您还可以在备份文件夹中找到原始模型的备份。
通过编程方式识别克隆
您还可以使用 MATLAB 命令从库中识别模型中的克隆。有关详细信息,请参阅通过编程方式检测和替换子系统克隆。
创建一个
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要使用库文件搜索克隆,请在
Libraries属性中提供库路径。cloneDetectionSettings.Libraries = "C:\Project\Libraries\ex_clone_library.slx"cloneDetectionSettings = IgnoreSignalName: 0 IgnoreBlockProperty: 0 ExcludeModelReferences: 0 ExcludeLibraryLinks: 0 SelectedSystemBoundary: [] FindClonesRecursivelyInFolders: 1 ParamDifferenceThreshold: 50 ReplaceExactClonesWithSubsystemReference: 0 Libraries: {'C:\Project\Libraries\ex_clone_library.slx'} Folders: {} DetectClonesAcrossModel: 0 ExcludeInactiveRegions: 0要查找克隆,请使用
cloneDetectionSettings对象和Simulink.CloneDetection.findClones函数。cloneResults = Simulink.CloneDetection.findClones("ex_detect_clones",cloneDetectionSettings)cloneResults = Clones: [1×1 struct] ExceptionLog: ''有关分析克隆检测结果的更多详细信息,请参阅 通过编程方式识别模型中的克隆体。