exponenta event banner

Моделирование SIL и PIL

Что такое моделирование SIL и PIL?

Embedded Coder ® позволяет выполнять моделирование модели ПО в цикле (SIL) и процессора в цикле (PIL). Эти моделирования генерируют исходный код для верхней модели или части модели. Моделирование SIL компилирует и запускает созданный код на компьютере разработчика. Моделирование PIL выполняет перекрестную компиляцию исходного кода на компьютере разработчика, а затем загружает и запускает объектный код на целевом процессоре или эквивалентном симуляторе набора команд.

Моделирование SIL и PIL позволяет:

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

  • Соблюдать покрытие кода.

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

Зачем использовать SIL и PIL

С помощью SIL и PIL можно на ранней стадии проверить и устранить дефекты. Например, можно моделировать и тестировать системный компонент в обычном режиме. Затем можно повторно использовать наборы тестов в моделировании SIL или PIL, выполняющем скомпилированный сгенерированный код. Для проверки числовой эквивалентности сравниваются результаты моделирования нормального и SIL или PIL. Для тестирования сгенерированного кода в отдельной инфраструктуре не требуется покидать среду Simulink ®.

В этой таблице описаны ситуации, в которых можно использовать SIL и PIL.

СитуацияИспользовать
Проверка численной эквивалентности между моделью и сгенерированным кодом путем повторного использования тестовых векторов, разработанных для моделирования в обычном режиме, для проверки численного вывода сгенерированного (или унаследованного) кода. См. Поток операций проверки 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 в рабочем процессе проектирования на основе модели комплекта сертификации МЭК см. Справочный рабочий процесс для встраиваемых приложений C/C + + (certkitiec_ecoder_workflow.docx/pdf) артефакт в обозревателе артефактов (комплект для сертификации МЭК).

SIL и PIL

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

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

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

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

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

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

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

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


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

PIL

Примечание

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

Работа моделирования 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

Укажите через:

  • Режим моделирования верхней модели

  • Параметр режима моделирования блока модели

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

  • Созданный производственный код, скомпилированный и выполненный на компьютере разработки как отдельный процесс, не зависящий от процесса 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 создает интерфейс автономного кода. Если код существует, моделирование вызывает автономный код для модели. Если код не существует, при моделировании создается автономный код.

Блок модели

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

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

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

Вопросы планирования

ПунктИнформация
Алгебраические петли

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

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

    Функция одиночного вывода/обновления несовместима с «Минимизировать вхождения алгебраического цикла» (в диалоговом окне «Параметры подсистемы» и на панели «Параметры конфигурации» > «Ссылка на модель»). Минимизация вхождений алгебраического цикла позволяет генерации кода удалять алгебраические циклы путем разбиения сгенерированного кода между функциями вывода и обновления, чтобы избежать прямого прохождения.

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

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

Дополнительные сведения см. в разделе:

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

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

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

  • Enable all as warnings

  • Use local settings

  • Disable all

Дополнительные сведения см. в разделе:

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

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

В моделировании SIL и PIL можно использовать сигналы, параметры и хранилища данных, определяющие классы хранения с импортированными определениями данных. Моделирование определяет хранилище для импортированных данных, связанных с:

  • Сигналы на корневом уровне компонента (на границе ввода-вывода).

  • Параметры в базовой рабочей области или словаре данных. Для параметров в рабочем пространстве модели:

    • Моделирование блоков SIL/PIL и SIL/PIL верхней модели определяет хранение.

    • Моделирование SIL/PIL блока модели не определяет хранение. Необходимо определить хранилище и указать начальные значения, соответствующие значениям MATLAB.

  • Глобальные хранилища данных.

Моделирование SIL и PIL не определяет хранилище для других импортированных данных. Например, моделирование не определяет хранилище для импортированных данных, связанных с:

  • Внутренние сигналы (не на границе ввода-вывода)

  • Локальные хранилища данных

В этих случаях определите хранение с помощью пользовательского кода, включенного тестируемым компонентом, или с помощью PIL. rtw.pil.RtIOStreamApplicationFramework API.

См. также Настраиваемые параметры и SIL/PIL.

GetSet Пользовательский класс хранения

Моделирование SIL и PIL поддерживает GetSet пользовательский класс хранения. Тестовый жгут SIL/PIL содержит определения C для Get и Set функции, которые используются во время моделирования. Дополнительные сведения см. в разделе Доступ к данным через функции с помощью класса хранения GetSet.

Пользовательский класс хранения типа Other

Включение поддержки SIL и PIL для пользовательского класса хранения, в котором для параметра «Тип» установлено значение 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, если одно из этих значений верно:

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

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

См. также Другие ограничения класса хранения.

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

Моделирование блоков SIL/PIL и SIL/PIL можно использовать для тестирования программного компонента AUTOSAR на основе моделей. Программные ссылки генерируют код для программного компонента AUTOSAR с базовым компонентом AUTOSAR Runtime Environment (RTE) для создания тестового приложения. Это приложение проверяет вызовы AUTOSAR API, выполняемые программным компонентом AUTOSAR.

Для программного компонента верхнего уровня AUTOSAR, содержащего ссылочные модели, можно запустить верхнюю модель или блок модели (для интерфейса кода установлено значение Top model) Моделирование SIL или PIL. В моделировании программное обеспечение:

  • Перед компиляцией ссылочных моделей генерирует файлы заголовков AUTOSAR RTE.

  • Предоставляет путь включения RTE для компиляции ссылочной модели.

Можно также запустить блок модели (для интерфейса кода установлено значение Model reference) Моделирование SIL или PIL для ссылочной модели в рамках SWC AUTOSAR верхнего уровня. В этом случае перед запуском моделирования необходимо создать родительский компонент для создания файлов заголовков RTE. Если не построить родительский компонент, не удастся выполнить моделирование SIL или PIL.

Связанные темы