Документация Engee

Обзор и структура таргета

Страница в процессе разработки.

Таргет Engee — это пакет поддержки, который связывает модель Engee с конкретной целевой платформой. Платформой может быть микроконтроллер, отладочная плата, промышленное устройство, удаленный Linux-компьютер или локальное приложение.

Таргет выполняет все необходимые шаги — от модели Engee до запуска на целевой платформе:

  1. Получает описание модели и настройки запуска.

  2. Использует Си-код, сгенерированный из модели Engee.

  3. Формирует проект для целевой платформы.

  4. Собирает проект подходящим тулчейном[1].

  5. Загружает или запускает собранный артефакт.

  6. При необходимости организует обмен данными с моделью во время выполнения.

Пользовательский таргет добавляется в Engee.Интеграции и синхронизируется с Engee и после этого может использоваться в скриптах и блоках.

Структура таргета

Минимальный шаблон таргета размещается в директории targets. Для одной платформы удобно создать отдельную папку:

my_extension/
└── targets/
    └── MyTarget/
        ├── __init__.py
        └── MyTarget.py
Пользовательский пакет поддержки встраиваемой системы (таргет) должен располагаться в targets/<папка_таргета>/.

Как правило, для таргета также нужны шаблоны, драйверы, файлы сборки, библиотека блоков и демонстрационные модели, например:

my_extension/
└── targets/
    └── MyTarget/
        ├── __init__.py
        ├── MyTarget.py
        ├── README.md
        ├── blocks_library/
        │   └── engee_my_target.nglib
        ├── demos/
        │   └── example_my_target.engee
        ├── drivers/
        │   ├── platform_driver.c
        │   └── platform_driver.h
        ├── templates/
        │   ├── main.c
        │   └── CMakeLists.txt
        ├── FirmwareBuilder.py
        └── FirmwareLoader.py

Приведенная выше схема является обобщенной. Для Arduino-совместимых платформ вместо main.c может генерироваться файл с расширением .ino. Для bare-metal, RTOS или Linux-платформ удобнее генерировать main.c и файл сборки.

Назначение типовых частей:

  • MyTarget.py — основной класс таргета и модель параметров блока EDM-Target;

  • __init__.py — импорт основного класса, чтобы механизм загрузки пакета поддержки мог найти его;

  • templates — Jinja-шаблоны точки входа, планировщика/рантайм-кода и файлов сборки;

  • drivers — платформенные драйверы C/C++ и Си-API, вызываемые из блоков C Function;

  • FirmwareBuilder.py — обертка над компилятором и системой сборки;

  • FirmwareLoader.py — загрузка прошивки;

  • blocks_library — библиотека блоков Engee для пользователя;

  • demos — модели, позволяющие быстро начать работу с устройством.

Режимы работы

Поддерживаются два режима выполнения модели: независимый и интерактивный.

Независимый режим

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

Типичный сценарий независимого режима выполнения содержит следующие шаги:

  1. Engee генерирует Си-код модели.

  2. Таргет создает проект целевой платформы.

  3. Тулчейн собирает прошивку, бинарный или исполняемый файл.

  4. Таргет загружает артефакт на устройство или запускает приложение.

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

С точки зрения разработки нового таргета такой режим предпочтителен на начальном этапе: он требует меньше рантайм-инфраструктуры и позволяет сначала проверить корректность генерации, сборки, таймера и вызова step-функций.

Интерактивный режим

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

Для такого режима одного запуска Си-кода недостаточно. Нужен канал связи между Engee и моделью. В приведенных примерах этот канал строится на XCP (Universal Measurement and Calibration) протоколе[2].

Типичный сценарий интерактивного выполнения содержит следующие шаги:

  1. Engee генерирует Си-код модели.

  2. Таргет создает проект с рантаймом интерактивного режима выполнения.

  3. В проект добавляется XCP slave и платформенный транспорт, например UART или TCP.

  4. Тулчейн собирает артефакт и ELF-файл с символами модели.

  5. Таргет загружает или запускает модель.

  6. Engee подключается к рантайму, запускает поток данных и отправляет команды изменения параметров.

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

Что выбрать сначала

Если платформа новая, то стоит начать с независимого режима:

  • проще проверить базовый путь от модели до исполняемого артефакта;

  • меньше требований к рантайму и тулчейну;

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

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


1. Тулчейн — это набор консольных инструментов (компилятор, компоновщик и утилиты), которые из исходных файлов проекта собирают прошивку для микроконтроллера.
2. XCP (Universal Measurement and Calibration) протокол — это стандарт ASAM MCD-1 XCP для доступа к внутренним данным приложения во время его работы.