Если ваша модель включает экземпляры блоков из библиотеки, можно протестировать и исходный блок в библиотеке и отдельные экземпляры блока в других моделях. Можно также протестировать программное обеспечение в цикле (SIL) код, сгенерированный для допускающей повторное использование подсистемы библиотеки. Во-первых, создайте тестовые обвязки для библиотечного блока, чтобы протестировать ваш проект. Если библиотечный блок удовлетворяет ваши требования, создайте тестовые обвязки для соединенных блоков и протестируйте экземпляры подсистемы. Можно переместить тестовые обвязки от библиотеки до экземпляра и экземпляра в библиотеку.
Эта процедура обрисовывает в общих чертах рабочий процесс в качестве примера для тестирования подсистем библиотеки и соединенных подсистем.
Создайте тест и тестовую обвязку для подсистемы библиотеки.
Протестируйте подсистему библиотеки. Если это приводит ваши требования к сбою, пересмотрите проект и протестируйте снова.
Заблокируйте библиотеку, когда ваши тесты передадут.
В вашей модели создайте соединенную подсистему и сохраните тестовые обвязки библиотеки.
Сравните выход соединенного экземпляра к тому из библиотечного блока с помощью эквивалентного теста.
Создайте дополнительные тесты и тестовые обвязки для соединенного экземпляра.
Продвиньте тестовую обвязку от соединенной подсистемы до библиотеки, если вы хотите включать тестовую обвязку с соединенными подсистемами будущего.
Тестовая обвязка для подсистемы библиотеки имеет определенные свойства:
Библиотеки не компилируют, таким образом, тестовая обвязка для подсистемы библиотеки не использует скомпилированные атрибуты, такие как тип данных или частота дискретизации.
Тестовая обвязка для подсистемы библиотеки не генерирует подсистемы преобразования для вводов и выводов блока.
Тестовая обвязка подсистемы библиотеки не использует нажатие или восстанавливает операции, потому что библиотеки не используют параметры конфигурации.
Когда вы создаете соединенную подсистему из подсистемы библиотеки, тестовые обвязки копируют в соединенный экземпляр. Если вам не нужны тестовые обвязки, можно удалить их. Для получения инструкций по удалению всех тестовых обвязок из модели смотрите, Управляют Тестовыми обвязками.
Когда вы создаете тестовую обвязку для соединенной подсистемы, обвязка сопоставляет с соединенной подсистемой, не подсистемой библиотеки. Можно переместить тестовую обвязку от соединенной подсистемы до подсистемы библиотеки. Например, эта соединенная подсистема Controller
имеет три тестовых обвязки. Перемещать Requirements_Tests1
тестовая обвязка к библиотеке:
Кликните по значку обвязки на соединенной подсистеме.
Кликните по значку Harness Operations.
Выберите Move to Library.
Диалоговое окно сообщает вам, что перемещение обвязки удаляет его из соединенной подсистемы.
После подтверждения обвязка появляется с подсистемой библиотеки.
Можно применить итеративный проект и протестировать рабочий процесс к библиотекам путем тестирования библиотечного блока в тестовой обвязке и обновления компонента под тестом. Изменения в компоненте под тестом синхронизируются с библиотекой, когда вы закрываете тестовую обвязку.
Если у вас есть библиотечный блок, проект которого завершен, установите свои тестовые обвязки предотвращать изменения в компоненте под тестом. Можно установить это свойство, когда вы создаете тестовую обвязку или после создания обвязки. Смотрите Создают Тестовые обвязки и Избранные Свойства.
Проверьте допускающую повторное использование подсистему в библиотеке и в большей системе.
Этот пример демонстрирует тест, который подтверждает, что библиотечный блок соответствует короткому набору требований. После тестирования библиотечного блока вы выполняете базовый тест соединенного блока и получаете базовые результаты. Вы затем продвигаете базовую тестовую обвязку библиотеку.
Библиотечный блок управляет простой системой теплового насоса путем предоставления сигналов включения - выключения к вентилятору и компрессору, и определения режима теплового насоса (нагревание или охлаждение).
Откройте тестовый файл
Введите следующее, чтобы сохранить пути и имена файлов для примера, и открыть тестовый файл. Тестовый файл содержит тест для библиотечного блока и для экземпляра блока в модели с обратной связью.
testFile = 'sltestHeatpumpLibraryTests.mldatx'; library = 'sltestHeatpumpLibraryExample'; system = 'sltestHeatpumpLibraryLinkExample'; open(testFile);
Расширьте Тестовый тестовый набор Библиотечного блока и подсветите тест Сценариев Требований в тестовом браузере. Расширьте раздел Test Harness Системы Под Тестом и кликните по стреле, чтобы открыть тестовую обвязку для библиотечного блока.
open_system(library); sltest.harness.open([library '/Controller'],'Requirements_Tests');
Блок Test Sequence устанавливает три сценария для контроллера:
Контроллер в неактивном
Контроллер, активирующий вентилятор только
Контроллер, активирующий нагревание и систему охлаждения
Блок Test Assessment в тестовой обвязке проверяет сигналы на каждый сценарий. Поскольку тестовые воздействия и оценки содержатся в тестовой обвязке, и никакие базовые данные не собираются, тест является тестом симуляции.
Запустите основанный на требованиях тест
В менеджере по тесту запустите тест Сценариев Требований. verify
результаты оператора показывают что control_out
передача сигналов.
Откройте соединенную модель блока
В менеджере по тесту расширьте Тест Экземпляра. Подсветите Базовый Тестовый тест. В Системе Под Тестом кликните по стреле рядом с полем Model, чтобы открыть модель.
sltest.harness.close([library '/Controller'], 'Requirements_Tests'); open_system(system); sim(system);
Контроллер является соединенным блоком к библиотеке. Это сопоставлено с Базовым Тестом тестовой обвязки, который сравнивает результаты симуляции экземпляра против базовых данных. В вашем рабочем процессе успешном базовом тестировании на экземпляры библиотечного блока могут показать, что соединенный блок симулирует правильно в содержании модели. Тестовая обвязка предоставляет температуру синусоиды и получает контроллер выход.
Запустите базовый тест и наблюдайте результаты
В менеджере по тесту нажмите Run, чтобы выполнить тест. Результаты показывают, что базовый тест передает.
Переместите тестовую обвязку в библиотеку
Если вы разрабатываете особенно полезный тест для соединенного блока, можно продвинуть тестовую обвязку от соединенного блока до исходного библиотечного блока. Тестовая обвязка затем копирует во все будущие экземпляры библиотечного блока.
Переместите тестовую обвязку Baseline_controller_tests в библиотечный блок:
1. В sltestHeatpumpLibraryLinkExample модели кликните по значку обвязки и наведите на тестовую обвязку Baseline_controller_tests.
2. Кликните по значку операций обвязки
3. Выберите Move to Library. Диалоговое окно сообщает вам, что операция удаляет тестовую обвязку из экземпляра и добавляет его в библиотеку. Нажать кнопку Да.
4. Тестовая обвязка перемещается в библиотечный блок Контроллера.
close_system(library,0); close_system(system,0); clear(library,system,testFile); sltest.testmanager.clear; sltest.testmanager.clearResults;
В этом примере показано, как к модульному тесту допускающий повторное использование компонент в библиотеке. Это тестирует программное обеспечение в цикле (SIL) код, сгенерированный для подсистемы при помощи эквивалентного теста.
Допускающая повторное использование подсистема библиотеки должна быть в верхнем уровне библиотеки и должна иметь функциональные интерфейсы, чтобы заблокировать вниз интерфейс подсистемы. Для получения информации о допускающих повторное использование библиотеках подсистемы функциональные интерфейсы и ограничения рабочего процесса, видят Основанную на библиотеке Генерацию кода для Допускающих повторное использование Подсистем Библиотеки (Embedded Coder) и SIL симуляция Модели, Содержащей Допускающий повторное использование Экземпляр Подсистемы Библиотеки.
Настройте среду генерации кода
orig = Simulink.fileGenControl('get','CodeGenFolderStructure'); Simulink.fileGenControl('set','CodeGenFolderStructure',... Simulink.filegen.CodeGenFolderStructure.TargetEnvironmentSubfolder);
Откройте допускающую повторное использование библиотеку
Эта библиотека содержит блок подсистемы в верхнем уровне.
ReuseLibSubsysExample
Создайте библиотеку
Создайте допускающую повторное использование библиотеку, чтобы сгенерировать код и создать функциональные интерфейсы. После того, как генерация кода завершается, можно просмотреть функциональные интерфейсы путем нажатия на правый нижний угол библиотека, чтобы открыть диалоговое окно Manage Function Interfaces.
rtwbuild('ReuseLibSubsysExample');
### Starting build procedure for: Double ### Generating code and artifacts to 'Target environment subfolder' folder structure ### Generating code into build folder: /tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/Double ### Invoking Target Language Compiler on Double.rtw ### Using System Target File: /mathworks/devel/bat/BR2020bd/build/matlab/rtw/c/ert/ert.tlc ### Loading TLC function libraries ...... ### Initial pass through model to cache user defined code . ### Caching model source code ............................................ ### Writing header file Subsystem_FrFkRb4O.c ### Writing header file Double_types.h ### Writing header file Double.h ### Writing header file rtwtypes.h ### Writing header file Subsystem_FrFkRb4O.h . ### Writing source file Double.c ### Writing header file Double_private.h ### Writing source file ert_main.c ### TLC code generation complete. ### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux) ### Creating '/tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/_shared/rtwshared.mk' ... ### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux) ### Creating '/tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/Double/Double.mk' ... ### Successful completion of code generation for: Double The following files will be copied from IntelWin64/_shared to /tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/ReuseLibSubsysExample/R2020b: Subsystem_FrFkRb4O.c Subsystem_FrFkRb4O.h shared_file.dmr Files copied from IntelWin64/_shared to /tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/ReuseLibSubsysExample/R2020b. ### Starting build procedure for: Single ### Generating code and artifacts to 'Target environment subfolder' folder structure ### Generating code into build folder: /tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/Single ### Invoking Target Language Compiler on Single.rtw ### Using System Target File: /mathworks/devel/bat/BR2020bd/build/matlab/rtw/c/ert/ert.tlc ### Loading TLC function libraries ...... ### Initial pass through model to cache user defined code . ### Caching model source code ............................................ ### Writing header file Subsystem_7AqDCZ2Q.c ### Writing header file Single_types.h ### Writing header file Single.h ### Writing header file Subsystem_7AqDCZ2Q.h ### Writing source file Single.c . ### Writing header file Single_private.h ### Writing source file ert_main.c ### TLC code generation complete. ### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux) ### Creating '/tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/_shared/rtwshared.mk' ... ### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux) ### Creating '/tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/Single/Single.mk' ... ### Successful completion of code generation for: Single The following files will be copied from IntelWin64/_shared to /tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/ReuseLibSubsysExample/R2020b: Subsystem_7AqDCZ2Q.c Subsystem_7AqDCZ2Q.h shared_file.dmr Files copied from IntelWin64/_shared to /tmp/BR2020bd_1444674_32127/publish_examples3/tp68c8eba7/ex98874249/IntelWin64/ReuseLibSubsysExample/R2020b.
Выберите компонент подсистемы и откройте менеджера по тесту
Нажмите на Подсистему в модели библиотеки, чтобы выбрать его. Затем откройте менеджера по Тесту.
sltestmgr
Откройте тестовый файл
В менеджере по Тесту нажмите Open и выберите ReuseLibSubsysTest.mldatx
файл.
Включите набор покрытия
Выберите ReuseLibSubsysTest в Тестовой панели Браузера.
Затем расширьте раздел Coverage Settings в основной панели.
В Покрытии, чтобы Собраться, проверяйте покрытие Записи на систему под тестом.
В Метриках покрытия проверяйте, что Решение, MCDC и Условие выбраны.
Откройте Создать Тест для мастера Компонента модели
Кликните по стреле под Новым и выберите Test for Model Component, чтобы открыть Создать Тест для мастера Компонента модели.
На первой странице мастера нажмите, Use в настоящее время выбрал значок компонента модели рядом с полем Component. Оба поля Component и Top Model заполняют.
Кликните по значку обновления рядом с Избранным функциональным интерфейсным полем и выберите Double из выпадающего списка.
Нажать Далее.
Выберите тестовые воздействия
Выберите Use Design Verifier, чтобы сгенерировать сценарии тестового воздействия.
Выберите Inports как входной источник тестовой обвязки.
Нажать Далее.
Выберите How to Test the Component
Выберите Perform, спина к спине тестирующий.
Установите Simulation1 на Режим normal mode.
Установите Simulation2 на программное обеспечение в режиме Loop (SIL).
Нажать Далее.
Задайте формат файла данных и местоположение
Выберите MAT как формат файла.
Выберите тесты Add к в настоящее время выбранному тестовому файлу.
Сгенерируйте тест и возвратитесь к менеджеру по тесту
Нажмите Done, чтобы сгенерировать тест Double_harness1 для Двойного функционального интерфейса.
После того, как генерация теста завершается, тест Double_harness1 появляется в менеджере по Тесту. Заметьте, что Режим Симуляции для Simulation1 установлен в Нормальный, и Simulation2 установлен в программное обеспечение в режиме Loop (SIL).
Запустите тест
Нажмите Run.
Просмотрите эквивалентные результаты
Расширьте Результаты просмотреть Эквивалентный Результат Критериев. Заметьте, что график Различий не показывает различий между двумя сигналами, который указывает, что Нормальные и SIL симуляции приводят к тем же результатам. Код SIL, сопоставленный с допускающей повторное использование подсистемой библиотеки, может быть снова использован для других тестов SIL.
Просмотрите результаты покрытия
Расширьте раздел Aggregated Coverage, чтобы просмотреть результаты покрытия. Два результата покрытия, которые показывают 100%, для эквивалентного тестового прогона для Двойного функционального интерфейса. Другие два результата показывают 0% или никакое покрытие, потому что Один функциональный интерфейс не был протестирован.
Очистка
Simulink.fileGenControl('set','CodeGenFolderStructure',orig);