Main Content

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

配置S-Function以生成测试用例

此示例显示如何编译S-Function以与 Simulink® Design Verifier™ 兼容以生成测试用例。Simulink Design Verifier 支持的 S 函数如下:

  • 使用 Legacy Code Tool 生成,将 def.Options.supportCoverageAndDesignVerifier 设置为 true

  • 使用 SFunctionBuilder 生成,并在 SFunctionBuilder 对话框的 Build Info 选项卡上选择 Enable support for Design Verifier,或者

  • 使用函数slcovmex (Simulink Coverage)进行编译,并传递选项-sldv

编译S-Function以与 Simulink Design Verifier 兼容

手写的S-Function位于文件 sldvexSFunctionHandlingSFcn.c 中,查找表的用户源代码位于文件 sldvexSFunctionHandlingSource.c 中。调用函数 slcovmex (Simulink Coverage) 来编译 C-MEX S-Function并使其与 Simulink Design Verifier 兼容。

slcovmex('-sldv', ...
        '-output', 'sldvexSFunctionHandlingSFcn',...
        'sldvexSFunctionHandlingSource.c','sldvexSFunctionHandlingSFcn.c');
mex /tmp/Bdoc24a_2589924_1833917/tpa97c975f_af2b_4227_88d6_407a2b04c663/tp7d905074_c5a4_4e52_bcdb_36b16f4e0b1a.c /tmp/Bdoc24a_2589924_1833917/tpa97c975f_af2b_4227_88d6_407a2b04c663/tpf61ba670_d1b1_4659_a904_ff0e8d32b379.c -L/mathworks/devel/bat/filer/batfs1904-0/Bdoc24a.2589924/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.
mex sldvexSFunctionHandlingSource.c /tmp/Bdoc24a_2589924_1833917/tpa97c975f_af2b_4227_88d6_407a2b04c663/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc24a_2589924_1833917/tpa97c975f_af2b_4227_88d6_407a2b04c663/tpcc994b05_e802_4875_ab72_f36d23b0e16f.c /tmp/Bdoc24a_2589924_1833917/tpa97c975f_af2b_4227_88d6_407a2b04c663/tp637df8e3_6c86_47d3_af3f_6d3de5d7e06b.c -L/mathworks/devel/bat/filer/batfs1904-0/Bdoc24a.2589924/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.

创建测试套件

示例模型sldvexSFunctionHandlingExample 示例包含手写的S-Function,它实现了查找表算法。S-Function模块返回第一个输出端口处的插值并返回第二个输出端口处的插值状态。如果发生较低饱和度,则第二个输出端口返回值 -1;如果发生较高饱和度,则返回 1;否则,返回 0。打开 sldvexSFunctionHandlingExample模型并通过打开S-Function对测试生成的支持来配置分析选项。运行分析时,Simulink Design Verifier 返回满足所有覆盖率目标的测试套件。

open_system('sldvexSFunctionHandlingExample');

opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.ModelCoverageObjectives = 'ConditionDecision';
opts.SaveHarnessModel = 'off';
opts.SaveReport = 'off';
opts.SFcnSupport = 'on';

[status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts, true);

验证完整覆盖范围

sldvruntest函数验证测试套件是否实现完整的模型覆盖率。cvhtml (Simulink Coverage) 函数生成覆盖率报告,表明使用生成的测试向量实现了 100% 的条件和决策覆盖率。

[~, finalCov] = sldvruntest('sldvexSFunctionHandlingExample', fileNames.DataFile, [], true);
cvhtml('Final Coverage', finalCov);

清理

为了完成演示,请关闭所有模型。

close_system('sldvexSFunctionHandlingExample', 0);