MATLAB Function 模块中的自定义代码测试生成
Simulink® Design Verifier™ 分析支持使用 coder.ceval 从 MATLAB® Function 模块调用自定义代码的模型。对于这样的设计模型,您可以生成模型覆盖率的测试用例或执行设计错误检测以查找死逻辑或检测设计错误。
下表总结了 Simulink Design Verifier 支持的各种 coder.ceval 用例:
支持的 coder.ceval 用例:
coder.ceval 用法 | 自定义代码源 | 分析 |
|---|---|---|
基本调用 - 带或不带参量 | 配置参数中的 Simulink 目标中提到的源文件。 | 支持 |
布局 - 行优先、列优先 | ||
使用 | ||
任意布局 - 全局 | - | 不支持 |
| - | 使用 | 不支持 |
为 MATLAB Function 模块中的自定义代码生成测试
此示例演示了使用 coder.ceval 进行模型测试生成工作流程。
考虑一个模型,其中 MATLAB Function 模块使用 coder.ceval 调用自定义代码。
按照
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);导航到配置参数中的仿真目标。在代码信息选项卡中添加所需的文件。
在导入设置选项卡中设置启用自定义代码分析选项。
将模型覆盖率目标设置为
Decision并在配置参数中调用测试生成分析。
结果
该模型有三个决策目标,一个用于 MATLAB Function 模块执行,另外两个用于自定义代码。这两个决策目标分别对应着使得 if 条件的结果一次为真,一次为假。生成的测试及报告如下:


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