增强旧版本车型的车型覆盖率
为了增强您在旧版本中创建的模型的模型覆盖率,请使用测试生成工作流程或代码生成工作流程。您可以利用 Simulink® Design Verifier™ 的最新发布功能来生成基于模型的设计的测试用例。
这些工作流程增强了模型覆盖率。
通过为旧版本模型生成测试用例来增强模型覆盖率
此示例显示如何升级在 R2015b 中创建的模型的模型覆盖率。您可以使用最新版本中支持的 S-function 进行测试生成。
示例模型 sldvexSFunctionHandlingExample 包含手写的 S-Function,它实现了查找表算法。手写的 S-Function 位于文件 sldvexSFunctionHandlingSFcn.c 中。查找表的用户源代码位于文件 sldvexSFunctionHandlingSource.c 中。
1.在 MATLAB R2015b 中,打开 sldvexSFunctionHandlingExample 模型。
open_system('sldvexSFunctionHandlingExample');
2.要仿真模型并生成覆盖率报告,请在 Simulink 编辑器中点击运行按钮。请参阅在 Simulink Canvas 中查看覆盖率结果 (Simulink Coverage)。
仿真之后,覆盖率报告表明 sldvexSFunctionHandlingExample 模型并未实现完全覆盖率。

3.在 MATLAB R2018b 或更高版本中,打开 sldvexSFunctionHandlingExample 模型。示例模型 sldvexSFunctionHandlingExample 在 R2015b 及更高版本中可用,因此您可以使用相同的模型进行测试生成工作流程。
open_system('sldvexSFunctionHandlingExample');为了避免模型发生任何潜在变化,请在当前工作文件夹中创建旧版本模型的副本,然后在 R2018b 或更高版本中打开该模型。要升级和改进您在当前版本中使用的模型,您可以使用 upgradeadvisor 函数。请参阅以编程方式分析和升级模型。
4.编译 S-Function 使其与 Simulink Design Verifier 兼容,以便使用 slcovmex (Simulink Coverage) 生成测试用例。有关详细信息,请参阅 配置 S-Function 以生成测试用例。
slcovmex('-sldv', ... '-output', 'sldvexSFunctionHandlingSFcn',... 'sldvexSFunctionHandlingSource.c','sldvexSFunctionHandlingSFcn.c');
mex /tmp/Bdoc25a_2864802_2151310/tp9fb72369_496d_41e8_9f98_ab8fbdef0689/tpe576c6f2_5036_4324_afb7_78a48e99228c.c /tmp/Bdoc25a_2864802_2151310/tp9fb72369_496d_41e8_9f98_ab8fbdef0689/tp4ae6eae8_338b_4a07_83af_043687c4c0a4.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully. mex sldvexSFunctionHandlingSource.c /tmp/Bdoc25a_2864802_2151310/tp9fb72369_496d_41e8_9f98_ab8fbdef0689/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc25a_2864802_2151310/tp9fb72369_496d_41e8_9f98_ab8fbdef0689/tpc40cf6bc_2e85_414e_b1c9_2287b37e8229.c /tmp/Bdoc25a_2864802_2151310/tp9fb72369_496d_41e8_9f98_ab8fbdef0689/tpe41d3e3f_663d_4673_93a0_8064b61c028e.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully.
5.为 opts 模型创建一个 sldvexSFunctionHandlingExample 选项。
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'ConditionDecision'; opts.SaveHarnessModel = 'off'; opts.SaveReport = 'off'; opts.SFcnSupport = 'on';
6.使用指定的 opts 选项生成测试用例,使用 sldvrun 来分析模型。
[status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts);01-Feb-2025 15:06:14
Checking compatibility for test generation: model 'sldvexSFunctionHandlingExample'
Compiling model...done
Building model representation...done
01-Feb-2025 15:06:32
'sldvexSFunctionHandlingExample' is compatible for test generation with Simulink Design Verifier.
Generating tests using model representation from 01-Feb-2025 15:06:32...
Generating output files:
01-Feb-2025 15:06:46
Results generation completed.
Data file:
/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex67693772/sldv_output/sldvexSFunctionHandlingExample/sldvexSFunctionHandlingExample_sldvdata.mat
分析后软件生成 Simulink Design Verifier 数据文件并存储在默认位置 <current_folder>\sldv_output\sldvexSFunctionHandlingExample_sldvdata.mat.
7.在 R2015b 中,打开模型。
open_system('sldvexSFunctionHandlingExample');8.加载在 R2018b 或更高版本中创建的 sldvData 文件。
a.在 Design Verifier 选项卡上,点击加载早期结果并浏览到在 R2018b 或更高版本中生成的 sldvData MAT 文件。
b.点击 Open。

9.在“Simulink Design Verifier 结果摘要”窗口中,点击仿真测试并生成模型覆盖率报告。报告显示 sldvexSFunctionHandlingExample 模型的覆盖率达到了 100%。

