SIL и PIL симуляции

Что такое SIL и PIL симуляции?

С Embedded Coder®можно запустить циклы» (SIL) и «цикл» (PIL) вашей модели. Эти симуляции генерируют исходный код для верхней модели или части модели. A SIL симуляции компилирует и запускает сгенерированный код на вашем компьютере разработчика. A PIL симуляции cross-компилирует исходный код на вашем компьютере разработчика, а затем загружает и запускает объектный код на целевом процессоре или эквивалентном симуляторе процессора.

С SIL и PIL симуляциями можно:

  • Проверьте, являются ли ваша модель и сгенерированный код численно эквивалентными.

  • Наблюдайте покрытие кода.

  • Выполните профилирование выполнения кода.

Зачем использовать 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 + + (certkitiec_ecoder_workflow.docx/pdf) программный продукт в Менеджера артефактов (IEC Certification Kit).

SIL и PIL

(Требуется лицензия DO Qualification Kit.)

Протестируйте выход процесса интегрирования для достижения соответствующих целей в DO-178C и DO-333 стандартах безопасности. Для получения дополнительной информации см. Проверку выходов Интегрирования процесса (DO Qualification Kit). Эта информация доступна также в Рабочем процессе модельно-ориентированного проектирования для DO-178C (qualkitdo_do178_workflow.pdf) программный продукт в Менеджере артефактов (DO Qualification Kit).

SIL и PIL
Без целевого компьютера получите удобную альтернативу PIL.СИЛ

С помощью целевого компьютера, например, платы оценки или симулятора процессора:

  • Проверьте поведение целевого кода, например, оптимизации замены кода и унаследованного кода. Смотрите, что такое замена кода? и что такое индивидуальная настройка замещения кода?.

  • Оптимизируйте скорость выполнения и размер памяти вашего кода. В этой таблице смотрите информацию о сборе показателей профилирования выполнения и профилирования стека.

  • Исследуйте эффекты настроек компилятора и оптимизации, например, отклонение от ANSI® Поведение переполнения C.

Нормальные методы симуляции не учитывают ограничения и требования, которые предъявляет оборудование, такие как ограниченные ресурсы памяти или поведение оптимизированного кода для конкретного целевого устройства.


Для получения информации о выполнении PIL симуляций для определенных целей смотрите Выборку Пользовательские цели.

PIL

Примечание

Режимы симуляции SIL и PIL не предназначены для сокращения времени симуляции модели. Если вы хотите ускорить симуляцию модели, используйте быстрый режим Accelerator. Для получения дополнительной информации смотрите Что такое ускорение?.

Как работают симуляции SIL и PIL

В 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 симуляции

Задайте через:

  • Режим симуляции верхней модели

  • Model блок Simulation mode параметр

  • Тестовое поведение сгенерированного исходного кода на компьютере разработчика. Симуляция не тестирует код, скомпилированный для целевого компьютера, потому что код компилируется для компьютера разработчика (другой компилятор и другая архитектура процессора, чем целевая).

  • Сгенерированный производственный код скомпилирован и выполнен на компьютере разработчика как отдельный процесс, независимо от MATLAB® процесс.

  • Выполнение является хостом/хостом и нереальным временем.

  • Тестируйте объектные коды, которые вы намерены развернуть в производстве на реальном целевом компьютере или симуляторе процессора.

  • На компьютере разработчика сгенерирован производственный код, перекрестно скомпилированный для целевого компьютера. Объектный код загружается и выполняется на целевом процессоре или симуляторе процессора.

  • Выполнение является хостом/целевым и нереальным временем.

Используйте SIL или PIL блок, созданный из подсистемы.
  • Симуляция запускает скомпилированный объектный код через S-функцию. S-функция связывается с объектным кодом, выполняющимся как автономное приложение на компьютере разработчика. Выполнение блока SIL не зависит от процесса MATLAB.

  • Выполнение является хостом/хостом и нереальным временем.

  • Симуляция запускает перекрестно скомпилированный объектный код через S-функцию на компьютере разработчика. S-функция связывается с объектным кодом, выполняющимся как автономное приложение на целевом процессоре или симуляторе процессора.

  • Выполнение является хостом/целевым и нереальным временем.

Интерфейсы кода для SIL и PIL

Вы генерируете автономный код, когда вы выполняете, например, сборку подсистемы верхнего уровня или правой кнопкой мыши для одного развертываемого компонента. Можно скомпилировать и связать автономный код в независимый исполняемый файл или интегрировать его с другим кодом. Для получения дополнительной информации об автономном интерфейсе кода смотрите Сконфигурируйте генерацию кода C для функций точки входа модели.

Когда вы генерируете код для ссылочной иерархии модели, программное обеспечение генерирует независимый исполняемый файл код для модели верхней части и библиотечного модуля, называемого целью модели-ссылки для каждой ссылочной модели. Когда код выполняется, независимый исполняемый файл вызывает применимые цели модели-ссылки, чтобы вычислить выходы модели-ссылки. Для получения дополнительной информации см. Раздел «Создание целей модели-ссылки».

Чтобы интегрировать сгенерированный код с унаследованным кодом, используйте автономный код, поскольку интерфейс автономного кода задокументирован.

Примечание

