Несколько лет назад, когда мы только начинали внедрять Engee — среду для математического моделирования, техрасчётов и генерации встраиваемого кода — одним из первых крупных промышленных запросов стал интерес со стороны АО «ПО «УОМЗ». Коллеги представили техническое задание и предложили проверить, насколько Engee действительно готова для разработки алгоритмов обработки данных от датчиков и последующей интеграции в микроконтроллеры.

В этом материале я подробнее разберу, как проходил проект, какие задачи стояли, какие подходы к интеграции кода мы использовали и к каким результатам пришли. Фактически речь идёт не просто о демонстрации генерации кода, а о полноценной проверке возможности использовать Engee как замену MATLAB/Simulink в существующих инженерных процессах УОМЗ.

Постановка задачи

Задание по проекту: разработать модель для встраиваемых систем, которая выполняет приём, обрабо��ку и передачу данных об углах поворота и действиях джойстика оптико-электронного прибора.

Целевым устройством выступал микроконтроллер STM32 серии F4, что само по себе служит хорошей проверкой способности Engee работать в связке с массовыми MCU семейства ARM Cortex-M4.

Входные данные, с которыми должна работать модель:
– два дискретных сигнала: «Захват» и «Переключение поля зрения»;
– данные тангажа и крена джойстика;
– данные акселерометра-гироскопа MPU6050 по интерфейсу I²C.

Выходные данные:
– углы поворота φ и θ;
– состояния обеих кнопок;
– упаковка всего набора в байтовый формат и передача по UART/USART.

Кроме того, УОМЗ требовалось, чтобы результат включал:
– модель Engee,
– проект для программирования в open-source IDE,
– скрипт воспроизведения модели и проверки корректности.

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

Выбор решения

Мы предложили решение, которое полностью опирается на модельно-ориентированный подход Engee.

Основные элементы решения:

  1. Построение полной модели обработки данных джойстика, включающей:
    – имитацию сигналов тангажа/кренa,
    – преобразование в декартовы координаты,
    – перевод в сферические координаты,
    – ограничение углов,
    – получение и обработку дискретных сигналов,
    – визуализацию результатов (графики, осцил��ограммы).

  2. Добавление в модель исходного кода периферии — драйверов взаимодействия с MPU6050, функций инициализации I²C, GPIO, USART и т.д.

  3. Генерацию Си-кода из модели с учётом встроенного кода периферии.

  4. Создание рабочей прошивки для STM32F446RE в open-source связке VS Code + PlatformIO + gсс + stm32duino.

  5. Проверку поведения прошивки на реальном устройстве: приём данных от MPU6050, преобразование углов, отслеживание кнопок, передача данных по USART.

Схема соединений макета джойстика
Схема соединений макета джойстика

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

Механизмы таргетирования в Engee 

В Engee существует несколько базовых сценария переноса моделей на целевое устройство (таргетирование).

Сценарий 1. Экспорт кода модели

Это подход с минимальной интеграцией проекта в Engee:
– модель генерирует структурированный Си-код;
– разработчик интегрирует его в свой проект (PlatformIO, Keil, CubeIDE, IAR и т.д.);
– периферия и RTOS настраиваются снаружи.

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

Сценарий 2. Встраивание кода периферии внутрь модели

Именно этот механизм мы применили в УОМЗ.

В Engee существуют блоки C Function, в которые можно вставить фрагменты кода периферии контроллера. Например, драйвер MPU6050 или функции работы с I²C/USART. После генерации кода Engee автоматически размещает эти вставки в итоговых C-файлах.

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

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

Проект УОМЗ стал отличным примером того, как механизм встраивания позволяет переносить модели в прошивку STM32 практически без дополнительной ручной разработки.

А что насчёт автоматического переноса модели прямо на устройство?

Возможно, у читателя возникнет закономерный вопрос:

«Можно ли перенести модель на целевое устройство автоматически, без открытия внешней среды разработки, без ручной интеграции кода, без настройки проекта на стороне IDE?»

Да — можно.
Такие механизмы недавно были реализованы в Engee и уже продемонстрированы на живом мастер-классе по разработке моделей для встраиваемых систем на День Engee 2025.

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

Ниже рассмотрим эти механизмы подробно.

Сценарий 3. Независимое выполнение

Этот механизм позволяет запускать модель прямо на микроконтроллере без участия сторонней IDE и без ручного создания проекта прошивки.
Достаточно нажать на одну кнопку, а далее Engee:

  1. генерирует код модели,

  2. собирает, компилирует и загружает его в контроллер при помощи утилит на вашем компьютере,

  3. Выводит уведомление о выполнении задач и становится доступным для продолжения работы.

