以编程方式在多个模型中通过循环检测并替换克隆
此示例说明如何以编程方式,通过循环逐个对模型进行操作,在多个模型中检测并替换克隆。有关克隆检测 API 的详细信息,请参阅Detect and Replace Subsystem Clones Programmatically。
此示例说明如何使用库文件 clones_library 作为子系统引用来替换克隆,以编程方式为五个 Simulink® 模型检测并替换克隆。
1.打开模型:
ex_detect_clones_A
ex_detect_clones_B
ex_detect_clones_C
ex_detect_clones_D
ex_detect_clones_E
clones_library将模型和库文件保存在当前工作目录中。
2.创建一个数组,用于添加模型:
modelList = {};
3.将模型添加到 modelList 数组:
modelList{end+1,1} = 'ex_detect_clones_A';
modelList{end+1,1} = 'ex_detect_clones_B';
modelList{end+1,1} = 'ex_detect_clones_C';
modelList{end+1,1} = 'ex_detect_clones_D';
modelList{end+1,1} = 'ex_detect_clones_E';
modelList{end+1,1} = 'ex_detect_clones_F';
4.定义容器来存储模型的 Results、ReplacementResults 和 equivalencyCheck 对象。
cloneResultsStorage = containers.Map();
cloneReplacementStorage = containers.Map();
equivalencyCheckStorage = containers.Map();
5.将库文件添加到从 Settings 类创建的 cloneDetectionSettings 对象中。
libName = 'clones_library';
cloneDetectionSettings = Simulink.CloneDetection.Settings();
cloneDetectionSettings = cloneDetectionSettings.addLibraries(libName);
6.使用循环通过 Simulink.CloneDetection.findClones、Simulink.CloneDetection.replaceClones 和 Simulink.CloneDetection.checkEquivalency 函数遍历模型。
for modelIndex = 1:length(modelList) modelName = modelList{modelIndex}; try cloneResults = Simulink.CloneDetection.findClones(modelName, cloneDetectionSettings); cloneResultsStorage(modelName) = cloneResults; cloneReplacementResults = Simulink.CloneDetection.replaceClones(cloneResults); cloneReplacementStorage(modelName) = cloneReplacementResults; equivalencyCheckResults = Simulink.CloneDetection.checkEquivalency(cloneReplacementResults); equivalencyCheckStorage(modelName) = equivalencyCheckResults; catch exception end end
您可以访问各个模型的 cloneResultsStorage、cloneReplacementStorage 和 equivalencyCheckStorage 对象的结果。有关详细信息,请参阅Detect and Replace Subsystem Clones Programmatically。