Проект начался с того, что плата P-NUCLEO-IHM03 уже умела крутить PMSM-мотор по алгоритму FOC с поддержкой FDCAN. Следующий шаг — добавить верхний уровень управления: наглядный интерфейс, интеграцию с индустриальными протоколами и автоматическую диагностику. Именно здесь в стек входят Node-RED, OpenPLC и локальный ИИ-агент.

Node-RED — визуальная IoT-платформа с потоковой моделью программирования. Вместо написания кода разработчик соединяет узлы-блоки, каждый из которых отвечает за конкретную операцию: чтение CAN-фрейма, опрос Modbus-регистра, отправку сообщения по MQTT. В этом проекте Node-RED живёт на Orange Pi и выполняет сразу четыре роли: читает данные с CAN bus через SocketCAN, опрашивает OpenPLC по Modbus TCP, отображает всё в HMI-дашборде и запускает анализ телеметрии через ИИ-агент. Альтернативы — Grafana с плагинами или самописный веб-интерфейс — при тех же задачах потребовали бы значительно больше усилий.

УсловиеЗапрос в Qdrant
Нет RUN-состоянияFOC startup failure alignment revup current
Пик Iq > 1 АFOC current saturation anti-windup Iq limit
std_dev > 30 об/мин (в settled)FOC speed loop PI oscillation gain tuning
Ошибка > 50 об/минFOC speed steady-state error PI gain integral
Нулевые момент и мощностьFOC zero torque Iq reference power loss
НормаPMSM FOC speed control normal operation

CAN bus в Linux работает через SocketCAN — набор драйверов, реализованных прямо в ядре. Он превращает CAN-интерфейс, который обычно ведёт себя как последовательный порт, в стандартное сетевое устройство — аналог eth0. Это позволяет работать с шиной через привычный программный интерфейс сокетов, что и используют плагины Node-RED. Интерфейс can0 настраивается на скорость 500 kbit/s и поднимается автоматически через systemd-networkd при загрузке системы.

ИИ-агент построен на трёх сервисах: Ollama (локальный LLM), n8n (оркестрация) и Qdrant (векторная база для RAG).

HMI, OpenPLC и ИИ-диагностика: как собрать систему управления мотором своими руками
· Источник: Habr AI

Для ИИ-диагностики развёрнут стек из трёх сервисов через Docker Compose. Ollama запускает локальный LLM-сервер и при старте автоматически скачивает модель эмбеддингов qllama/bge-small-en-v1.5 — компактную (~33 МБ) модель, оптимизированную для семантического поиска. Qdrant хранит векторную базу данных, необходимую для RAG-пайплайна. n8n — платформа для построения ИИ-агентов — оркестрирует весь процесс: получает телеметрию, ищет релевантные документы в Qdrant, формирует запрос к LLM и возвращает диагноз.

Связь между Node-RED и n8n организована через MQTT-брокер Mosquitto. Когда пользователь включает слайдер Analyze в дашборде, функция collect собирает телеметрию двигателя — скорость, токи d/q осей, параметры PID-регулятора — и публикует её в топик node-red/request. n8n подписан на этот топик, выполняет RAG + LLM анализ и возвращает результат в топик node-red/data, откуда он попадает в текстовое поле дашборда. Асинхронная схема через MQTT удобнее прямого HTTP-вызова: оба сервиса независимы и не зависят от порядка запуска.

Практическая ценность такого подхода проявляется в типичных сценариях эксплуатации. Двигатель работает, но периодически ведёт себя нестабильно: скорость скачет или выходит на целевое значение с запозданием. Раньше для диагностики требовался инженер, который смотрел бы на графики и интерпретировал данные вручную. Теперь ИИ-агент получает ту же телеметрию, сопоставляет её с базой знаний через RAG и выдаёт текстовый диагноз автоматически. Качество диагноза зависит от наполнения векторной базы и выбранной LLM, но даже на компактных локальных моделях система способна указать на отклонения в параметрах PID-регулятора или аномалии в токах управления.