主要内容

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

使用命令行函数支持更改参数

此示例展示如何使用 Simulink® Design Verifier™ 命令行函数生成包含不同参数值的测试数据。

具有可调参数的控制器模型

示例模型是一个具有单个参数的简单控制器。常量参数“control_mode”可以是 1 或 2。该参数必须采用测试用例的两个值才能实现完全覆盖率。该值决定了开关模块输出以及将执行哪个使能子系统。

open_system('sldvdemo_param_controller');

指定分析的参数值

Simulink Design Verifier 不识别参数值。该工具使用分析开始时的参数值来生成测试和证明属性。您可以通过使用不同的值重复分析来强制该工具合并变化的参数值。

Design Verifier 的第一次迭代将使用 control_mode=1。

control_mode = 1;

Simulink® Design Verifier™ 选项

Simulink Design Verifier 函数使用 sldvoptions 函数创建的选项对象来控制分析和输出的各个方面。

在这个例子中,我们将在测试生成模式下运行 Simulink Design Verifier 最多 300 秒并生成一个框架模型。我们将禁用报告生成。

其余选项的默认值已正确设置以生成测试。您可以使用 get 命令显示所有选项和值。

opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.MaxProcessTime = 300;
opts.SaveHarnessModel = 'on';
opts.SaveReport = 'off';
opts.HarnessModelFileName = '$ModelName$_harness.slx';

生成测试并收集覆盖率

sldvgencov 函数一起生成测试套件和模型覆盖率。所有可以使用当前参数值生成的测试都将被收集到框架模型中,并且在覆盖率数据对象中返回生成的覆盖率。

[status,coverageData,files] = sldvgencov('sldvdemo_param_controller',opts);
01-Feb-2025 15:00:17
Checking compatibility for test generation: model 'sldvdemo_param_controller'
Compiling model...done
Building model representation...done

01-Feb-2025 15:00:21

'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 01-Feb-2025 15:00:21...

..............
01-Feb-2025 15:00:30

Completed normally.

Generating output files:

    Harness model:
    /tmp/Bdoc25a_2864802_2135085/tpdd452aec/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx

01-Feb-2025 15:00:37
Results generation completed.

    Data file:
    /tmp/Bdoc25a_2864802_2135085/tpdd452aec/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata.mat

将参数初始化集成到测试框架中

生成的测试用例必须使用分析期间使用的相同参数值来运行。初始化命令在测试用例仿真期间配置值。sldvmergeharness 函数将初始化命令合并到测试框架中。

initCmdStr = 'control_mode=1;'
[path,modelName] = fileparts(files.HarnessModel);
sldvmergeharness(modelName,modelName,initCmdStr);
initCmdStr =

    'control_mode=1;'

修改参数并重复测试生成

修改参数值可以实现额外的测试生成。将覆盖率数据对象作为第三个输入传递给 sldvgencov 会强制函数忽略所有已满足的模型覆盖率测试目标。我们使用先前调用 sldvgencov 返回的覆盖率数据来将测试生成限制在未满足的测试目标上。

control_mode=2;
[status,newCov,newFiles] = sldvgencov('sldvdemo_param_controller',opts,false,coverageData);
01-Feb-2025 15:00:41
Validating cached model representation from 01-Feb-2025 15:00:21...change detected

01-Feb-2025 15:00:41
Checking compatibility for test generation: model 'sldvdemo_param_controller'
Compiling model...done
Building model representation...done

01-Feb-2025 15:00:45

'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 01-Feb-2025 15:00:45...

..............
01-Feb-2025 15:00:51

Completed normally.

Generating output files:

    Harness model:
    /tmp/Bdoc25a_2864802_2135085/tpdd452aec/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx

01-Feb-2025 15:00:58
Results generation completed.

    Data file:
    /tmp/Bdoc25a_2864802_2135085/tpdd452aec/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata1.mat

将测试框架合并到单个模型中

另一次调用 sldvharnessmerge 将来自新框架的测试数据及其初始化命令合并到现有的框架模型中。

newInitCmd = 'control_mode=2;'
[path,newModelName] = fileparts(newFiles.HarnessModel);
sldvmergeharness(modelName,newModelName,newInitCmd);
newInitCmd =

    'control_mode=2;'

在框架模型中执行测试

我们关闭创建的第二个框架模型,因为测试用例已合并到第一个框架模型中。您可以通过点击信号编辑器上的“全部运行”按钮来执行测试套件。

close_system(newModelName,0);
sldvdemo_playall(modelName);

清理

为了完成示例,请关闭模型并删除生成的文件。

close_system(modelName,0);
close_system('sldvdemo_param_controller',0);
delete(files.HarnessModel);
delete(newFiles.HarnessModel);