Чтобы улучшить покрытие модели модели, которую вы создали в более старом релизе, используйте рабочий процесс генерации тестов или рабочий процесс генерации кода. Вы можете использовать новейшие возможности релиз® Разработайте Verifier™, чтобы сгенерировать тесты для основанного на модели проекта.
Эти рабочие процессы улучшают покрытие модели.
В этом примере показано, как обновить покрытие модели, созданной в R2015b. Вы используете генерацию тестов для поддерживаемых S-функций, доступных в последнем релизе.
Пример модели sldvexSFunctionHandlingExample содержит рукописную S-функцию, которая реализует алгоритм интерполяционной таблицы. Рукописная функция S-Function находится в файле sldvex SF unction Handling SF cn.c. Исходный код пользователя для интерполяционной таблицы находится в файле sldvexSFunctionHandlingSource.c.
В R2015b MATLAB откройте модель sldvexSFunctionHandlingExample.
open_system('sldvexSFunctionHandlingExample');
Чтобы симулировать модель и сгенерировать отчет о покрытии, в редакторе Simulink, нажмите кнопку Run. Смотрите Просмотр результатов покрытия в модели ( Simulink Coverage).
После симуляции отчет о покрытии указывает, что полное покрытие не достигается для sldvexSFunctionHandlingExample
модель.
В MATLAB R2018b или более поздних релизах откройте модель sldvexSFunctionHandlingExample. Пример модели sldvexSFunctionHandlingExample
доступен в R2015b и более поздних релизах, поэтому можно использовать ту же модель для рабочего процесса генерации тестов.
open_system('sldvexSFunctionHandlingExample');
Чтобы избежать любых потенциальных изменений в модели, создайте копию старой модели выпуска в текущей рабочей папке, а затем откройте модель в R2018b или более поздних релизах. Чтобы обновить и улучшить модели, которые вы используете в текущем релизе, можно использовать upgradeadvisor
.
Скомпилируйте S-функцию, чтобы она была совместима с Simulink Design Verifier для генерации тестов при помощи slcovmex
(Покрытие Simulink). Для получения дополнительной информации смотрите Конфигурирование 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'));
Создайте opts
опция для sldvexSFunctionHandlingExample
модель.
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'Condition'; opts.SaveHarnessModel = 'off'; opts.SaveReport = 'off'; opts.SFcnSupport = 'on';
Чтобы сгенерировать тесты при помощи заданной opts
опции, использование sldvrun
для анализа модели.
[status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts);
После анализа программное обеспечение генерирует файл данных Simulink Design Verifier и сохраняет его в расположении по умолчанию <current_folder>\sldv_output\sldvexSFunctionHandlingExample_sldvdata.mat
В R2015b откройте модель.
open_system('sldvexSFunctionHandlingExample');
Загрузите sldvData
файл, созданный в R2018b или более поздних релизах.
На вкладке Design Verifier нажмите Load Earlier Results и перейдите к sldvData
MAT-файл, сгенерированный в R2018b или более поздних релизах.
Нажмите «Открыть».
В окне Simulink Design Verifier Сводные Данные нажмите Simulate tests and produce a model coverage report. Отчет указывает, что 100% охват достигается для sldvexSFunctionHandlingExample
модель.
Для получения дополнительной информации смотрите Файлы Simulink Design Verifier данных и Моделируйте Тесты и Создавайте Отчет о Покрытии Модели.
В этом примере показано, как обновить покрытие модели, созданной в R2015b, с помощью рабочего процесса генерации кода.
Для этого рабочего процесса вы должны иметь Simulink Coder™ и Embedded Coder®.
Пример модели sldvCrossReleaseExample содержит рукописную S-Функцию, которая реализует алгоритм реляционных границ. Рукописная функция S-Function находится в файле rel_sfcn.c. Исходный код пользователя находится в файле rel_comp.c.
Для ввода S-функции используйте файл rel_sfcn.tlc. Для получения дополнительной информации смотрите Inline S-Functions with TLC (Embedded Coder).
Скопируйте примеры sldvCrossReleaseExample и S-Function, rel_sfcn.c, rel_comp.c и rel_sfcn.tlc в текущую рабочую папку. Скопируйте заголовочные файлы, rel_comp.h в текущую рабочую папку. Вы используете модель примера и вспомогательные файлы в R2015b для рабочего процесса Cross-Release Code Integration (Embedded Coder).
Примечание
Пример модели sldvCrossReleaseExample
создается, например, по назначению. Чтобы выполнить рабочий процесс генерации кода с помощью модели примера, экспортируйте sldvCrossReleaseExample
модель - 15b. Сохраните модель как sldvCrossReleaseExample_15b
в текущей рабочей папке. Для получения дополнительной информации смотрите Экспорт модели в предыдущую версию Simulink.
В R2015b MATLAB откройте sldvCrossReleaseExample_15b
модель из текущей рабочей папки.
open_system('sldvCrossReleaseExample_15b');
Скомпилируйте 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);
Чтобы симулировать модель и сгенерировать отчет о покрытии, в редакторе Simulink Editor нажмите кнопку Run. Смотрите Просмотр результатов покрытия в модели ( Simulink Coverage).
После симуляции отчет о покрытии указывает, что 50% покрытия достигается для sldvCrossReleaseExample_15b
модель.
Чтобы сгенерировать код с помощью Embedded Coder, на вкладке Apps, выберите Embedded Coder. Для получения дополнительной информации смотрите Сгенерировать код используя Embedded Coder ® (Embedded Coder).
На вкладке C Code нажмите Generate Code.
Модель предварительно сконфигурирована с этими настройками генерации кода.
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
.
Сохраните конфигурацию модели модели sldvCrossReleaseExample_15b
в MAT-файл. Этот ConfigSet
используется для установки конфигурации модели модели в R2018b и более поздних релизах.
config_set = getActiveConfigSet('sldvCrossReleaseExample_15b'); copiedConfig = config_set.copy; save('copiedConfig.mat','copiedConfig');
В MATLAB R2018b или более поздних релизах импортируйте компоненты, экспортированные из R2015b.
Прежде чем импортировать компоненты в текущем релизе, переименуйте или удалите rtwtypes.h
файл, доступный в папке <current_folder>\sldvCrossReleaseExample_15b_ert_rtw
. Во время импорта cross-release MATLAB пытается перегенерировать файл с таким же именем. Если вы не удаляете или не переименовываете файл rtwtypes.h
MATLAB отображает ошибку.
Импортируйте сгенерированный код компонента из R2015b как блок SIL.
crossReleaseImport('sldvCrossReleaseExample_15b_ert_rtw',... 'sldvCrossReleaseExample_15b', 'SimulationMode','SIL');
crossReleaseImport
функция создает модель без названия, которая содержит блок «цикл» (SIL) sldvCrossReleaseExample_15b_R2015b_sil
.
Добавьте Inport и Outport порты к sldvCrossReleaseExample_15b_R2015b_sil
блокировать и сохранить модель как sldvCrossReleaseExample_sil_18b
.
Примените набор конфигурации модели, подобный R2015b модели.
load('copiedConfig.mat'); attachConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig, true); setActiveConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig.Name);
Установите режим симуляции равным Software-in-the-Loop (SIL)
. Чтобы симулировать модель, в редакторе Simulink Editor нажмите кнопку Run.
Чтобы сгенерировать тесты для кода, сгенерированного Embedded Coder, на вкладке Design Verifier, выберите Target > Code Generated as Top Model и нажмите Generate Tests. Для получения дополнительной информации смотрите Сгенерировать Тесты для Embedded Coder Сгенерированного кода.
После анализа Simulink Design Verifier программное обеспечение генерирует тесты и сохраняет sldvData
в папке по умолчанию <current_folder>\sldv_output\sldvCrossReleaseExample_sil_18b
.
В R2015b откройте модель.
open_system('sldvCrossReleaseExample_15b');
Обновление sldvData.ModelInfomation.Name
поле в sldvData
то же, что и имя модели в более раннем релизе. Для примера, sldvCrossReleaseExample_15b.slx
.
Создайте модель тестовой обвязки при помощи sldvData
создан в R2018b или более поздних релизах. Эти данные состоят из тестов, сгенерированных из кода, сгенерированного Embedded Coder. В dataFile
, введите местоположение sldvData
сгенерирован для sldvCrossReleaseExample_sil_18b
модель.
sldvmakeharness('sldvCrossReleaseExample_15b.slx','dataFile')
Чтобы симулировать модель при помощи всех тестов, нажмите кнопку Run all .
Программа моделирует все тесты и генерирует отчет о покрытии. Отчет указывает, что 100% охват достигается для sldvCrossReleaseExample_15b
модель.