Улучшите покрытие модели более старых моделей релиза

Чтобы улучшить покрытие модели модели, которую вы создали в более старом релизе, используйте рабочий процесс генерации тестов или рабочий процесс генерации кода. Можно усилить последние возможности релиза Simulink® Design Verifier™ сгенерировать тесты для Модельно-ориентированного проектирования.

Эти рабочие процессы улучшают покрытие модели.

Улучшите покрытие модели путем генерации тестов для более старой модели релиза

Этот пример показывает, как обновить покрытие модели модели, созданной в R2015b. Вы используете генерацию тестов для поддерживаемых S-функций, доступных в последнем релизе.

Модель в качестве примера sldvexSFunctionHandlingExample содержит рукописную S-функцию, которая реализует алгоритм интерполяционной таблицы. Рукописная S-функция находится в файле sldvexSFunctionHandlingSFcn.c. Пользовательский исходный код для интерполяционной таблицы находится в файле sldvexSFunctionHandlingSource.c.

  1. В MATLAB R2015b, открытом sldvexSFunctionHandlingExample модель.

    open_system('sldvexSFunctionHandlingExample');
    

  2. Чтобы моделировать модель и сгенерировать отчет покрытия, в Редакторе Simulink, щелкают по кнопке Run. Результаты покрытия Вида на море в Модели (Simulink Coverage).

    После симуляции отчет покрытия указывает, что полный охват не достигается для модели sldvexSFunctionHandlingExample.

  3. В MATLAB R2018b, открытом sldvexSFunctionHandlingExample модель. Модель sldvexSFunctionHandlingExample в качестве примера доступна в R2015b и R2018b, таким образом, можно использовать ту же модель для рабочего процесса генерации тестов.

    open_system('sldvexSFunctionHandlingExample');

    Чтобы избежать любых потенциальных изменений в модели, создайте копию более старой модели релиза в текущей рабочей папке, и затем откройте модель в R2018b. Чтобы обновить и улучшить модели, которые вы используете в текущем релизе, можно использовать upgradeadvisor.

  4. Скомпилируйте S-функцию, чтобы быть совместимыми с Simulink Design Verifier для генерации теста при помощи slcovmex. Для получения дополнительной информации смотрите S-функцию Конфигурирования для Генерации Теста.

    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'));
  5. Создайте опцию opts для модели sldvexSFunctionHandlingExample.

    opts = sldvoptions;
    opts.Mode = 'TestGeneration';
    opts.ModelCoverageObjectives = 'Condition';
    opts.SaveHarnessModel = 'off';
    opts.SaveReport = 'off';
    opts.SFcnSupport = 'on';
    
  6. Чтобы сгенерировать тесты при помощи заданных опций opts, используйте sldvrun, чтобы анализировать модель.

    [status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts);

    После анализа программное обеспечение генерирует файл данных Simulink Design Verifier и хранит его в месте по умолчанию <current_folder>\sldv_output\sldvexSFunctionHandlingExample_sldvdata.mat

  7. В R2015b, открытом модель.

    open_system('sldvexSFunctionHandlingExample');
  8. Загрузите файл sldvData, созданный в R2018b.

    1. Выберите Analysis> Design Verifier> Results> Load и обзор к файлу MAT sldvData, сгенерированному в R2018b.

    2. Нажать ОК.

  9. В окне Simulink Design Verifier Results Summary нажмите Simulate tests and produce a model coverage report. Отчет указывает, что 100%-е покрытие достигается для модели sldvexSFunctionHandlingExample.

Для получения дополнительной информации смотрите Файлы данных Simulink Design Verifier и Моделируйте Тесты и Представьте Отчет Покрытия модели.

Улучшите покрытие модели при помощи сгенерированного кода от более старого релиза

Этот пример показывает, как обновить покрытие модели модели, созданной в R2015b при помощи рабочего процесса генерации кода.

Для этого рабочего процесса у вас должны быть Simulink Coder™ и Embedded Coder®.

Модель в качестве примера sldvCrossReleaseExample содержит рукописную S-функцию, которая реализует реляционный граничный алгоритм. Рукописная S-функция находится в файле rel_sfcn.c. Пользовательский исходный код находится в файле rel_comp.c.

