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

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

С Embedded Coder® можно запустить программное обеспечение в цикле (SIL) и процессоре в цикле (PIL) симуляции модели. Эти симуляции генерируют исходный код или для топ-модели или для части модели. 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 Certification Kit.)

Выполните действия верификации и валидации на сгенерированном коде C/C++ в соответствии с требованиями полного жизненного цикла безопасности программного обеспечения, как задано ISO 26262-6, IEC 61508-3, IEC 62304, EN 50128 и стандарты EN 50657 функциональной безопасности. Для получения дальнейшей информации о SIL и действиях верификации PIL в рабочем процессе Модельно-ориентированного проектирования IEC Certification Kit, смотрите Рабочий процесс для Встроенных Приложений 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Интерфейс кода
Топ-модель

Симуляция 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 Parameters и Configuration Parameters> панель Model Referencing). Minimize algebraic loop occurrences позволяет генерации кода удалять алгебраические циклы путем разделения сгенерированного кода между функциями выхода и обновления, чтобы избежать прямого сквозного соединения.

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

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

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

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

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

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

  • Enable all as warnings

  • Use local settings

  • Disable all

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

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

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

В 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 припишите для пользовательского класса памяти, пусто или равен имени модели.

    • Упаковка кода сконфигурирована так, чтобы переменная не была объявлена в modelH или заголовочный файл, который включен modelH

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

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

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

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

    • Сигнал или параметр имеют Imported осциллограф данных.

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

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

    Предоставьте определение и объявление в заголовочном файле, сопоставленном с пользовательским классом памяти при помощи HeaderFile атрибут или пользовательский код, который вы включаете через modelH файл. Чтобы задать переменную в 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

Можно использовать топ-модель и симуляции блока 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 симуляции.

Похожие темы