Embedded Coder ® позволяет выполнять моделирование модели ПО в цикле (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 + + ( | SIL и PIL |
(Требуется лицензия DO Qualification Kit.) Проверка результатов процесса интеграции на соответствие соответствующим целям DO-178C и DO-333 стандартов безопасности. Дополнительные сведения см. в разделе Тестирование выходных данных интеграционного процесса (квалификационный комплект DO). Эта информация также доступна в рабочем процессе конструирования на основе модели для DO-178C ( | SIL и PIL |
| Без целевого оборудования получите удобную альтернативу PIL. | СИЛ |
|
С целевым аппаратным обеспечением, например, плата оценки или симулятор набора команд:
Обычные методы моделирования не учитывают ограничения и требования, предъявляемые оборудованием, такие как ограниченные ресурсы памяти или поведение оптимизированного кода для конкретного объекта. Для получения информации о выполнении моделирования PIL для определенных целей см. Пример пользовательских целей. | 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, созданный из подсистемы. |
|
|
Автономный код генерируется при выполнении, например, сборки подсистемы верхней модели или правой кнопкой мыши для одного развертываемого компонента. Можно скомпилировать и связать автономный код с автономным исполняемым файлом или интегрировать его с другим кодом. Дополнительные сведения об автономном интерфейсе кода см. в разделе Настройка генерации кода C для функций точек входа модели.
При создании кода для иерархии ссылочной модели программа создает автономный исполняемый код для верхней модели и библиотечный модуль, называемый целевым объектом ссылки на модель для каждой ссылочной модели. При выполнении кода автономный исполняемый файл вызывает применимые целевые объекты ссылки на модель для вычисления выходных данных ссылочной модели. Дополнительные сведения см. в разделе Цели ссылок на модель построения.
Для интеграции сгенерированного кода с устаревшим кодом используйте автономный код, поскольку интерфейс автономного кода документирован.
Примечание
Моделирование SIL и PIL не обеспечивает прямой поддержки пользовательских интерфейсов кода. Эти интерфейсы можно включить в Simulink в качестве S-функции, например, с помощью инструмента Legacy Code Tool, S-Function Builder или рукописного кода. Затем можно проверить пользовательский код с помощью моделирования SIL и PIL.
В этой таблице представлены интерфейсы, генерируемые при моделировании SIL и PIL.
| Моделирование SIL/PIL | Интерфейс кода |
|---|---|
| Верхняя модель | Моделирование SIL/PIL создает интерфейс автономного кода. Если код существует, моделирование вызывает автономный код для модели. Если код не существует, при моделировании создается автономный код. |
| Блок модели | Если для параметра Code interface block установлено значение Если для параметра Code interface block установлено значение |
| Блок SIL или PIL | Блок использует автономный интерфейс кода. |
| Пункт | Информация |
|---|---|
| Алгебраические петли | Существуют алгебраические циклы, которые происходят в моделировании SIL и PIL, но не в моделировании в обычном режиме:
Дополнительные сведения см. в разделе:
|
| Экспортированные функции в контурах обратной связи | Если в модели имеются подсистемы вызова функций и экспортируется подсистема, имеющая контекстно-зависимые входы (например, сигналы обратной связи), результаты моделирования SIL/PIL с сгенерированным кодом и результаты моделирования нормального режима модели могут отличаться. Один из подходов к получению одинаковых результатов при моделировании SIL/PIL и в обычном режиме заключается в использовании в модели блоков Function-Call Feedback Latch. Можно сделать контекстно-зависимые входные данные контекстно-независимыми. Embedded Coder генерирует предупреждение, определяющее контекстно-зависимые входы экспортируемых подсистем вызова функций, если для параметра Контекстно-зависимая входная конфигурация задано одно из следующих значений:
Дополнительные сведения см. в разделе:
|
В моделировании 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.hmodel.h
Для сгруппированного пользовательского класса хранения:
Вызов генератора кода DataAccess с request аргумент, принимающий значения layout, address, или set.
Вызов генератора кода ClassAccess с request аргумент, принимающий значение groupTypeDeclDefn.
Необходимо указать сгруппированный тип (struct) определение и extern объявление сгруппированной переменной, если одна из них является истинной:
Сигнал или параметр имеет 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)
...См. также Другие ограничения класса хранения.
Моделирование блоков 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.