Покрытие для S-функций

Этот пример показывает, как сконфигурировать S-функцию, сгенерированную с Legacy Code Tool, чтобы быть совместимым с покрытием. Инструмент model coverage поддерживает S-функции, которые являются:

  • Сгенерированный с Legacy Code Tool, с набором def.Options.supportCoverage к true,

  • Сгенерированный с SFunctionBuilder, с Включают поддержку покрытия, выбранного на вкладке Build Info диалогового окна SFunctionBuilder, или

  • Скомпилированный с функцией slcovmex.

Открытая модель в качестве примера

Модель в качестве примера sldemo_lct_bus содержит S-функцию, сгенерированную с Legacy Code Tool. S-функция имеет построения, которые получают решение, условие и покрытие MCDC.

Открытый sldemo_lct_bus

Сконфигурируйте S-функцию, чтобы быть совместимыми с покрытием модели

Устаревший исходный код в файлах counterbus.h и counterbus.c реализуют тот же алгоритм как в sldemo_lct_bus/slCounter. Структура данных Legacy Code Tool задана можно следующим образом:

load_system('sldemo_lct_bus');
open_system('sldemo_lct_bus/TestCounter');

def = legacy_code('initialize');
def.SFunctionName = 'sldemo_sfun_counterbus';
def.OutputFcnSpec = 'void counterbusFcn(COUNTERBUS u1[1], int32 u2, COUNTERBUS y1[1], int32 y2[1])';
def.HeaderFiles   = {'counterbus.h'};
def.SourceFiles   = {'counterbus.c'};
def.IncPaths      = {'sldemo_lct_src'};
def.SrcPaths      = {'sldemo_lct_src'};

Чтобы сделать это S-Function совместимый с покрытием модели, включите следующую опцию:

def.Options.supportCoverage = true;

Сгенерируйте и скомпилируйте S-функцию с помощью функции legacy_code:

legacy_code('generate_for_sim', def);
### Start Compiling sldemo_sfun_counterbus
mex -I/mathworks/devel/bat/BR2019ad/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019ad_1035872_198992/publish_examples0/tpde1c4c02 -c /tmp/BR2019ad_1035872_198992/publish_examples0/tpe084091d_4416_48ce_b33c_2c63d5c5e746/counterbus.c -outdir /tmp/BR2019ad_1035872_198992/publish_examples0/tp56ed8bea_7eb5_45b6_9f95_0221577a69de
Building with 'gcc'.
MEX completed successfully.
mex -I/mathworks/devel/bat/BR2019ad/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019ad_1035872_198992/publish_examples0/tpde1c4c02 /tmp/BR2019ad_1035872_198992/publish_examples0/tpe084091d_4416_48ce_b33c_2c63d5c5e746/tp87b43a98_c7b8_456a_bf06_508effb8ea57.c /tmp/BR2019ad_1035872_198992/publish_examples0/tp56ed8bea_7eb5_45b6_9f95_0221577a69de/counterbus.o -L/mathworks/devel/bat/BR2019ad/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
mex -I/mathworks/devel/bat/BR2019ad/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019ad_1035872_198992/publish_examples0/tpde1c4c02 -c /mathworks/devel/bat/BR2019ad/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src/counterbus.c -outdir /tmp/BR2019ad_1035872_198992/publish_examples0/tp56ed8bea_7eb5_45b6_9f95_0221577a69de
Building with 'gcc'.
MEX completed successfully.
mex -I/mathworks/devel/bat/BR2019ad/build/matlab/toolbox/simulink/simdemos/simfeatures/sldemo_lct_src -I/tmp/BR2019ad_1035872_198992/publish_examples0/tpde1c4c02 /tmp/BR2019ad_1035872_198992/publish_examples0/tpe084091d_4416_48ce_b33c_2c63d5c5e746/sldemo_sfun_counterbus.c /tmp/BR2019ad_1035872_198992/publish_examples0/tpe084091d_4416_48ce_b33c_2c63d5c5e746/tp6e154418_fe63_4701_be33_96895b9f6fe9.c /tmp/BR2019ad_1035872_198992/publish_examples0/tpe084091d_4416_48ce_b33c_2c63d5c5e746/tpdfdaa61c_39b6_40d7_9c12_fd4595668b2a.c /tmp/BR2019ad_1035872_198992/publish_examples0/tp56ed8bea_7eb5_45b6_9f95_0221577a69de/counterbus.o -L/mathworks/devel/bat/BR2019ad/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
### Finish Compiling sldemo_sfun_counterbus
### Exit

Включите покрытие S-функции

Чтобы включить набор покрытия для S-функций, выберите C/C ++ S-Functions в панели Покрытия диалогового окна Configurations Parameters. Также установите опцию через командную строку:

set_param('sldemo_lct_bus',...
          'CovMetricSettings', 'dcme',...
          'RecordCoverage', 'on',...
          'CovHtmlReporting', 'on',...
          'CovSFcnEnable', 'on'...
          );

Запустите симуляцию и представьте отчет покрытия

Если вы включаете сбор данных покрытия, информация о покрытии автоматически зарегистрирована, когда вы моделируете модель. В конце симуляции инструмент model coverage производит отчет HTML информации о покрытии, которая отображена во встроенном в MATLAB® веб-браузере.

sim('sldemo_lct_bus', 'StopTime', '20');

Извлеките информацию от объектов данных покрытия

Объект cvdata может использоваться, чтобы извлечь информацию о покрытии для S-функций, точно так же, как любой другой поддерживаемый элемент модели. Например, команда decisioninfo извлекает информацию о покрытии от блока path или указателя блока. Вывод является вектором, содержащим удовлетворенные и общие результаты для одного объекта модели.

cov = decisioninfo(covdata, 'sldemo_lct_bus/TestCounter/sldemo_sfun_counterbus')
cov =

     3     4

Вы затем используете эту информацию о покрытии, чтобы вычислить процент покрытых объектов модели:

percentCov = 100 * (cov(1)/cov(2))
percentCov =

    75

Покрытие S-функции полностью совместимо с командами покрытия модели, таково как decisioninfo, conditioninfo и mcdcinfo.

Очистка

Чтобы завершить демонстрацию, закройте все модели.

close_system('sldemo_lct_bus',0)