exponenta event banner

Использование функций командной строки для поддержки изменения параметров

В этом примере показано, как использовать функции командной строки Simulink ® Design Verifier™ для создания тестовых данных, включающих различные значения параметров.

Модель контроллера с регулируемым параметром

Примером модели является простой контроллер с одним параметром. Параметр константы «control _ mode» может быть либо 1, либо 2. Для достижения полного покрытия параметр должен принимать оба значения для тестовых случаев. Значение определяет выход блока коммутатора и подсистему, которая будет работать.

open_system('sldvdemo_param_controller');

Задание значений параметров для анализа

Simulink Design Verifier не определяет значения параметров. Для создания тестов и проверки свойств инструмент использует значения параметров в начале анализа. Можно принудительно включить в инструмент изменяющиеся значения параметров, повторив анализ с различными значениями.

Первая итерация верификатора конструкции будет использовать control_mode=1.

control_mode = 1;

Simulink® Design Verifier™ Options

Функции Simulink Design Verifier используют объекты опций, созданные с помощью sldvoptions функция для управления всеми аспектами анализа и вывода.

В этом примере мы запустим Simulink Design Verifier в тестовом режиме генерации в течение максимум 300 секунд и создадим модель электрического жгута. Мы отключим генерацию отчетов.

Значения по умолчанию для остальных параметров устанавливаются правильно для создания тестов. Вы можете использовать get для отображения всех параметров и значений.

opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.MaxProcessTime = 300;
opts.SaveHarnessModel = 'on';
opts.SaveReport = 'off';
opts.HarnessModelFileName = '$ModelName$_harness.slx';

get(opts)
                               Mode: 'TestGeneration'
                     MaxProcessTime: 300
                  AutomaticStubbing: 'on'
                        UseParallel: 'off'
            DesignMinMaxConstraints: 'on'
                          OutputDir: 'sldv_output/$ModelName$'
              MakeOutputFilesUnique: 'on'
                   BlockReplacement: 'off'
          BlockReplacementRulesList: '<FactoryDefaultRules>'
      BlockReplacementModelFileName: '$ModelName$_replacement'
                         Parameters: 'off'
           ParametersConfigFileName: 'sldv_params_template.m'
                     ParameterNames: []
               ParameterConstraints: []
             ParameterUseInAnalysis: []
                ParametersUseConfig: 'off'
                      TestgenTarget: 'Model'
            ModelCoverageObjectives: 'ConditionDecision'
                     TestConditions: 'UseLocalSettings'
                     TestObjectives: 'UseLocalSettings'
                   MaxTestCaseSteps: 10000
              TestSuiteOptimization: 'Auto'
                         Assertions: 'UseLocalSettings'
                   ProofAssumptions: 'UseLocalSettings'
                ExtendExistingTests: 'off'
                   ExistingTestFile: ''
           IgnoreExistTestSatisfied: 'on'
                 IgnoreCovSatisfied: 'off'
                   CoverageDataFile: ''
                          CovFilter: 'off'
                  CovFilterFileName: ''
          IncludeRelationalBoundary: 'off'
                  RelativeTolerance: 0.0100
                  AbsoluteTolerance: 1.0000e-05
                    DetectDeadLogic: 'off'
                  DetectActiveLogic: 'off'
                  DetectOutOfBounds: 'on'
               DetectDivisionByZero: 'on'
              DetectIntegerOverflow: 'on'
                       DetectInfNaN: 'off'
                    DetectSubnormal: 'off'
                  DesignMinMaxCheck: 'off'
          DetectDSMAccessViolations: 'off'
      DetectHISMViolationsHisl_0002: 'off'
      DetectHISMViolationsHisl_0003: 'off'
      DetectHISMViolationsHisl_0004: 'off'
      DetectHISMViolationsHisl_0028: 'off'
    DetectBlockInputRangeViolations: 'off'
                    ProvingStrategy: 'Prove'
                  MaxViolationSteps: 20
                       DataFileName: '$ModelName$_sldvdata'
                 SaveExpectedOutput: 'off'
              RandomizeNoEffectData: 'off'
                   SaveHarnessModel: 'on'
               HarnessModelFileName: '$ModelName$_harness.slx'
              ModelReferenceHarness: 'off'
                      HarnessSource: 'Signal Builder'
                         SaveReport: 'off'
                    ReportPDFFormat: 'off'
                     ReportFileName: '$ModelName$_report'
              ReportIncludeGraphics: 'off'
                      DisplayReport: 'on'
                        SFcnSupport: 'on'
           CodeAnalysisExtraOptions: ''
         CodeAnalysisIgnoreVolatile: 'on'
               ReduceRationalApprox: 'on'
                     SlTestFileName: '$ModelName$_test'
                  SlTestHarnessName: '$ModelName$_sldvharness'
                SlTestHarnessSource: 'Inport'
                 StrictEnhancedMCDC: 'off'
         RebuildModelRepresentation: 'IfChangeIsDetected'

