使用 Simulink Test 的代码生成验证工作流程
此示例展示如何使用测试框架、Test Sequence 模块和测试管理器对模型执行代码生成验证(CGV)。
打开燃料速率控制器模型
mdl = 'sltestFuelRateControlExample';
open_system(mdl);
模型描述
此示例使用汽油发动机的燃油速率控制器模型。控制器使用系统中的四个传感器来确定适当的燃料率。该系统使用的四个传感器是节气门角度、速度、EGO 和歧管绝对压力 [MAP]。
该模型使用三个子系统通过传感器输入来计算燃料率:control logic
、airflow calc
和 fuel_calc
。核心控制逻辑在名为 control_logic
的 Stateflow® 图中实现。控制逻辑处理单个传感器故障和发动机超速保护。如果单个传感器发生故障,运行仍会继续,但空气/燃料混合物会更浓,以实现更平稳的运行,但代价是更高的排放量。如果多个传感器出现故障,发动机就会关闭以保证安全,因为无法可靠地控制空气/燃料比。
该模型估计空气流速,并将估计值乘以所需比率的倒数以得出燃料率。
打开测试框架
已为整个模型创建了名为 fuel_rate_control_cgv
的测试框架。可以通过单击模型画布右下角的透视拉出图标并选择 fuel_rate_control_cgv
缩略图来打开框架。点击图标之前,请确保模型的顶层处于视图中。请注意,在运行测试之前,使用测试框架打开的范围是空的。或者,您可以使用以下 API 打开框架:
sltest.harness.open(mdl,'fuel_rate_control_cgv');
工厂建模
测试框架已被建模为闭环测试,并使用 Test Sequence 模块来驱动燃油速率控制器。从控制器输出计算出的 fuel_rate
用于驱动汽油发动机模型。燃料速率与 Engine Gas Dynamics
子系统中的实际空气流量相结合,以确定排气处感测到的最终混合比。从氧气传感器到 Test Sequence 模块的反馈提供了速率估计的闭环调节,以保持理想的混合比。
请注意,工厂是在测试框架中而不是主模型中建模的。主模型没有多余的杂乱信息,因此只需对模型进行最少的更改即可轻松地为 ECU 构建代码。
型号传感器故障
名为 Sequence Sensor Failures
的 Test Sequence 模块模拟各种传感器故障和发动机超速场景。它接受来自工厂的反馈并用传感器数据驱动控制器。这种建模模式允许 Test Sequence 模块控制控制器模块接收的反馈信号,并作为创作测试用例的画布。打开 Test Sequence 模块来查看建模的测试场景。
open_system('fuel_rate_control_cgv/Sequence Sensor Failures');
测试场景
对于仿真的前 10 秒,测试处于稳定模式,其中来自工厂的闭环输入传递到控制器。节气门和速度输入设置为控制器正常操作范围内的标称值。Stabilize_Engine
步骤模拟了这种状态。
然后,测试将逐步执行以下模式:
Test_Overspeed
:节气门从 30 升至 700Reset_To_Normal_Speed
:节气门减速至 400Test_EGO_Fault
:仿真故障 3 秒,然后恢复正常状态Test_Throttle_Fault
:仿真故障 3 秒,然后恢复正常状态Test_Speed_Fault
:仿真故障 3 秒,然后恢复正常状态Test_Map_Fault
:仿真故障 3 秒,然后恢复正常状态Test_Multi_Fault
:仿真 MAP 和 EGO 故障 3 秒Reset_MAP
:标准化 MAP 传感器,并仿真 EGO 故障 3 秒Reset_To_Normal
:终止测试
测试评估
Test Sequence 模块 Assess Controller
验证由 Sequence Sensor Failures
模块建模的各种测试用例的控制器输出。建模评估如下:
断言前 4.8 秒加油模式处于
Warmup
模式断言当实际速度超过 628 时,加油模式切换到
Overspeed
模式当多个传感器出现故障时,断言加油模式不处于
Single_Failure
模式。
open_system('fuel_rate_control_cgv/Assess Controller');
运行仿真
通过单击框架条中的“播放”来仿真测试框架,并观测范围内的 fuel_rate 和空燃比信号。或者,运行以下命令:sim('fuel_rate_control_cgv')
请注意,仿真期间没有触发任何断言,这表明在 Assess Controller
中建模的所有评估都通过了。
在测试管理器中配置等效性测试
作为控制器系统代码生成验证(CGV) 的一部分,重要的是断言控制器的功能行为在普通和软件在环(SIL)仿真模式下是相同的。测试管理器用于执行此验证。
使用函数 sltestmgr
打开测试管理器,并使用函数 sltest.testmanager.TestFile('sltestFuelRateControlComparisonTestSuite.mldatx')
加载示例测试文件
测试用例建模
等效性测试已在测试管理器中配置,以便在普通和 SIL 模式下仿真控制器,并比较这两次运行之间的数值结果。通过单击测试浏览器中的测试层次结构的不同节点来探索测试用例的结构体。
运行测试用例
使用函数 sltest.testmanager.run
在测试管理器中运行测试。
或者,在测试管理器中,选择测试浏览器窗格中的 CGV Test1
节点,然后点击工具条中的运行。通过/失败结果可在结果和工件窗格中查看。
创建报告
然后可以生成报告来查看等效性测试的结果。使用以下命令生成报告。您还可以在创建报告后使用 API 并将 LaunchReport
选项设置为 true
来启动报告。
sltest.testmanager.report(cgvresult,'cgvresult.zip','IncludeTestResults',int32(0));
close_system(mdl, 0);
clear mdl;