有关详细信息,请参阅 管理 Simulink Design Verifier 数据文件。
使用旧版本生成的代码增强模型覆盖率
此示例展示如何使用代码生成工作流升级在 R2015b 中创建的模型的模型覆盖率。
对于此工作流程,您必须具有 Simulink Coder™ 和 Embedded Coder®。
示例模型 sldvCrossReleaseExample 包含手写的 S-Function,它实现了关系边界算法。手写的 S-Function 位于文件 rel_sfcn.c 中。用户源代码位于文件 rel_comp.c 中。
要内联 S-Function,请使用 rel_sfcn.tlc 文件。有关详细信息,请参阅 Inline S-Functions with TLC (Embedded Coder)。
从您的目录转到示例文件夹并复制当前工作文件夹中的示例模型
sldvCrossReleaseExample和 S-Function 文件、rel_sfcn.c、rel_comp.c和rel_sfcn.tlc。将头文件rel_comp.h复制到当前工作文件夹中。您使用 R2015b 中的示例模型和支持文件进行 Cross-Release Code Integration (Embedded Coder) 工作流。注意
示例模型
sldvCrossReleaseExample是为了示例目的而创建的。要使用示例模型执行代码生成工作流程,请将sldvCrossReleaseExample模型导出到 15b。将模型作为sldvCrossReleaseExample_15b保存在当前工作文件夹中。有关详细信息,请参阅 将模型导出为 Simulink 的先前版本。在 MATLAB R2015b 中,从当前工作文件夹打开
sldvCrossReleaseExample_15b模型。open_system('sldvCrossReleaseExample_15b');
使用函数
legacy_code编译 S-Function。def = legacy_code('initialize'); def.SFunctionName = 'rel_sfcn'; def.OutputFcnSpec = 'uint8 y1 = relational_bound(uint8 u1)'; def.HeaderFiles = {'rel_comp.h'}; def.SourceFiles = {'rel_comp.c'}; def.IncPaths = {pwd}; def.SrcPaths = {pwd}; def.Options.supportCoverageAndDesignVerifier = true; legacy_code('sfcn_cmex_generate', def); legacy_code('compile', def);
要仿真模型并生成覆盖率报告,请在 Simulink 编辑器中点击运行按钮。请参阅在 Simulink Canvas 中查看覆盖率结果 (Simulink Coverage)。
仿真之后,覆盖率报告显示
sldvCrossReleaseExample_15b模型的覆盖率达到了 50%。
要使用 Embedded Coder 生成代码,请从 App 选项卡中选择 Embedded Coder。有关详细信息,请参阅 使用 Embedded Coder 生成代码 (Embedded Coder)。
在 C 代码选项卡中,点击生成代码。
该模型预先配置了这些代码生成设置。
set_param(sldvCrossReleaseExample_15b,'SystemTargetFile','ert.tlc'); set_param(sldvCrossReleaseExample_15b,'PortableWordSizes','on'); set_param(sldvCrossReleaseExample_15b,'SupportNonFinite','off'); set_param(sldvCrossReleaseExample_15b,'GenCodeOnly','on'); set_param(sldvCrossReleaseExample_15b,'SolverMode','SingleTasking'); set_param(sldvCrossReleaseExample_15b,'ProdEqTarget','on');
该软件为模型生成 C 代码并将文件保存在默认文件夹位置
<current_folder>\sldvCrossReleaseExample_15b_ert_rtw。将模型
sldvCrossReleaseExample_15b的配置集保存到 MAT 文件。这个ConfigSet用于设置 R2018b 及以后版本中模型的配置集。config_set = getActiveConfigSet('sldvCrossReleaseExample_15b'); copiedConfig = config_set.copy; save('copiedConfig.mat','copiedConfig');
在 MATLAB R2018b 或更高版本中,导入从 R2015b 导出的组件。
在当前版本中导入组件之前,请重命名或删除文件夹
rtwtypes.h中的<current_folder>\sldvCrossReleaseExample_15b_ert_rtw文件。在跨版本导入期间,MATLAB 尝试重新生成同名的文件。如果不删除或重命名文件rtwtypes.h,MATLAB 将显示错误。将从 R2015b 生成的组件代码导入为软件在环 (SIL) 模块。
crossReleaseImport('sldvCrossReleaseExample_15b_ert_rtw',... 'sldvCrossReleaseExample_15b', 'SimulationMode','SIL');
crossReleaseImport函数创建一个包含软件在环 (SIL) 模块sldvCrossReleaseExample_15b_R2015b_sil的无标题模型。
将 Inport 和 Outport 端口添加到
sldvCrossReleaseExample_15b_R2015b_sil模块并将模型保存为sldvCrossReleaseExample_sil_18b。
应用与 R2015b 模型类似的模型配置集。
load('copiedConfig.mat'); attachConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig, true); setActiveConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig.Name);
将仿真模式设置为
Software-in-the-Loop (SIL)。要仿真模型,请在框架模型中点击全部运行按钮。要为 Embedded Coder 生成的代码生成测试用例,请在 Design Verifier 选项卡上,选择 目标 > 生成的顶层模型代码 并点击生成测试。有关详细信息,请参阅 为 Embedded Coder 生成的代码生成测试用例。
经过 Simulink Design Verifier 分析后,软件生成测试用例并将
sldvData保存在默认位置<current_folder>\sldv_output\sldvCrossReleaseExample_sil_18b的文件夹中。在 R2015b 中,打开模型。
open_system('sldvCrossReleaseExample_15b');将
sldvData.ModelInfomation.Name中的sldvData字段更新为与旧版本中的模型名称相同。例如,sldvCrossReleaseExample_15b.slx。使用在 R2018b 或更高版本中创建的
sldvData创建框架模型。该数据由 Embedded Coder 生成的代码生成的测试用例组成。在dataFile中,键入为sldvData模型生成的sldvCrossReleaseExample_sil_18b的位置。sldvmakeharness('sldvCrossReleaseExample_15b.slx','dataFile')
要使用所有测试用例来仿真模型,点击框架模型中的全部运行(覆盖率)按钮。
该软件仿真所有测试用例并生成覆盖率报告。报告显示
sldvCrossReleaseExample_15b模型的覆盖率达到了 100%。