Создание тестов и сбор покрытия

sldvgencov функция создает вместе наборы тестов и покрытие модели. Все тесты, которые могут быть сгенерированы с текущими значениями параметров, будут собраны в модели кабельных трасс, и результирующее покрытие будет возвращено в объект данных покрытия.

[status,coverageData,files] = sldvgencov('sldvdemo_param_controller',opts);
Checking compatibility for test generation: model 'sldvdemo_param_controller'
Compiling model...done
Building model representation...done

'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 27-Jan-2021 09:24:41...
..............

Completed normally.

Generating output files:

    Harness model:
    /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx

Results generation completed.

    Data file:
    /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata.mat

Интеграция инициализации параметров в тестовый жгут

Созданные тестовые примеры должны выполняться с теми же значениями параметров, которые использовались во время анализа. Команда инициализации настраивает значения во время моделирования тестовых случаев. sldvharnessmerge функция включает команды инициализации в тестовые жгуты.

initCmdStr = 'control_mode=1;'
[path,modelName] = fileparts(files.HarnessModel);
sldvmergeharness(modelName,modelName,initCmdStr);
initCmdStr =

    'control_mode=1;'

Изменение параметров и создание повторяющегося теста

Изменение значений параметров позволяет создать дополнительный тест. Передача объекта данных покрытия в качестве третьего ввода в sldvgencov заставляет функцию игнорировать все цели теста покрытия модели, которые были выполнены. Мы используем данные переадресации, которые были возвращены из предыдущего вызова sldvgencov ограничить генерацию теста неудовлетворительными целями тестирования.

control_mode=2;
[status,newCov,newFiles] = sldvgencov('sldvdemo_param_controller',opts,false,coverageData);
Validating cached model representation from 27-Jan-2021 09:24:41...change detected

Checking compatibility for test generation: model 'sldvdemo_param_controller'
Compiling model...done
Building model representation...done

'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 27-Jan-2021 09:24:57...
..............

Completed normally.

Generating output files:

    Harness model:
    /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx

Results generation completed.

    Data file:
    /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata1.mat

Объединение тестовых жгутов в единую модель

Еще один звонок sldvharnessmerge объединяет тестовые данные из нового электрического жгута и его команды инициализации в существующую модель электрического жгута.

newInitCmd = 'control_mode=2;'
[path,newModelName] = fileparts(newFiles.HarnessModel);
sldvmergeharness(modelName,newModelName,newInitCmd);
newInitCmd =

    'control_mode=2;'

Выполнение тестов в модели кабельных трасс

Мы закрываем вторую модель электрического жгута, которая была создана, поскольку тестовые примеры были объединены в первую модель электрического жгута. Вы можете выполнить набор тестов, нажав кнопку «Run all» в построителе сигналов.

close_system(newModelName,0);
sldvdemo_playall(modelName);

Очистить

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

close_system(modelName,0);
close_system('sldvdemo_param_controller',0);
delete(files.HarnessModel);
delete(newFiles.HarnessModel);