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.

СитуацияИспользование
Протестируйте числовую эквивалентность между типовым кодексом и сгенерированным кодом. Смотрите Тестовый Сгенерированный код с 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.СИЛ

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

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

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

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

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


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

PIL

Примечание

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

Как 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

Вы генерируете автономный код, когда вы выполняете, например, топ-модель или щелкаете правой кнопкой по сборке подсистемы для одного развертываемого компонента. Можно скомпилировать и соединить автономный код в независимый исполняемый файл или интегрировать его с другим кодом. Для получения дополнительной информации об автономном интерфейсе кода смотрите, Конфигурируют Генерацию кода для Образцовых Функций Точки входа (Simulink Coder).

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

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

Примечание

SIL и PIL симуляции не оказывают прямую поддержку для интерфейсов пользовательского кода. Можно включить эти интерфейсы в Simulink как S-функция, например, с помощью Legacy Code Tool, Разработчика S-функции или рукописного кода. Затем можно проверить пользовательский код при помощи 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 генерирует предупреждение, идентифицирующее контекстно-зависимые входные параметры экспортируемых подсистем вызова функций, если вы устанавливаете Configuration Parameters> Diagnostics> Connectivity> Context-dependent inputs к одному из следующего:

  • Enable all as warnings

  • Use local settings

  • Disable all

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

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

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

В 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 или пользовательского кода, который вы включаете через файл 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 называются, используйте функцию TLC LibIsAccessingCustomDataForSILPIL(record), чтобы различать целевую генерацию кода и запросы о фрагментах кода для конструкции SIL или приложения PIL. Например:

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

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

Среда выполнения AUTOSAR (RTE)

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

Похожие темы