С Embedded Coder® можно запустить программное обеспечение в цикле (SIL) и процессоре в цикле (PIL) симуляции модели. Эти симуляции генерируют исходный код или для топ-модели или для части модели. SIL симуляция скомпилировала и запустила сгенерированный код на вашем компьютере разработчика. PIL симуляция кросс-компилирует исходный код на вашем компьютере разработчика, и затем загружает и запускает объектный код на целевом процессоре или эквивалентном симуляторе процессора.
С SIL и PIL симуляциями, вы можете:
Протестируйте, эквивалентны ли ваш типовой кодекс и сгенерированный код численно.
Наблюдайте покрытие кода.
Выполните профилирование выполнения кода.
Через SIL и PIL, вы можете рано на тесте и фиксировать дефекты. Например, можно смоделировать и протестировать компонент системы в режиме normal mode. Затем можно переиспользовать тестовые наборы в SIL или PIL симуляции, которая запускает скомпилированный сгенерированный код. Чтобы проверять числовую эквивалентность, вы выдерживаете сравнение нормальный и результаты PIL симуляции или SIL. Вы, таким образом, стараетесь не оставлять среду Simulink®, чтобы протестировать сгенерированный код на отдельной инфраструктуре.
Эта таблица описывает ситуации, где можно использовать SIL и PIL.
Ситуация | Использование |
---|---|
Протестируйте числовую эквивалентность между типовым кодексом и сгенерированным кодом. Смотрите Тестовый Сгенерированный код с SIL и PIL симуляциями. | SIL и PIL |
Тестовые векторы повторного использования, разработанные для симуляции режима normal mode, чтобы проверить числовой вывод сгенерированных (или наследие) код. Например:
| SIL и PIL |
Соберите метрики для сгенерированного кода:
| SIL и PIL |
Достигните IEC 61508, IEC 62304, ISO 26262 или сертификации DO-178. См. Обзор Рабочего процесса IEC Certification Kit (IEC Certification Kit) и Тестирование Выходных параметров Процесса интеграции (DO Qualification Kit). | SIL и PIL |
Без целевого компьютера получите удобную альтернативу PIL. | СИЛ |
С целевым компьютером, например, оценочной платой или симулятором процессора:
Нормальные методы симуляции не составляют ограничения и требования, чтобы оборудование наложило, такие как ресурсы ограниченной памяти или поведение целевого оптимизированного кода. Для получения информации о выполнении PIL симуляций на определенных целях смотрите Демонстрационные Пользовательские Цели (Simulink Coder). | PIL |
SIL и режимы PIL симуляции не разработаны для сокращения времен симуляции модели. Если вы хотите ускорить симуляцию своей модели, используйте быстрый режим Accelerator. Для получения дополнительной информации смотрите то, Что Ускорение? (Simulink).
В SIL или PIL симуляции, код сгенерирован или для топ-модели или для части модели. С SIL этот код скомпилирован для и выполнен на вашем компьютере разработчика. С PIL код кросс-компилируется для целевого компьютера и работает на целевом процессоре.
Через канал связи Simulink отправляет сигналы стимула в код по вашему процессору компьютера или целевому процессору для каждого демонстрационного интервала симуляции.
Для топ-модели Simulink использует сигналы стимула от базового рабочего пространства или рабочего пространства модели.
Если вы определяли только часть модели моделировать в режиме SIL или PIL, то часть модели остается в Simulink, и код не сгенерирован для этой части модели. Как правило, вы конфигурируете эту часть модели, чтобы обеспечить тестовые векторы для программного обеспечения, выполняющегося на оборудовании. Эта часть модели может представлять другие части алгоритма или среды, в которой действует алгоритм.
Когда ваш процессор компьютера или целевой процессор получают сигналы от Simulink, процессор выполняет SIL или алгоритм PIL для одного демонстрационного шага. SIL или алгоритм PIL возвращают выходные сигналы, вычисленные во время этого шага к Simulink через канал связи. Один демонстрационный цикл симуляции завершен, и Simulink переходит к следующему демонстрационному интервалу. Процесс продолжает повторяться и прогресс симуляции. SIL и PIL симуляции не запускаются в режиме реального времени. В каждый демонстрационный период Simulink и объектный код обмениваются данными о вводе-выводе.
Тип SIL или PIL симуляции | Что происходит в SIL симуляции | Что происходит в PIL симуляции |
---|---|---|
Задайте через:
|
|
|
Используйте блок SIL или PIL, созданный из подсистемы. |
|
|
Вы генерируете автономный код, когда вы выполняете, например, топ-модель или щелкаете правой кнопкой по сборке подсистемы для одного развертываемого компонента. Можно скомпилировать и соединить автономный код в независимый исполняемый файл или интегрировать его с другим кодом. Для получения дополнительной информации об автономном интерфейсе кода смотрите, Конфигурируют Генерацию кода для Образцовых Функций Точки входа (Simulink Coder).
Когда вы генерируете код для иерархии модели, на которую ссылаются, программное обеспечение генерирует код независимого исполняемого файла для топ-модели, и модуль библиотеки вызвал цель модели-ссылки для каждой модели, на которую ссылаются. Когда код выполняется, независимый исполняемый файл вызывает применимые цели модели-ссылки, чтобы вычислить образцовые выходные параметры, на которые ссылаются. Для получения дополнительной информации смотрите Цели модели-ссылки Сборки (Simulink Coder).
Чтобы интегрировать сгенерированный код с унаследованным кодом, используйте автономный код, потому что автономный интерфейс кода документируется.
SIL и PIL симуляции не оказывают прямую поддержку для интерфейсов пользовательского кода. Можно включить эти интерфейсы в Simulink как S-функция, например, с помощью Legacy Code Tool, Разработчика S-функции или рукописного кода. Затем можно проверить пользовательский код при помощи SIL и PIL симуляций.
Эта таблица обеспечивает интерфейсы, которые генерируют SIL и PIL симуляции.
Симуляция SIL/PIL | Интерфейс кода |
---|---|
Топ-модель | Симуляция SIL/PIL генерирует автономный интерфейс кода. Если код существует, симуляция вызывает автономный код для модели. Если код не существует, симуляция генерирует автономный код. |
Блок Model | Если вы устанавливаете параметры блоков Code interface на Если вы устанавливаете параметры блоков Code interface на |
Блок SIL или PIL | Блокируйте использование автономный интерфейс кода. |
Элемент | Информация |
---|---|
Алгебраические циклы | Существуют алгебраические циклы, которые происходят в SIL и PIL симуляциях, но не в симуляциях режима normal mode:
Для получения дополнительной информации см.:
|
Экспортируемые функции в обратной связи | Если ваша модель имеет подсистемы вызова функций, и вы экспортируете подсистему, которая имеет контекстно-зависимые входные параметры (например, сигналы обратной связи), результаты симуляции SIL/PIL со сгенерированным кодом и результаты симуляции режима normal mode вашей модели могут отличаться. Один подход, чтобы заставить SIL/PIL и симуляции режима normal mode привести к идентичным результатам должен использовать блоки Фиксатора Обратной связи Вызова функции в вашей модели. Можно заставить контекстно-зависимые входные параметры стать независимыми от контекста. Embedded Coder генерирует предупреждение, идентифицирующее контекстно-зависимые входные параметры экспортируемых подсистем вызова функций, если вы устанавливаете Configuration Parameters> Diagnostics> Connectivity> Context-dependent inputs к одному из следующего:
Для получения дополнительной информации см.:
|
В SIL и PIL симуляциях, можно использовать сигналы, параметры и хранилища данных, которые задают классы памяти с импортированными определениями данных. Симуляции задают устройство хранения данных для импортированных данных, сопоставленных с:
Сигналы на корневом уровне компонента (на контуре ввода-вывода).
Параметры в базовом рабочем пространстве или словаре данных. Для параметров в рабочем пространстве модели:
Симуляции блока SIL/PIL и SIL/PIL топ-модели задают устройство хранения данных.
Блок Model симуляции SIL/PIL не задает устройство хранения данных. Необходимо задать устройство хранения данных и задать начальные значения то соответствие значения MATLAB.
Хранилища глобальных данных.
SIL и PIL симуляции не задают устройство хранения данных для других импортированных данных. Например, симуляции не задают устройство хранения данных для импортированных данных, сопоставленных с:
Внутренние сигналы (не на контуре ввода-вывода)
Локальные хранилища данных
В этих случаях задайте устройство хранения данных через пользовательский код, включенный компонентом под тестом или через API rtw.pil.RtIOStreamApplicationFramework
PIL.
См. также Настраиваемые параметры и SIL/PIL.
GetSet
пользовательский класс памятиSIL и PIL симуляции поддерживают GetSet
пользовательский класс памяти. Тестовая обвязка SIL/PIL предоставляет определения C Get
и функций Set
, которые используются во время симуляций. Для получения дополнительной информации см. Доступ к данным Через Функции с Пользовательским Классом памяти GetSet.
Other
Чтобы включить SIL и PIL поддерживают для пользовательского класса памяти, где Type установлен в Other
, создайте класс пользовательских атрибутов для пользовательского класса памяти и сопоставьте класс пользовательских атрибутов с булево свойством, SupportSILPIL
, набором к true
.
classdef CSCOtherAttributes < Simulink.CustomStorageClassAttributes properties(PropertyType = 'logical scalar') SupportSILPIL = true; end end
Для получения дополнительной информации о пользовательских атрибутах, смотрите, Далее Настраивают Сгенерированный код путем Записи Кода TLC и Точно Представления данных Управления путем Записи Кода TLC для Пользовательского Класса памяти.
Чтобы создать интерфейс приложения SIL или PIL, генератор кода вызывает DataAccess
и функции ClassAccess
в связанном пользовательском файле TLC, чтобы получить запрошенную информацию. Генератор кода хранит извлеченную информацию в артефактах сборки в папке сборки.
Для пользовательского класса памяти, который не сгруппирован:
Генератор кода вызывает DataAccess
с аргументом запроса, принимающим значения define
, declare
, layout
, contents
, address
или set
.
Генератор кода использует строку, возвращенную DataAccess(record, "define", "", "")
, чтобы задать переменную в SIL или приложении PIL, если один из них верен:
Сигнал или параметр имеют осциллограф данных Imported
.
Модель использует интерфейс модели - ссылки кода.
Модель использует интерфейс топ-модели кода, EnableDataOwnership
является on
, и атрибут Owner
для пользовательского класса памяти не пуст и не равен имени текущей модели
Генератор кода использует строку, возвращенную DataAccess(record, "declare", "", "")
, чтобы объявить переменную в SIL или приложении PIL, если следующее верно:
Модель использует интерфейс топ-модели кода.
Сигнал или параметр используют класс памяти Exported
.
EnableDataOwnership
является off
, или EnableDataOwnership
является on
, и атрибут Owner
для пользовательского класса памяти пуст или равен имени модели.
Упаковка кода сконфигурирована так, чтобы переменная не была объявлена в
или заголовочном файле, который включен model.h
model.h
Для пользовательского класса памяти, который сгруппирован:
Генератор кода вызывает DataAccess
с аргументом request
, принимающим значения layout
, address
или set
.
Генератор кода вызывает ClassAccess
с аргументом request
, принимающим значение groupTypeDeclDefn
.
Необходимо обеспечить сгруппированный тип (struct
) определение и объявление extern
сгруппированной переменной, если один из них верен:
Сигнал или параметр имеют осциллограф данных Imported
.
Модель использует интерфейс модели - ссылки кода.
Модель использует интерфейс топ-модели кода, EnableDataOwnership
является on
, и атрибут Owner
для пользовательского класса памяти не пуст и не равен имени текущей модели
Предоставьте определение и объявление в заголовочном файле, сопоставленном с пользовательским классом памяти при помощи атрибута HeaderFile
или пользовательского кода, который вы включаете через файл
. Чтобы задать переменную в SIL или приложении PIL, генератор кода использует строку, возвращенную model.h
ClassAccess(record, "groupTypeDeclDefn")
.
Статическая инициализация может принять порядок элементов struct
, который отличается от порядка, который сгенерирован, если осциллографом данных является Exported
. Когда генератор кода запрашивает ClassAccess(record, "groupTypeDeclDefn")
, он временно заменяет атрибут инициализации данных пользовательского класса памяти со значением None
.
Чтобы определить, могут ли SIL или приложение PIL получить доступ к переменной в коде адресом, генератор кода использует элементы, возвращенные DataAccess(record, "layout", "", "")
. Чтобы создать функциональность в приложении, которое передает порт ввода или вывода, настраиваемый параметр или значения памяти хранилища глобальных данных между компьютером разработчика и целевым компьютером, генератор кода использует вывод от:
DataAccess(record, "address", idx, reim)
, если первым возвращенным элементом является scalar
, vector
, row-mat
или col-mat
.
DataAccess(record, "contents", idx, reim)
(или DataAccess(record, "set", idx, reim)
), если первым возвращенным элементом является other
.
Генератор кода принимает, что для row-mat
и col-mat
, матрицы хранятся в главном строкой формате соответственно. Предположение независимо от размещения массивов для остальной части модели. Генератор кода принимает, что, если размещение массивов устройства хранения данных, реализованного пользовательским классом памяти, отличается от остальной части модели, файл TLC, сопоставленный с пользовательским файлом устройства хранения данных, выполняет необходимые преобразования.
Можно создать пользовательский файл TLC, сопоставленный с пользовательским классом памяти типа Other
, чтобы выполнить другие функции (в дополнение к возврату требуемых фрагментов кода). Например, запишите непосредственно в пользовательский файл или вызовите функции MATLAB, которые изменяют состояние базового рабочего пространства. Если вы не всегда хотите выполнить эти функции, когда DataAccess
или ClassAccess
называются, используйте функцию TLC LibIsAccessingCustomDataForSILPIL(record)
, чтобы различать целевую генерацию кода и запросы о фрагментах кода для конструкции SIL или приложения PIL. Например:
... %case "contents" %if !LibIsAccessingCustomDataForSILPIL(record) %matlab functionWithSideEffects() %endif %return LibDefaultCustomStorageContents(record, idx, reim) ...
См. также Другие пользовательские ограничения класса памяти.
Можно использовать топ-модель и симуляции блока SIL/PIL и SIL/PIL блока Model, чтобы выполнить модельное тестирование компонента программного обеспечения AUTOSAR. Сгенерированный код для компонента программного обеспечения AUTOSAR соединяется с основной Средой выполнения AUTOSAR, зависящей от компонента, (RTE), чтобы создать тестовое приложение. Это приложение тестирует вызовы API AUTOSAR, сделанные компонентом программного обеспечения AUTOSAR.
Для блока Model SIL/PIL, чтобы протестировать интерфейс AUTOSAR, устанавливают параметры блоков Code interface на Top model
.
Для получения дополнительной информации смотрите, Проверяют AUTOSAR C или Код С++ с SIL и PIL (AUTOSAR Blockset).