使用 Simulink 模型仿真作为测试平台创建测试
此示例展示了如何使用符合 ASAM® XIL 标准的 Simulink ® Test™ 支持包来开发使用 Simulink 模型仿真作为测试平台的测试。该示例配置了一个在正常模式下模拟的 Simulink 模型作为测试平台,并创建一个模拟模型的测试,记录数据,然后将记录的数据与预期数据进行比较,以确认结果在可接受的范围内。
要运行此示例,您必须安装 ASAM XIL 标准的 Simulink Test 支持包。有关更多信息,请参阅安装并设置 Simulink XIL 标准的 ASAM Test 支持包。然后,您可以使用打开 > 打开 MATLAB-Based Simulink Test (.m)将文件加载到测试管理器中并运行测试。或者,您可以在 MATLAB 命令行运行示例文件,但不能将数据推送到测试管理器。
ASAMXILSimulinkSimExampleTest.m
文件定义了 SimulinkModelTestPoint
函数,该函数将模型 ASAMXILSimulinkSim
配置为测试平台。函数创建一个 Framework
对象,然后使用sltest.xil.testbench.createMAPortConfigFile
生成模型访问端口配置文件。然后,该函数添加一个模型访问端口,该端口指定生成的配置文件并将测试变量映射到测试平台变量。有关如何配置测试平台和映射变量的更多信息,请参阅sltest.xil.framework.FrameworkConfiguration
。
testbody
函数初始化框架并创建映射变量的实例,设置测试以记录 Sine
、Cosine
、and
Result
变量,启用日志记录并模拟模型。然后,该函数停止数据采集,将仿真结果与预期结果进行比较,并将测试用例和结果推送给测试管理器。有关信号数据记录的更多信息,请参阅sltest.xil.framework.Acquisition
。
classdef ASAMXILSimulinkSimExampleTest < sltest.TestCase methods (Test) function SimulinkModelTestPoint(testCase) import sltest.xil.framework.*; portConfigFileName = fullfile(pwd, ... 'ASAMXILSimulinkSimExampleTestConfiguration.xml'); sltest.xil.testbench.createMAPortConfigFile(portConfigFileName, ... "ASAMXILSimulinkSim") frm = Framework; frm.Configuration.addModelAccessPort(... 'aPort', ... 'asamxil.v2_1', ... 'VendorName','MathWorks',... 'ProductName','Simulation Server XIL API',... 'ProductVersion','1.0.0.0',... 'PortConfigFile',portConfigFileName); frm.Configuration.addTestVariableMapping('Sine', ... 'aPort','ASAMXILSimulinkSim/Sine wave:1'); frm.Configuration.addTestVariableMapping('Cosine',['' ... 'aPort'],'ASAMXILSimulinkSim/Cosine wave:1'); frm.Configuration.addTestVariableMapping('Result', ... 'aPort','ASAMXILSimulinkSim/Product:1'); frm.Configuration.addTestVariableMapping('SineFreq', ... 'aPort','SineFrequency'); frm.Configuration.addTestVariableMapping('CosineFreq', ... 'aPort','CosineFrequency'); % Beyond this point the configuration is done and % the test is generic with no test bench specifics % Call the generic test body testBody(testCase,frm); end end methods (Access = 'private') function testBody(testCase,frm) frm.init; Sine = frm.createVariable('Sine'); Cosine = frm.createVariable('Cosine'); Result = frm.createVariable('Result'); SineFreq = frm.createVariable('SineFreq'); CosineFreq = frm.createVariable('CosineFreq'); sineFrequency = sqrt(8); cosineFrequency = sqrt(6); SineFreq.write(sineFrequency); CosineFreq.write(cosineFrequency); frm.Acquisition.setupWithVariables([Sine,Cosine,Result]); frm.Acquisition.start; frm.start; frm.waitForSimulationComplete; frm.stop; fetchedResult = frm.Acquisition.fetch; vals = fetchedResult.find('Result').Values; time = vals.Time; data = vals.Data; expectedData = sin(time*sineFrequency).*cos(time*cosineFrequency); import matlab.unittest.constraints.IsEqualTo import matlab.unittest.constraints.AbsoluteTolerance testCase.verifyThat(data,IsEqualTo(expectedData, ... 'Within', AbsoluteTolerance(1.0e-12))) frm.pushDataToSimulinkTestManager(testCase,fetchedResult); end end end
另请参阅
sltest.xil.framework.Framework
| sltest.xil.framework.FrameworkConfiguration
| sltest.xil.framework.Acquisition
| sltest.xil.framework.Stimulation
| sltest.xil.framework.TestVariable
| sltest.TestCase
| sltest.xil.testbench.createMAPortConfigFile