Проект начался с того, что плата 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).

Для ИИ-диагностики развёрнут стек из трёх сервисов через 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-регулятора или аномалии в токах управления.


