主要内容

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

MATLAB Function 模块中的自定义代码测试生成

Simulink® Design Verifier™ 分析支持使用 coder.ceval 从 MATLAB® Function 模块调用自定义代码的模型。对于这样的设计模型,您可以生成模型覆盖率的测试用例或执行设计错误检测以查找死逻辑或检测设计错误。

下表总结了 Simulink Design Verifier 支持的各种 coder.ceval 用例:

支持的 coder.ceval 用例:

coder.ceval 用法自定义代码源分析

基本调用 - 带或不带参量

配置参数中的 Simulink 目标中提到的源文件。

支持

布局 - 行优先、列优先

使用 coder.refcoder.wrefcoder.rref 传递引用

任意布局 - 全局

-

不支持

-

使用 coder.updateBuildInfo 提及的源文件

不支持

为 MATLAB Function 模块中的自定义代码生成测试

此示例演示了使用 coder.ceval 进行模型测试生成工作流程。

考虑一个模型,其中 MATLAB Function 模块使用 coder.ceval 调用自定义代码。

  1. 按照 coder.ceval 所述创建所需的源文件。

    C 函数 checkIfSignalsInRange 代表自定义代码。如果两个信号都在可接受范围内,则该函数返回 1,否则,该函数返回 0。MATLAB Function 模块 checkIfSignalsINRangeWrapper 接收传感器输入并调用 C 函数。

    C file: 
    #include <stdio.h>
    #include <stdlib.h>
    #include "checkIfSignalsInRange.h"
    int checkIfSignalsInRange(double sig1, double sig2) {
        double acceptableMin = 15;
        double acceptableMax = 150;
        if ( ((sig1 > acceptableMin) && (sig1 < acceptableMax)) && ((sig2 > acceptableMin) && (sig2 < acceptableMax)) ) {
            return 1;
        }
        return 0;
    }
    Header file:
    int checkIfSignalsInRange(double sig1, double sig2);
    
    MATLAB function Block:
    function result = checkIfSignalsINRangeWrapper(sig1,sig2)
    result = 0;
    % Check if both the signals are within acceptable range
    result = coder.ceval('checkIfSignalsInRange',sig1,sig2);
    
  2. 导航到配置参数中的仿真目标。在代码信息选项卡中添加所需的文件。

  3. 导入设置选项卡中设置启用自定义代码分析选项。

  4. 将模型覆盖率目标设置为 Decision 并在配置参数中调用测试生成分析。

结果

该模型有三个决策目标,一个用于 MATLAB Function 模块执行,另外两个用于自定义代码。这两个决策目标分别对应着使得 if 条件的结果一次为真,一次为假。生成的测试及报告如下:

从报告中推断,在步骤 1 中两个信号都在可接受范围内,而在步骤 2 中信号超出了范围。