exponenta event banner

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

В этом примере показано, как настроить S-функцию, созданную с помощью средства кода предыдущей версии, на совместимость с покрытием. Инструмент покрытия модели поддерживает S-функции, которые:

  • Сгенерировано с помощью инструмента «Устаревший код», с def.Options.supportCoverage установить в значение true,

  • Сгенерировано с помощью SFunterBuilder, с включенной поддержкой покрытия, выбранной на вкладке «Сведения о построении» диалогового окна SFunterBuilder, или

  • Скомпилирован с 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'};

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

def.Options.supportCoverage = true;

Создание и компиляция S-функции с помощью legacy_code функция:

legacy_code('generate_for_sim', def);
### Start Compiling sldemo_sfun_counterbus
mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 -c /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/counterbus.c -outdir /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/tp786a8d90_ef55_4d26_afc1_30ac77bbc943.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785/counterbus.o -L/mathworks/devel/bat/BR2021ad/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldemo_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 -c /tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464/counterbus.c -outdir /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex71096464 /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/sldemo_sfun_counterbus.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/tpbc5c223c_ef2b_492d_920f_4b0308376c2a.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp438bf0f9_a744_4c20_a329_0aa6dadb7a90/tpb8601e3c_deec_4336_9def_b12a978f7849.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0f052955_9f8e_42d9_86e4_5667cf6e9785/counterbus.o -L/mathworks/devel/bat/BR2021ad/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-Functions, выберите C/C + + S-Functions на панели Coverage диалогового окна Configuration Parameters. Можно также задать параметр с помощью командной строки:

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

Выполнение моделирования и создание отчета о покрытии

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

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

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

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

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

     3     4

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

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

    75

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