测试两个仿真的等效性
在普通和 SIL 仿真模式下验证模型等效性。
此示例显示如何使用测试框架和测试管理器测试两个模型之间的等效性。一个模型在普通模式下运行,而从子系统创建的测试框架模型在软件在环(SIL) 模式下运行。
测试管理器中的等效性测试用例比较两个仿真之间的信号输出以确定等效性。在此示例中,设置了来自主模型和测试框架的信号以供记录。记录的信号用作普通模式和 SIL 模式之间的等效性准则。
配置模型
打开 sltestNormalSILEquivalenceExample
模型。
mdl = 'sltestNormalSILEquivalenceExample'; harnessOwner = 'sltestNormalSILEquivalenceExample/Controller'; open_system(mdl);
打开模型中的信号记录。
set_param(mdl,'SignalLogging','on','SignalLoggingName','SIL_signals');
标记控制器子系统的输出和输入信号以供记录。
ph_controller_in = get_param('sltestNormalSILEquivalenceExample/Controller/In1','PortHandles'); ph_controller_out = get_param('sltestNormalSILEquivalenceExample/Controller','PortHandles'); set_param(ph_controller_in.Outport(1),'DataLogging','on'); set_param(ph_controller_out.Outport(1),'DataLogging','on'); clear ph_controller_in ph_controller_out;
仿真模型并输出记录的信号。信号数据用作测试框架的输入。
out = sim(mdl);
获取记录的信号数据。
out_data = out.get('SIL_signals');
control_in1 = out_data.get(2);
创建用于 SIL 验证的测试框架。
创建框架的命令将生成代码。切换到具有写权限的目录。
origDir = pwd; dirName = tempname; mkdir(dirName); cd(dirName); cleanup = onCleanup(@()cd(origDir)); sltest.harness.create(harnessOwner,'Name','SIL_Harness','VerificationMode','SIL');
### Starting build procedure for: Controller ### Successful completion of build procedure for: Controller ### Creating SIL block ... Building with 'gcc'. MEX completed successfully. Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================================ Controller Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 32.192s
打开测试框架。
sltest.harness.open(harnessOwner,'SIL_Harness');
在测试框架中设置日志记录
打开测试框架中的信号记录。
set_param('SIL_Harness','SignalLogging','on','SignalLoggingName', 'SIL_signals');
标记等效性测试用例中使用的信号记录测试框架输出端口。
ph_harness_out = get_param('SIL_Harness/Controller','PortHandles'); set_param(ph_harness_out.Outport(1),'DataLogging','on'); clear ph_harness_out;
将仿真的输入数据分配给测试框架。
set_param('SIL_Harness','LoadExternalInput','on',... 'ExternalInput','control_in1.Values');
在测试管理器中创建等效性测试用例
打开测试管理器。
sltest.testmanager.view
创建等效性测试用例。
在测试管理器工具条中,点击新建 > 测试文件。
将测试文件指定为
testHarnessEquivalence.mldatx
。测试管理器默认使用新的测试套件和基线测试用例创建测试文件。在测试浏览器窗格中,选择基线测试用例
New Test Case 1
,然后点击删除。选择
New Test Suite 1
。从工具条中,新建 > 测试用例 > 等效性测试。
在测试浏览器窗格中,右键单击新的等效性测试用例并选择
Rename
。将新的等效性测试用例命名为SIL Equivalence Test
。
将测试框架分配给等效性测试用例仿真 1。
展开仿真 1 和在测系统。
点击使用当前模型按钮将
sltestNormalSILEquivalenceExample
分配给模型。展开测试框架。
点击刷新按钮可获取最新的可用测试框架列表。
从 Harness 菜单中选择 SIL_Harness 作为在测系统。
将 sltestNormalSILEquivalenceExample
模型指定为仿真 2。
折叠仿真 1。
展开仿真 2 和在测系统。
点击使用当前模型按钮将
sltestNormalSILEquivalenceExample
分配给模型。折叠仿真 2。
捕捉等效性准则。在等效性准则下,点击捕获以在仿真 1 中运行测试框架并识别等效性信号。
运行测试用例并查看结果
在测试浏览器窗格中选择 SIL Equivalence Test
,然后点击工具条中的运行。测试管理器切换到结果和工件窗格并运行等效性测试用例。测试用例通过,因为模型和测试框架之间的信号比较匹配。展开结果集并选择 Controller:1
选项按钮来绘制信号比较。
close_system(mdl, 0); clear mdl harnessOwner cleanup control_in1 origDir out out_data;