SIL и PIL симуляции не обеспечивают прямой поддержки пользовательских интерфейсов кода. Можно включить эти интерфейсы в Simulink как S-функцию, например, с помощью Legacy Code Tool, S-Function Builder или рукописного кода. Затем можно проверить пользовательский код с помощью SIL и PIL симуляций.

В этой таблице приведены интерфейсы, которые генерируют SIL и PIL симуляции.

СимуляцияИнтерфейс кода
Топовая модель

Симуляция SIL/PIL генерирует автономный интерфейс кода. Если код существует, симуляция вызывает автономный код для модели. Если код не существует, симуляция генерирует автономный код.

Model блок

Если вы задаете Code interface параметров блоков Top modelСимуляция SIL/PIL генерирует автономный интерфейс кода. Симуляция вызывает автономный код для модели, если он существует. В противном случае симуляция генерирует автономный код при помощи slbuild ('model') команда.

Если вы задаете Code interface параметров блоков Model referenceСимуляция SIL/PIL генерирует модель-ссылку интерфейс кода. Симуляция вызывает цель модели-ссылки для Model блока, если он существует. В противном случае симуляция генерирует цель модели-ссылки при помощи slbuild ('model',' ModelReferenceCoderTargetOnly ') команда.

Блок SIL или PILБлок использует автономный интерфейс кода.

Факторы о планировании

ЭлементИнформация
Алгебраические циклы

Существуют алгебраические циклы, которые происходят в SIL и PIL симуляциях, но не в симуляциях режима normal mode:

  • Single output/update function в оптимизации генерации кода могут ввести алгебраические циклы, потому что опция вводит прямое сквозное соединение через объединенную функцию выхода и обновления.

    Single output/update function несовместимо с Minimize algebraic loop occurrences (в диалоговом окне Subsystem Параметров и в панели Configuration Parameters > Model Referencing). Minimize algebraic loop occurrences позволяет генерации кода удалить алгебраические циклы путем разбиения сгенерированного кода между выходной и обновленной функциями, чтобы избежать прямого сквозного соединения.

  • Если вы генерируете код для виртуальной подсистемы, генерация кода обрабатывает подсистему как атомарную и генерирует код соответственно. Получившийся код может изменить поведение выполнения вашей модели, например, путем применения алгебраических циклов и внести несоответствия в поведение симуляции.

    Чтобы включить последовательную симуляцию и поведение выполнения для вашей модели, объявите виртуальные подсистемы атомарными подсистемами.

Для получения дополнительной информации смотрите:

Экспортированные функции в циклах обратной связи

Если ваша модель имеет подсистемы вызова функций, и вы экспортируете подсистему, которая имеет контекстно-зависимые входы (для примера, сигналов обратной связи), результаты симуляции SIL/PIL с сгенерированным кодом и результаты симуляции режима normal mode вашей модели могут отличаться. Один из подходов к тому, чтобы SIL/PIL и режим normal mode симуляции дали идентичные результаты, это использование блоков Function-Call Feedback Latch в вашей модели. Можно сделать контекстно-зависимые входы независимыми от контекста.

Embedded Coder генерирует предупреждение, идентифицирующее контекстно-зависимые входы экспортированных подсистем вызова функций, если установить параметр конфигурации Context-dependent inputs на одно из следующего:

  • Enable all as warnings

  • Use local settings

  • Disable all

Для получения дополнительной информации смотрите:

Импортированные определения данных и функций

Импортированные данные

В 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.h или заголовочный файл, который включается в model.h

Для пользовательского класса памяти, который сгруппирован:

  • Генератор кода вызывает DataAccess с request аргумент принимает значения layout, address, или set.

  • Генератор кода вызывает ClassAccess с request аргумент принимает значение groupTypeDeclDefn.

  • Необходимо указать сгруппированный тип (struct) определение и extern объявление сгруппированной переменной, если одно из следующих значений true:

    • Сигнал или параметр имеет Imported возможности данных.

    • Модель использует интерфейс кода модели-ссылки.

    • Модель использует интерфейс кода верхней модели, EnableDataOwnership является on, и Owner атрибут для пользовательского класса памяти не пуст и не равен имени текущей модели

    Предоставьте определение и объявление в заголовочном файле, сопоставленном с пользовательским классом памяти, используя HeaderFile атрибут или пользовательский код, который вы включаете через model.h файл. Чтобы определить переменную в SIL или PIL приложении, генератор кода использует строку, возвращенную 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 вызываются, используйте LibIsAccessingCustomDataForSILPIL(record) Функция TLC для различения генерации целевого кода и запросов фрагментов кода для конструкции приложения SIL или PIL. Для примера:

...
%case "contents"
  %if !LibIsAccessingCustomDataForSILPIL(record)
    %matlab functionWithSideEffects()
  %endif
%return LibDefaultCustomStorageContents(record, idx, reim)
...

Смотрите также Другие ограничения пользовательского класса памяти.

Среда выполнения AUTOSAR Окружения

Можно использовать симуляции блоков верхней модели и 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 referenceSIL или PIL симуляции для ссылочной модели в авто-РСА SWC верхнего уровня. В этом случае перед запуском симуляции необходимо создать родительский компонент, чтобы сгенерировать файлы заголовков RTE. Если вы не создаете родительский компонент, SIL или PIL симуляция прекращает работать.

Похожие темы