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

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

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

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

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

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

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

Открытый slcoverage_lct_bus

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

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

load_system('slcoverage_lct_bus');
open_system('slcoverage_lct_bus/TestCounter');
load slcoverage_lct_data.mat

def = legacy_code('initialize');
def.SFunctionName = 'slcoverage_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'};

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

def.Options.supportCoverage = true;

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

legacy_code('generate_for_sim', def);
### Start Compiling slcoverage_sfun_counterbus
mex -I/tmp/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex71096464 -c /tmp/BR2021bd_1724986_151598/publish_examples1/tp38bc3b29_2d30_448e_97f1_ae409b110d27/counterbus.c -outdir /tmp/BR2021bd_1724986_151598/publish_examples1/tpb2bbd05a_bee7_4208_8bf4_463d8f3b1190
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex71096464 /tmp/BR2021bd_1724986_151598/publish_examples1/tp38bc3b29_2d30_448e_97f1_ae409b110d27/tpf785f966_94ef_4bdd_a25f_471ed8efbf4c.c /tmp/BR2021bd_1724986_151598/publish_examples1/tpb2bbd05a_bee7_4208_8bf4_463d8f3b1190/counterbus.o -L/mathworks/devel/bat/BR2021bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex71096464 -c /tmp/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex71096464/counterbus.c -outdir /tmp/BR2021bd_1724986_151598/publish_examples1/tpb2bbd05a_bee7_4208_8bf4_463d8f3b1190
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex71096464 /tmp/BR2021bd_1724986_151598/publish_examples1/tp38bc3b29_2d30_448e_97f1_ae409b110d27/slcoverage_sfun_counterbus.c /tmp/BR2021bd_1724986_151598/publish_examples1/tp38bc3b29_2d30_448e_97f1_ae409b110d27/tp6179b91c_0393_4db9_90f5_289f67d028ad.c /tmp/BR2021bd_1724986_151598/publish_examples1/tp38bc3b29_2d30_448e_97f1_ae409b110d27/tpc10635c1_533b_4ffe_9a3b_7b130734c922.c /tmp/BR2021bd_1724986_151598/publish_examples1/tpb2bbd05a_bee7_4208_8bf4_463d8f3b1190/counterbus.o -L/mathworks/devel/bat/BR2021bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
### Finish Compiling slcoverage_sfun_counterbus
### Exit

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

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

set_param('slcoverage_lct_bus',...
          'CovMetricStructuralLevel', 'MCDC',...
          'RecordCoverage', 'on',...
          'CovSFcnEnable', 'on',...
          'CovSaveSingleToWorkspaceVar','on'...
          );

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

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

sim('slcoverage_lct_bus', 'StopTime', '20');
cvhtml('coverageResults', covdata);

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

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

cov = decisioninfo(covdata, 'slcoverage_lct_bus/TestCounter/slcoverage_sfun_counterbus')
cov =

     3     4

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

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

    75

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