С Embedded Coder®можно запустить циклы» (SIL) и «цикл» (PIL) вашей модели. Эти симуляции генерируют исходный код для верхней модели или части модели. A SIL симуляции компилирует и запускает сгенерированный код на вашем компьютере разработчика. A PIL симуляции cross-компилирует исходный код на вашем компьютере разработчика, а затем загружает и запускает объектный код на целевом процессоре или эквивалентном симуляторе процессора.
С SIL и PIL симуляциями можно:
Проверьте, являются ли ваша модель и сгенерированный код численно эквивалентными.
Наблюдайте покрытие кода.
Выполните профилирование выполнения кода.
Через SIL и PIL можно раннее тестировать и исправлять дефекты. Для примера можно смоделировать и протестировать системный компонент в режиме normal mode. Затем можно повторно использовать тестовые наборы в SIL или PIL симуляции, которая запускает скомпилированный сгенерированный код. Чтобы проверить числовую эквивалентность, вы сравниваете нормальные и SIL или PIL симуляция результаты. Вы не должны покидать Simulink® окружение для тестирования сгенерированного кода на отдельной инфраструктуре.
В этой таблице описываются ситуации, когда можно использовать SIL и PIL.
Ситуация | Использовать |
---|---|
Тестируйте числовую эквивалентность между моделью и сгенерированным кодом путем повторного использования тестовых векторов, разработанных для симуляции режима normal mode, чтобы проверить численный выход сгенерированного (или прежнего) кода. Смотрите рабочий процесс верификации SIL/PIL Manager и протестируйте две симуляции для эквивалентности ( Simulink Test) | SIL и PIL |
Собирайте метрики для сгенерированного кода:
| SIL и PIL |
(Требуется лицензия IEC Certification Kit.) Выполните проверку и валидацию сгенерированного кода C/C + + в соответствии с требованиями общего жизненного цикла безопасности программного обеспечения, определенными стандартами функциональной безопасности ISO 26262-6, IEC 61508-3, IEC 62304, EN 50128 и EN 50657. Для получения подробной информации о действиях по верификации SIL и PIL в рабочем процессе IEC Certification Kit Model-Based Design, смотрите Справочный процесс для встраиваемых приложений C/C + + | SIL и PIL |
(Требуется лицензия DO Qualification Kit.) Протестируйте выход процесса интегрирования для достижения соответствующих целей в DO-178C и DO-333 стандартах безопасности. Для получения дополнительной информации см. Проверку выходов Интегрирования процесса (DO Qualification Kit). Эта информация доступна также в Рабочем процессе модельно-ориентированного проектирования для DO-178C ( | SIL и PIL |
Без целевого компьютера получите удобную альтернативу PIL. | СИЛ |
С помощью целевого компьютера, например, платы оценки или симулятора процессора:
Нормальные методы симуляции не учитывают ограничения и требования, которые предъявляет оборудование, такие как ограниченные ресурсы памяти или поведение оптимизированного кода для конкретного целевого устройства. Для получения информации о выполнении PIL симуляций для определенных целей смотрите Выборку Пользовательские цели. | PIL |
Примечание
Режимы симуляции SIL и PIL не предназначены для сокращения времени симуляции модели. Если вы хотите ускорить симуляцию модели, используйте быстрый режим Accelerator. Для получения дополнительной информации смотрите Что такое ускорение?.
В 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 блок, созданный из подсистемы. |
|
|
Вы генерируете автономный код, когда вы выполняете, например, сборку подсистемы верхнего уровня или правой кнопкой мыши для одного развертываемого компонента. Можно скомпилировать и связать автономный код в независимый исполняемый файл или интегрировать его с другим кодом. Для получения дополнительной информации об автономном интерфейсе кода смотрите Сконфигурируйте генерацию кода C для функций точки входа модели.
Когда вы генерируете код для ссылочной иерархии модели, программное обеспечение генерирует независимый исполняемый файл код для модели верхней части и библиотечного модуля, называемого целью модели-ссылки для каждой ссылочной модели. Когда код выполняется, независимый исполняемый файл вызывает применимые цели модели-ссылки, чтобы вычислить выходы модели-ссылки. Для получения дополнительной информации см. Раздел «Создание целей модели-ссылки».
Чтобы интегрировать сгенерированный код с унаследованным кодом, используйте автономный код, поскольку интерфейс автономного кода задокументирован.
Примечание
SIL и PIL симуляции не обеспечивают прямой поддержки пользовательских интерфейсов кода. Можно включить эти интерфейсы в Simulink как S-функцию, например, с помощью Legacy Code Tool, S-Function Builder или рукописного кода. Затем можно проверить пользовательский код с помощью 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 симуляции дали идентичные результаты, это использование блоков Function-Call Feedback Latch в вашей модели. Можно сделать контекстно-зависимые входы независимыми от контекста. Embedded Coder генерирует предупреждение, идентифицирующее контекстно-зависимые входы экспортированных подсистем вызова функций, если установить параметр конфигурации Context-dependent inputs на одно из следующего:
Для получения дополнительной информации смотрите:
|
В SIL и PIL симуляциях можно использовать сигналы, параметры и хранилища данных, которые задают классы памяти с импортированными определениями данных. Симуляции определяют хранилище для импортированных данных, связанных с:
Сигналы на корневом уровне компонента (на контуре ввода-вывода).
Параметры в базовом рабочем пространстве или словаре данных. Для параметров в рабочем пространстве модели:
Симуляции блоков SIL/PIL и SIL/PIL с верхней моделью определяют устройство хранения.
Model блочные симуляции не определяют хранилище. Необходимо задать устройство хранения и указать начальные значения, которые совпадают со значениями MATLAB.
Глобальные данные.
SIL и PIL симуляции не определяют хранилище для других импортированных данных. Например, симуляции не определяют хранилище для импортированных данных, связанных с:
Внутренние сигналы (не на контуре ввода-вывода)
Локальные хранилища данных
В этих случаях определите хранилище через пользовательский код, включенный в тестируемый компонент или через PIL rtw.pil.RtIOStreamApplicationFramework
API.
См. также Настраиваемые параметры и SIL/PIL.
GetSet
Пользовательский класс памятиSIL и PIL симуляции поддерживают GetSet
пользовательский класс памяти. SIL/PIL тестовой обвязки предоставляет определения C Get
и Set
функций, которые используются во время симуляций. Для получения дополнительной информации смотрите Доступ к данным через функции с класс памяти.
Other
Включение поддержки SIL и PIL для пользовательского класса памяти, где Type установлено на Other
, создайте пользовательский класс атрибутов для пользовательского класса памяти и связайте пользовательский класс атрибутов со свойством Boolean, 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 приложении, если одно из следующих значений соответствует true:
Сигнал или параметр имеет Imported
возможности данных.
Модель использует интерфейс кода модели-ссылки.
Модель использует интерфейс кода верхней модели, EnableDataOwnership
является on
, и Owner
атрибут для пользовательского класса памяти не пуст и не равен имени текущей модели
Генератор кода использует строку, возвращенную DataAccess(record, "declare", "", "")
объявить переменную в SIL или PIL приложении, если true:
Модель использует интерфейс кода верхней модели.
Сигнал или параметр использует Exported
класс памяти.
EnableDataOwnership
является off
, или EnableDataOwnership
является on
и Owner
атрибут для пользовательского класса памяти пуст или равен имени модели.
Упаковка кода сконфигурирована так, чтобы переменная не была объявлена в
или заголовочный файл, который включается в model
.hmodel
.h
Для пользовательского класса памяти, который сгруппирован:
Генератор кода вызывает DataAccess
с request
аргумент принимает значения layout
, address
, или set
.
Генератор кода вызывает ClassAccess
с request
аргумент принимает значение groupTypeDeclDefn
.
Необходимо указать сгруппированный тип (struct
) определение и extern
объявление сгруппированной переменной, если одно из следующих значений true:
Сигнал или параметр имеет 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) ...
Смотрите также Другие ограничения пользовательского класса памяти.
Можно использовать симуляции блоков верхней модели и Model блоков SIL/PIL и SIL/PIL, чтобы выполнить основанное на модели проверку программного компонента AUTOSAR. Программные ссылки, сгенерированные кодом для программного компонента AUTOSAR с базовым компонентом AUTOSAR Runtime Окружения (RTE) для создания тестового приложения. Это приложение проверяет вызовы AUTOSAR API, выполняемые программным компонентом AUTOSAR.
Для программного компонента AUTOSAR верхнего уровня, который содержит ссылочные модели, можно запустить верхнюю модель или Model блок (Code interface установлено на Top model
) SIL или PIL симуляции. В симуляциях программное обеспечение:
Перед компиляцией ссылочных моделей генерирует авто-РСА RTE-файлов заголовков.
Предоставляет путь включения RTE для компиляции модели-ссылки.
Можно также запустить Model блок (Code interface установлено на Model reference
SIL или PIL симуляции для ссылочной модели в авто-РСА SWC верхнего уровня. В этом случае перед запуском симуляции необходимо создать родительский компонент, чтобы сгенерировать файлы заголовков RTE. Если вы не создаете родительский компонент, SIL или PIL симуляция прекращает работать.