主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

增强旧版本车型的车型覆盖率

为了增强您在旧版本中创建的模型的模型覆盖率,请使用测试生成工作流程或代码生成工作流程。您可以利用 Simulink® Design Verifier™ 的最新发布功能来生成基于模型的设计的测试用例。

这些工作流程增强了模型覆盖率。

通过为旧版本模型生成测试用例来增强模型覆盖率

此示例显示如何升级在 R2015b 中创建的模型的模型覆盖率。您可以使用最新版本中支持的 S-function 进行测试生成。

示例模型 sldvexSFunctionHandlingExample 包含手写的 S-Function,它实现了查找表算法。手写的 S-Function 位于文件 sldvexSFunctionHandlingSFcn.c 中。查找表的用户源代码位于文件 sldvexSFunctionHandlingSource.c 中。

1.在 MATLAB R2015b 中,打开 sldvexSFunctionHandlingExample 模型。

open_system('sldvexSFunctionHandlingExample');

cross_release_model.png

2.要仿真模型并生成覆盖率报告,请在 Simulink 编辑器中点击运行按钮。请参阅在 Simulink Canvas 中查看覆盖率结果 (Simulink Coverage)

仿真之后,覆盖率报告表明 sldvexSFunctionHandlingExample 模型并未实现完全覆盖率。

coverage_report_15a.png

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

cross_release_sldv_results_summary.png

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

coverage_report_15a_full.png

有关详细信息,请参阅 管理 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)

  1. 从您的目录转到示例文件夹并复制当前工作文件夹中的示例模型 sldvCrossReleaseExample 和 S-Function 文件、rel_sfcn.crel_comp.crel_sfcn.tlc。将头文件 rel_comp.h 复制到当前工作文件夹中。您使用 R2015b 中的示例模型和支持文件进行 Cross-Release Code Integration (Embedded Coder) 工作流。

    注意

    示例模型 sldvCrossReleaseExample 是为了示例目的而创建的。要使用示例模型执行代码生成工作流程,请将 sldvCrossReleaseExample 模型导出到 15b。将模型作为 sldvCrossReleaseExample_15b 保存在当前工作文件夹中。有关详细信息,请参阅 将模型导出为 Simulink 的先前版本

  2. 在 MATLAB R2015b 中,从当前工作文件夹打开 sldvCrossReleaseExample_15b 模型。

    open_system('sldvCrossReleaseExample_15b');
    

  3. 使用函数 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);
  4. 要仿真模型并生成覆盖率报告,请在 Simulink 编辑器中点击运行按钮。请参阅在 Simulink Canvas 中查看覆盖率结果 (Simulink Coverage)

    仿真之后,覆盖率报告显示 sldvCrossReleaseExample_15b 模型的覆盖率达到了 50%。

  5. 要使用 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

  6. 将模型 sldvCrossReleaseExample_15b 的配置集保存到 MAT 文件。这个 ConfigSet 用于设置 R2018b 及以后版本中模型的配置集。

    config_set = getActiveConfigSet('sldvCrossReleaseExample_15b');
    copiedConfig = config_set.copy;
    save('copiedConfig.mat','copiedConfig');
            
  7. 在 MATLAB R2018b 或更高版本中,导入从 R2015b 导出的组件。

    1. 在当前版本中导入组件之前,请重命名或删除文件夹 rtwtypes.h 中的 <current_folder>\sldvCrossReleaseExample_15b_ert_rtw 文件。在跨版本导入期间,MATLAB 尝试重新生成同名的文件。如果不删除或重命名文件 rtwtypes.h,MATLAB 将显示错误。

    2. 将从 R2015b 生成的组件代码导入为软件在环 (SIL) 模块。

       crossReleaseImport('sldvCrossReleaseExample_15b_ert_rtw',...
      'sldvCrossReleaseExample_15b', 'SimulationMode','SIL');

      crossReleaseImport 函数创建一个包含软件在环 (SIL) 模块 sldvCrossReleaseExample_15b_R2015b_sil 的无标题模型。

  8. InportOutport 端口添加到 sldvCrossReleaseExample_15b_R2015b_sil 模块并将模型保存为 sldvCrossReleaseExample_sil_18b

  9. 应用与 R2015b 模型类似的模型配置集。

    load('copiedConfig.mat');
    attachConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig, true);
    setActiveConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig.Name);
  10. 将仿真模式设置为 Software-in-the-Loop (SIL)。要仿真模型,请在框架模型中点击全部运行按钮。

  11. 要为 Embedded Coder 生成的代码生成测试用例,请在 Design Verifier 选项卡上,选择 目标 > 生成的顶层模型代码 并点击生成测试。有关详细信息,请参阅 为 Embedded Coder 生成的代码生成测试用例

    经过 Simulink Design Verifier 分析后,软件生成测试用例并将 sldvData 保存在默认位置 <current_folder>\sldv_output\sldvCrossReleaseExample_sil_18b 的文件夹中。

  12. 在 R2015b 中,打开模型。

    open_system('sldvCrossReleaseExample_15b');
  13. sldvData.ModelInfomation.Name 中的 sldvData 字段更新为与旧版本中的模型名称相同。例如,sldvCrossReleaseExample_15b.slx

  14. 使用在 R2018b 或更高版本中创建的 sldvData 创建框架模型。该数据由 Embedded Coder 生成的代码生成的测试用例组成。在 dataFile 中,键入为 sldvData 模型生成的 sldvCrossReleaseExample_sil_18b 的位置。

    sldvmakeharness('sldvCrossReleaseExample_15b.slx','dataFile')
  15. 要使用所有测试用例来仿真模型,点击框架模型中的全部运行(覆盖率)按钮。

    该软件仿真所有测试用例并生成覆盖率报告。报告显示 sldvCrossReleaseExample_15b 模型的覆盖率达到了 100%。

另请参阅

主题