主要内容

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

使用 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 函数初始化框架并创建映射变量的实例,设置测试以记录 SineCosineand 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

另请参阅

| | | | | |

主题

外部网站