Чтобы встроить S-функцию, используйте rel_sfcn.tlc файл. Для получения дополнительной информации смотрите Встроенные S-функции с TLC (Embedded Coder).

  1. Скопируйте модель в качестве примера sldvCrossReleaseExample и S-файлы-функции, rel_sfcn.c, rel_comp.c, и rel_sfcn.tlc в текущей рабочей папке. Скопируйте заголовочные файлы rel_comp.h в текущую рабочую папку. Вы используете модель в качестве примера и вспомогательные файлы в R2015b для Интеграции кода перекрестного Релиза (Embedded Coder) рабочий процесс.

    Примечание

    Модель sldvCrossReleaseExample в качестве примера создается в R2018b, например, цель. Чтобы выполнить рабочий процесс генерации кода при помощи модели в качестве примера, экспортируйте модель sldvCrossReleaseExample в 15b. Сохраните модель как sldvCrossReleaseExample_15b в текущей рабочей папке. Для получения дополнительной информации смотрите Экспорт Модель к Предыдущей Версии Simulink (Simulink).

  2. В MATLAB R2015b, открытой модели sldvCrossReleaseExample_15b от текущей рабочей папки.

    open_system('sldvCrossReleaseExample_15b');
    

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

    def = legacy_code('initialize');
       def.SFunctionName = 'rel_sfcn';
       def.OutputFcnSpec = 'uint8 y1 = relational_bound(uint8 u1)';
       def.HeaderFiles = {'rel_comp.h'};
       def.SourceFiles = {'rel_comp.c'};
       def.IncPaths = {pwd};
       def.SrcPaths = {pwd};
       def.Options.supportCoverageAndDesignVerifier = true;
       legacy_code('sfcn_cmex_generate', def);
       legacy_code('compile', def);
  4. Чтобы моделировать модель и сгенерировать отчет покрытия, в Редакторе Simulink, нажимают кнопку Run. Результаты покрытия Вида на море в Модели (Simulink Coverage).

    После симуляции отчет покрытия указывает, что 50%-е покрытие достигается для модели sldvCrossReleaseExample_15b.

  5. Чтобы Сгенерировать Код Используя Embedded Coder® (Embedded Coder), в Редакторе Simulink, нажимают кнопку Build Model.

    Модель предварительно сконфигурирована с этими настройками генерации кода.

    set_param(sldvCrossReleaseExample_15b,'SystemTargetFile','ert.tlc');
    set_param(sldvCrossReleaseExample_15b,'PortableWordSizes','on');
    set_param(sldvCrossReleaseExample_15b,'SupportNonFinite','off');
    set_param(sldvCrossReleaseExample_15b,'GenCodeOnly','on');
    set_param(sldvCrossReleaseExample_15b,'SolverMode','SingleTasking');
    set_param(sldvCrossReleaseExample_15b,'ProdEqTarget','on');
    

    Программное обеспечение генерирует код С для модели и сохранило файлы в месте папки по умолчанию <current_folder>\sldvCrossReleaseExample_15b_ert_rtw.

  6. Сохраните конфигурацию модели модели sldvCrossReleaseExample_15b к MAT-файлу. Этот ConfigSet используется в R2018b, чтобы установить конфигурацию модели модели в R2018b.

    config_set = getActiveConfigSet('sldvCrossReleaseExample_15b');
    copiedConfig = config_set.copy;
    save('copiedConfig.mat','copiedConfig');
            
  7. В MATLAB R2018b импортируйте компоненты, экспортируемые из R2015b.

    1. Прежде чем вы импортируете компоненты в текущем релизе, переименуйте или удалите файл rtwtypes.h, доступный в папке <current_folder>\sldvCrossReleaseExample_15b_ert_rtw. Во время импорта перекрестного релиза MATLAB пытается регенерировать файл с тем же именем. Если вы не удаляете или переименовываете файл rtwtypes.h, MATLAB отображает ошибку.

    2. Импортируйте сгенерированный код компонента из R2015b как программное обеспечение в блоке (SIL) цикла.

       crossReleaseImport('sldvCrossReleaseExample_15b_ert_rtw',...
      'sldvCrossReleaseExample_15b', 'SimulationMode','SIL');

      Функция crossReleaseImport создает неназванную модель, которая содержит программное обеспечение в блоке (SIL) цикла sldvCrossReleaseExample_15b_R2015b_sil.

  8. Добавьте порты Inport и Outport в блок sldvCrossReleaseExample_15b_R2015b_sil и сохраните модель как sldvCrossReleaseExample_sil_18b.

  9. Примените набор конфигурации модели, подобный модели R2015b.

    load('copiedConfig.mat');
    attachConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig, true);
    setActiveConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig.Name);
  10. Установите режим симуляции на Software-in-the-Loop (SIL). Чтобы моделировать модель, в Редакторе Simulink, нажимают кнопку Run.

  11. Чтобы Сгенерировать Тесты для Сгенерированного кода Embedded Coder, выберите Analysis> Design Verifier> Generate Tests> Code Generated as Top Model.

    После анализа Simulink Design Verifier программное обеспечение генерирует тесты и сохраняет sldvData в папке в местоположении по умолчанию <current_folder>\sldv_output\sldvCrossReleaseExample_sil_18b.

  12. В R2015b, открытом модель.

    open_system('sldvCrossReleaseExample_15b');
  13. Обновите поле sldvData.ModelInfomation.Name в sldvData то же самое как имя модели в более старом релизе. Например, sldvCrossReleaseExample_15b.slx.

  14. Создайте модель тестовой обвязки при помощи sldvData, созданного в R2018b. Эти данные состоят из тестов, сгенерированных от сгенерированного кода Embedded Coder. В dataFile введите местоположение sldvData, сгенерированного для модели sldvCrossReleaseExample_sil_18b.

    sldvmakeharness('sldvCrossReleaseExample_15b.slx','dataFile')

  15. Чтобы моделировать модель при помощи всех тестов, нажмите кнопку Run all .

    Программное обеспечение моделирует все тесты и генерирует отчет покрытия. Отчет указывает, что 100%-е покрытие достигается для модели sldvCrossReleaseExample_15b.

Похожие темы