Несколько лет назад, когда мы только начинали внедрять Engee — среду для математического моделирования, техрасчётов и генерации встраиваемого кода — одним из первых крупных промышленных запросов стал интерес со стороны АО «ПО «УОМЗ». Коллеги представили техническое задание и предложили проверить, насколько Engee действительно готова для разработки алгоритмов обработки данных от датчиков и последующей интеграции в микроконтроллеры.
В этом материале я подробнее разберу, как проходил проект, какие задачи стояли, какие подходы к интеграции кода мы использовали и к каким результатам пришли. Фактически речь идёт не просто о демонстрации генерации кода, а о полноценной проверке возможности использовать Engee как замену MATLAB/Simulink в существующих инженерных процессах УОМЗ.
Постановка задачи
Задание по проекту: разработать модель для встраиваемых систем, которая выполняет приём, обрабо��ку и передачу данных об углах поворота и действиях джойстика оптико-электронного прибора.
Целевым устройством выступал микроконтроллер STM32 серии F4, что само по себе служит хорошей проверкой способности Engee работать в связке с массовыми MCU семейства ARM Cortex-M4.
Входные данные, с которыми должна работать модель:
– два дискретных сигнала: «Захват» и «Переключение поля зрения»;
– данные тангажа и крена джойстика;
– данные акселерометра-гироскопа MPU6050 по интерфейсу I²C.
Выходные данные:
– углы поворота φ и θ;
– состояния обеих кнопок;
– упаковка всего набора в байтовый формат и передача по UART/USART.
Кроме того, УОМЗ требовалось, чтобы результат включал:
– модель Engee,
– проект для программирования в open-source IDE,
– скрипт воспроизведения модели и проверки корректности.
Суть задачи можно свести к простой формуле: обработать сигналы датчика положения, корректно вычислить ориентацию, учесть состояние кнопок и вывести агрегированную телеметрию в последовательный порт — всё должно работать в режиме реального времени и быть переносимым на реальное железо.
Выбор решения
Мы предложили решение, которое полностью опирается на модельно-ориентированный подход Engee.
Основные элементы решения:
Построение полной модели обработки данных джойстика, включающей:
– имитацию сигналов тангажа/кренa,
– преобразование в декартовы координаты,
– перевод в сферические координаты,
– ограничение углов,
– получение и обработку дискретных сигналов,
– визуализацию результатов (графики, осцил��ограммы).Добавление в модель исходного кода периферии — драйверов взаимодействия с MPU6050, функций инициализации I²C, GPIO, USART и т.д.
Генерацию Си-кода из модели с учётом встроенного кода периферии.
Создание рабочей прошивки для STM32F446RE в open-source связке VS Code + PlatformIO + gсс + stm32duino.
Проверку поведения прошивки на реальном устройстве: приём данных от 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:
генерирует код модели,
собирает, компилирует и загружает его в контроллер при помощи утилит на вашем компьютере,
Выводит уведомление о выполнении задач и становится доступным для продолжения работы.
Такой подход особенно удобен, когда нужно:
прошить микроконтроллер кодом готовой модели или модели с минимальными изменениями;
дать инженеру (или студенту) минимальный порог входа — модель → кнопка «Загрузить» → контроллер выполняет алгоритм;
проводить быстрые исследовательские итерации с проверкой модели на «железе», не переходя в 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, демонстрируют соответствие результатов работы прошивки и поведения самой модели.

Ключевые особенности решения с 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 полностью отработала в тестовом проекте на востребованном оборудовании, значит, можно уверенно масштабировать подход и на другие задачи обработки сигналов и встраиваемых систем.
