В этом примере показано, как скомпилировать S-функцию, чтобы быть совместимым с Simulink® Design Verifier™ для генерации теста. SLDV поддерживает S-функции, которые являются:
Сгенерированный с Legacy Code Tool, с def.Options.supportCoverageAndDesignVerifier
установите на true
,
Сгенерированный с SFunctionBuilder, с Включают поддержку выбранного On Верификатора Проекта вкладки Build Info диалогового окна SFunctionBuilder, или
Скомпилированный с функцией slcovmex, с опцией -sldv
переданный.
Рукописная S-функция найдена в файле sldvexSFunctionHandlingSFcn.c, и пользовательский исходный код для интерполяционной таблицы найден в файле sldvexSFunctionHandlingSource.c. Вызовите функцию slcovmex, чтобы скомпилировать S-функцию C-MEX и сделать его совместимым с SLDV.
slcovmex('-sldv', ... '-output', 'sldvexSFunctionHandlingSFcn',... ['-I', fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src')], ... fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src', 'sldvexSFunctionHandlingSource.c'),... fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src', 'sldvexSFunctionHandlingSFcn.c') ... )
mex -I/mathworks/devel/bat/BR2019bd/build/matlab/toolbox/sldv/sldvdemos/src /tmp/BR2019bd_1170825_64229/publish_examples1/tpaefc2c38_d9f1_44b0_9dbb_e03f63fddb5d/tpc7d4cc64_020f_439c_8be7_3ede21dd8076.c /tmp/BR2019bd_1170825_64229/publish_examples1/tpaefc2c38_d9f1_44b0_9dbb_e03f63fddb5d/tpa168e282_a7ed_486e_b284_3f42bf5412b1.c -L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully. mex -I/mathworks/devel/bat/BR2019bd/build/matlab/toolbox/sldv/sldvdemos/src /mathworks/devel/bat/BR2019bd/build/matlab/toolbox/sldv/sldvdemos/src/sldvexSFunctionHandlingSource.c /tmp/BR2019bd_1170825_64229/publish_examples1/tpaefc2c38_d9f1_44b0_9dbb_e03f63fddb5d/sldvexSFunctionHandlingSFcn.c /tmp/BR2019bd_1170825_64229/publish_examples1/tpaefc2c38_d9f1_44b0_9dbb_e03f63fddb5d/tp7ebd0934_c97f_4c39_b716_39eb45e33919.c /tmp/BR2019bd_1170825_64229/publish_examples1/tpaefc2c38_d9f1_44b0_9dbb_e03f63fddb5d/tpbc7f7ce5_b11b_447c_bc66_dac28ede3de8.c -L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully.
Модель в качестве примера sldvexSFunctionHandlingExample пример содержит рукописную S-функцию, которая реализует алгоритм интерполяционной таблицы. Блок s-function возвращает интерполированное значение в первом выходном порту и возвращает состояние интерполяции во втором выходном порту. Второй выходной порт возвращает значение -1
если более низкое насыщение происходит, 1
если верхнее насыщение происходит, и 0
в противном случае. Откройте sldvexSFunctionHandlingExample модель и сконфигурируйте аналитические опции путем включения поддержки S-функции генерации тестов. При выполнении анализа Simulink® Design Verifier™ возвращает тестовый набор, который удовлетворяет всем целям покрытия.
open_system('sldvexSFunctionHandlingExample'); opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'Condition'; opts.SaveHarnessModel = 'off'; opts.SaveReport = 'off'; opts.SFcnSupport = 'on'; opts.MaxProcessTime = 2*opts.MaxProcessTime; [status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts);
Checking compatibility for test generation: model 'sldvexSFunctionHandlingExample' Compiling model...done Building model representation...done 'sldvexSFunctionHandlingExample' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 27-Jul-2019 01:30:19... ............. Completed normally. Generating output files: Results generation completed. Data file: /tmp/BR2019bd_1170825_64229/publish_examples1/tp0b26f79a/sldv_output/sldvexSFunctionHandlingExample/sldvexSFunctionHandlingExample_sldvdata.mat
sldvruntest
функция проверяет, что тестовый набор достигает полного покрытия модели. cvhtml
функция представляет отчет покрытия, который указывает, что 100%-е покрытие Условия достигается со сгенерированными тестовыми векторами.
[~, finalCov] = sldvruntest('sldvexSFunctionHandlingExample', fileNames.DataFile, [], true); cvhtml('Final Coverage', finalCov);
Чтобы завершить демонстрацию, закройте все модели.
close_system('sldvexSFunctionHandlingExample', 0);