Инженерный copilot для АСУ ТП · проект asutpv1_bigllm

Чужой проект ПЛК разбирается за вечер, а не за месяц

MENSOR AI превращает экспорт PLCopen XML из Astra.IDE и CODESYS-совместимых сред в проверяемую модель проекта: канонический пакет schema 3.0, карту вызовов и обращений к переменным, читаемый псевдо-ST и поиск по коду вместе с эксплуатационной документацией.

Ответ формируется только по найденным фрагментам и приходит со ссылками на источники. Один и тот же XML разбирается побайтово одинаково — результат можно сравнить между сборками и передать заказчику.

PLCopen XMLFBD/LD → псевдо-STГраф вызовов и обращений PDF · DOCX · XLSX · схемы Э3OPC UA телеметрияИзолированный контур

Открыть демо-стенд Стенд-имитатор процесса Запросить доступ

Демонстрационные стенды отдают интерфейс после входа (Authelia) — доступ выдаётся по запросу.

Что умеет

Детерминированный разбор

PLCopen XML → канонический пакет schema 3.0 с SHA-256, диагностикой и проверкой ссылочной целостности. Повторный разбор даёт идентичный пакет.

Графическая логика читаемым текстом

Тела FBD и LD рендерятся в ST-подобный псевдо-ST: цепочки блокировок и блоки можно читать глазами, а не по схеме на экране.

Граф проекта

Связи call, read, write между POU и переменными: кто вызывает модуль, где тег читается и где записывается.

Единый поиск

Один запрос — по PLC-проекту и по документации: PDF, DOCX, XLSX, CSV, TXT/MD, изображения с OCR.

Поиск по печатной схеме Э3

Детерминированный каталог аппаратов и связей из EPLAN-навигатора; каждая цитата несёт номер листа печатной схемы.

Ответы с источниками

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

Телеметрия OPC UA

Read-only сбор сигналов, архив записей в SQLite, сопоставление живых значений с графом проекта. Записи в контроллер нет по построению.

Проверка логики на модели

Проект понижается в исполнимую IR-модель и прогоняется на виртуальном времени: покрытие считается по цели, а не заявляется.

Вопросы, на которые отвечает

  • Какие POU вызывают этот функциональный блок?
  • Где читается или записывается конкретный тег или переменная?
  • Какую логику выполняет FBD-цепочка блокировки насоса?
  • В каких документах описан данный шкаф, модуль или аварийный сигнал?
  • Какие алгоритмы и документы относятся к конкретному оборудованию или KKS-тегу?

Как это работает

PLCopen XML ──► каноническая модель ──┬──► псевдо-ST
                                      ├──► граф проекта
Документация ─────────────────────────┴──► поисковый индекс ──► ответ + источники
                                                                      │
                                                              локальный API / UI
  1. Разбор. Экспорт ПЛК публикуется как канонический пакет с диагностикой и хешами.
  2. Производные слои. Независимые read-only слои строят псевдо-ST, граф связей, каталог схемы Э3 и поисковый индекс.
  3. Ответ. Поиск собирает доказательства, модель формулирует ответ строго по ним.
  4. Сборка. Поколение артефактов версионируется и атомарно активируется — можно вернуться к предыдущему.

Архитектура

КомпонентРольАртефакт
plcopen_parserPLCopen XML → каноническая модельcanonical-model/, schema 3.0
pseudo_stFBD/LD → ST-подобный текстартефакт псевдо-ST
project_graphИндекс вызовов и обращенийproject_graph.json
search_indexИндексация кода и документациилокальный индекс Qdrant
schematic_indexКаталог печатной схемы Э3 и поиск по немуdata/schematic/
plc_answerПоиск → ответ с цитатамиответ и список источников
telemetry_ingestionRead-only сбор OPC UA телеметрииWAL и нормализованные значения
plc_ir + plc_runtimeИсполнимая модель и её прогон на виртуальном времениIR по телам программы
api + uiHTTP API и web-консоль операторалокальный интерфейс
orchestrationВерсионированная сборка и активацияdata/out/builds/<id>/

Данные и поставка

Данные остаются внутри контура

XML, документация, эмбеддинги и модели не выходят за пределы контура заказчика: локальный API слушает только loopback, CORS и аутентификации в приложении нет — вход в контур закрывает reverse-proxy, а не станция. Инференс идёт на локальные модели, внешний OpenAI-совместимый API — осознанный выбор эксплуатанта (ADR 0005), а не режим по умолчанию.

Поставка в изолированную сеть

Product-архив — самодостаточная поставка без Docker и root: интерпретатор Python, OCR и модели внутри, установка одной командой.

Docker-бандл — офлайн-установка со стеком Docker Engine + Compose v2, порты сервисов доступны только на loopback.

Стенд-имитатор может быть развёрнут рядом: сценарии аварий проигрываются по OPC UA, станция их наблюдает.

Контакты

Демонстрация на вашем проекте, пилот на одном узле вашей документации, вопросы по архитектуре и поставке в изолированный контур.

krotkikhmaxim@yandex.ru github.com/krotkikhmaxim