С Embedded Coder® можно запустить программное обеспечение в цикле (SIL) и процессоре в цикле (PIL) симуляции модели. Эти симуляции генерируют исходный код или для топ-модели или для части модели. SIL симуляция скомпилировала и запустила сгенерированный код на вашем компьютере разработчика. PIL симуляция кросс-компилирует исходный код на вашем компьютере разработчика, и затем загружает и запускает объектный код на целевом процессоре или эквивалентном симуляторе процессора.
С SIL и PIL симуляциями, вы можете:
Протестируйте, эквивалентны ли ваш типовой кодекс и сгенерированный код численно.
Наблюдайте покрытие кода.
Выполните профилирование выполнения кода.
Через SIL и PIL, вы можете рано на тесте и фиксировать дефекты. Например, можно смоделировать и протестировать компонент системы в режиме normal mode. Затем можно переиспользовать тестовые наборы в SIL или PIL симуляции, которая запускает скомпилированный сгенерированный код. Чтобы проверять числовую эквивалентность, вы выдерживаете сравнение нормальный и результаты PIL симуляции или SIL. Вы не должны покидать среду Simulink®, чтобы протестировать сгенерированный код на отдельной инфраструктуре.
Эта таблица описывает ситуации, где можно использовать SIL и PIL.
Ситуация | Использование |
---|---|
Протестируйте числовую эквивалентность между типовым кодексом и сгенерированным кодом путем многократного использования тестовых векторов, разработанных для симуляции режима normal mode, чтобы проверить числовой выход сгенерированных (или наследие) код. Смотрите Рабочий процесс Верификации SIL/PIL Manager и Тест Две Симуляции для Эквивалентности (Simulink Test) | 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-Function Builder или рукописного кода. Затем можно проверить пользовательский код при помощи 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 генерирует предупреждение, идентифицирующее контекстно-зависимые входные параметры экспортируемых подсистем вызова функций, если вы устанавливаете параметр конфигурации Context-dependent inputs на одно из следующего:
Для получения дополнительной информации см.:
|
В SIL и PIL симуляциях, можно использовать сигналы, параметры и хранилища данных, которые задают классы памяти с импортированными определениями данных. Симуляции задают устройство хранения данных для импортированных данных, сопоставленных с:
Сигналы на корневом уровне компонента (на контуре ввода-вывода).
Параметры в базовом рабочем пространстве или словаре данных. Для параметров в рабочем пространстве модели:
Симуляции блока SIL/PIL и SIL/PIL топ-модели задают устройство хранения данных.
Блок Model симуляции SIL/PIL не задает устройство хранения данных. Необходимо задать устройство хранения данных и задать начальные значения то соответствие значения MATLAB.
Хранилища глобальных данных.
SIL и PIL симуляции не задают устройство хранения данных для других импортированных данных. Например, симуляции не задают устройство хранения данных для импортированных данных, сопоставленных с:
Внутренние сигналы (не на контуре ввода-вывода)
Локальные хранилища данных
В этих случаях задайте устройство хранения данных через пользовательский код, включенный компонентом под тестом или через rtw.pil.RtIOStreamApplicationFramework
PIL API.
См. также Настраиваемые параметры и 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
размещение
, contents
, address
, или set
.
Генератор кода использует строку, возвращенную DataAccess(record, "define", "", "")
чтобы задать переменную в SIL или приложении PIL, если один из них верен:
Сигнал или параметр имеют Imported
осциллограф данных.
Модель использует интерфейс модели - ссылки кода.
Модель использует интерфейс топ-модели кода, EnableDataOwnership
on
, и Owner
припишите для пользовательского класса памяти, не пусто и не равен имени текущей модели
Генератор кода использует строку, возвращенную DataAccess(record, "declare", "", "")
чтобы объявить переменную в SIL или приложении PIL, если следующее верно:
Модель использует интерфейс топ-модели кода.
Сигнал или параметр используют Exported
класс памяти.
EnableDataOwnership
off
, или EnableDataOwnership
on
и Owner
припишите для пользовательского класса памяти, пусто или равен имени модели.
Упаковка кода сконфигурирована так, чтобы переменная не была объявлена в
или заголовочный файл, который включен model
Hmodel
H
Для пользовательского класса памяти, который сгруппирован:
Генератор кода вызывает DataAccess
с request
аргумент, принимающий значения layout
, address
, или set
.
Генератор кода вызывает ClassAccess
с request
аргумент, принимающий значение groupTypeDeclDefn
.
Необходимо обеспечить сгруппированный тип (struct
) определение и extern
объявление сгруппированной переменной, если один из них верен:
Сигнал или параметр имеют Imported
осциллограф данных.
Модель использует интерфейс модели - ссылки кода.
Модель использует интерфейс топ-модели кода, EnableDataOwnership
on
, и Owner
припишите для пользовательского класса памяти, не пусто и не равен имени текущей модели
Предоставьте определение и объявление в заголовочном файле, сопоставленном с пользовательским классом памяти при помощи HeaderFile
атрибут или пользовательский код, который вы включаете через
файл. Чтобы задать переменную в SIL или приложении PIL, генератор кода использует строку, возвращенную model
HClassAccess(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
называются, используют LibIsAccessingCustomDataForSILPIL(record)
TLC функционируют, чтобы различать целевую генерацию кода и запросы о фрагментах кода для конструкции 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.
Для компонента программного обеспечения AUTOSAR верхнего уровня, который содержит модели, на которые ссылаются, можно запустить топ-модель или блок Model (набор Code interface к Top model
) SIL или PIL симуляции. В симуляциях, программном обеспечении:
Перед компиляцией моделей, на которые ссылаются, генерирует заголовочные файлы AUTOSAR RTE.
Обеспечивает RTE включают путь для компиляции модели, на которую ссылаются.
Можно также запустить блок Model (набор Code interface к Model reference
) SIL или PIL симуляции для модели, на которую ссылаются, в AUTOSAR SWC верхнего уровня. В этом случае, прежде чем вы запускаете симуляцию, необходимо создать родительский компонент, чтобы сгенерировать заголовочные файлы RTE. Если вы не создаете родительский компонент, SIL или сбои PIL симуляции.