Такой подход особенно удобен, когда нужно:

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

  • дать инженеру (или студенту) минимальный порог входа — модель → кнопка «Загрузить» → контроллер выполняет алгоритм;

  • проводить быстрые исследовательские итерации с проверкой модели на «железе», не переходя в VS Code или CubeIDE.

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

Сценарий 4. Интерактивное выполнение

Интерактивное выполнение — один из самых новых и интересных механизмов таргетирования Engee.

Он позволяет:

  • запускать модель синхронно в сеансе Engee и на целевом устройстве;

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

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

Внимательный читатель может спросить  “А каким образом клиент-серверная Engee получает доступ к работе с файлами и устройствами на моём компьютере?”. Для этого у нас есть встроенная платформа Engee.Интеграции с пакетами поддержки внешнего оборудования, интерфейсов, встраиваемых систем и ещё много чего другого. Подробнее можно ознакомиться в документации.

Итоги проекта

Разработанная модель

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

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

Графики изменения углов вращения джойстика
Графики изменения углов вращения джойстика
Графики изменения имитируемых дискретных сигналов
Графики изменения имитируемых дискретных сигналов

Сгенерированный код

После генерации кода Engee формирует комплект Си-файлов, в которых:

– сохранена структура модели,
– используются те же имена переменных и блоков,
– присутствуют автоматические комментарии,
– встроен весь добавленный нами код периферии (I²C, MPU6050, GPIO, USART),
– возможно автоматическое создание тестового скрипта для верификации.

Это один из наиболее сильных моментов Engee — код получается абсолютно читаемым и пригодным для р��вью и дальнейшей ручной доработки при необходимости.

Интеграция в проект PlatformIO

Мы создали рабочий проект в VS Code + PlatformIO, подключив сгенерированные файлы. Проект успешно собрался под фреймворк stm32duino, что подтвердило корректность кода на стороне Engee.

Проект успешно собран, получен бинарный файл
Проект успешно собран, получен бинарный файл

Испытания на STM32F446RE

На микроконтроллер была загружена скомпилированная прошивка. Проведены все проверки:

– корректность данных в последовательном порту (USART),
– корректное считывание кнопок,
– вычисление углов MPU6050,
– ограничение диапазонов,
– работа фильтра Калмана.

Графики поведения MPU6050, построенные сторонним приложением Serial Plot, демонстрируют соответствие результатов работы прошивки и поведения самой модели.

Изменения углов φ и θ, в процессе изменения положения датчика. Данные получена из COM-порта
Изменения углов φ и θ, в процессе изменения положения датчика. Данные получена из COM-порта

Ключевые особенности решения с Engee

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

Порог вхождения для инженеров из мира MATLAB/Simulink

УОМЗ в своём отчёте отдельно подчеркнуло, что инженеры быстро адаптировались к Engee. Интерфейс, логика блоков, система моделирования — всё оказалось интуитивно понятно специалистам, привыкшим к Simulink.

Качество и читаемость генерируемого кода

Это одна из сильнейших сторон Engee: код не выглядит «чёрным ящиком», он структурирован и соответствует логике модели. Это критически важно для встроенных систем, где разработчикам нужно понимать, что происходит на уровне Си-кода.

Гибкость интеграции

Модель можно использовать как библиотеку, или же интегрировать периферию внутрь C Function — обе схемы работают. Второй вариант особенно ценен для быстрого прототипирования.

Соответствие поведения модели и прошивки

Проверка на реальном устройстве показала, что поведение полностью совпадает с результатами моделирования.

Это означает, что генерация кода в Engee корректна и стабильна, что является ключевым требованием для критичных систем обработки данных.

Совместимость с популярными IDE и MCU

Мы использовали PlatformIO, но Engee допускает экспорт в любой инструмент, который поддерживает стандартный C/C++. STM32F4 — распространённое семейство микроконтроллеров, и успешный проект подтверждает готовность Engee для работы с таким классом устройств.

Резюме

По итогам всех работ УОМЗ официально отметил:

– корректность математического моделирования;
– качество и читаемость генерируемого кода;
– успешную интеграцию в open-source IDE;
– полное соответствие результатов моделирования и работы прошивки;
– низкий порог вхож��ения для инженеров;
– возможность использования Engee как замены MATLAB/Simulink.

Для нас это важный промышленный кейс: модельно-ориентированная разработка на Engee полностью отработала в тестовом проекте на востребованном оборудовании, значит, можно уверенно масштабировать подход и на другие задачи обработки сигналов и встраиваемых систем.