Теги: АСУ ТП, ПЛК, SCADA, искусственный интеллект, автоматизация, DeepSeek, инструменты разработчика, Python
Если вы хоть раз программировали контроллер на реальном объекте, вы знаете этот ритуал. Перед вами лежит PDF на 180 страниц — «Техническое задание на разработку АСУ ТП». Рядом — Excel с IOLIST на 600 строк. Ваша задача, прежде чем написать первую строчку кода на ST или LAD, — разобраться, что куда относится: какие сигналы принадлежат вентиляции, какие — насосной станции, что за уставки у каждого узла, где аварии, где режимы. Это занимает полдня в лучшем случае, день — в среднем.
Именно эту боль закрывает PLC Smart Splitter — новый инструмент от российской студии plcstudio, опубликованный в открытом доступе на GitVerse и GitHub.
Что это такое и зачем
PLC Smart Splitter — это локальное Windows-приложение, которое принимает на вход два файла: текст технического задания и таблицу сигналов (IOLIST), а на выходе отдаёт структурированные блоки ТЗ по каждой подсистеме.
Звучит просто, но дьявол в деталях. Реальные ТЗ не имеют единого стандарта оформления. Один заказчик пишет ТЗ в Word с нумерованными заголовками, другой — в виде сплошного текста с абзацами, третий отдаёт отсканированный PDF 2003 года. То же самое с IOLIST: у одного предприятия колонки называются Tag, Description, SubSystem, у другого — Адрес, Наименование, Узел, у третьего нет заголовков вообще, и подсистема кодируется в самом теге через разделитель.
Программа умеет работать с этим зоопарком. Давайте разберём как.
Архитектура решения
Под капотом — Python + Flask + pandas, упакованные в один .exe через PyInstaller. При запуске поднимается локальный веб-сервер на 127.0.0.1:8053, интерфейс открывается в браузере. Это грамотное решение: не нужна установка, всё в одном файле, интерфейс привычный, данные не покидают машину.
Для генерации текста ТЗ используется DeepSeek API — нужен собственный ключ с аккаунтом на platform.deepseek.com. Если ключа нет, предусмотрен режим «Промпт чата»: программа формирует готовое сообщение, которое можно скопировать и вставить в веб-интерфейс ChatGPT, Claude или DeepSeek вручную.
Весь процесс из четырёх шагов отражён прямо в интерфейсе как четыре кнопки в левой панели:
1. Профилировать таблицу →2. Нарезать ТЗ →3. Разбить на подсистемы →4. ТЗ для всех
Рассмотрим каждый.
Шаг 1. Профилирование таблицы сигналов
Это, пожалуй, самая нетривиальная часть продукта. Программа не полагается на названия колонок — она анализирует содержимое каждой колонки и по статистике значений определяет её роль:
-
Тег — высокая доля уникальных значений, короткие строки, часто содержат спецсимволы и цифры в определённых позициях (
AI_101,FCV-23.4,GS_PUMP_01). -
Описание — длинные строки, почти уникальные, кириллица или смешанный текст.
-
Тип сигнала — очень ограниченный словарь значений (
DI,DO,AI,AO,AO_4-20, и т.п.). -
Подсистема — ограниченный словарь, часто повторяющиеся группы.
После профилирования программа показывает разметку с указанием уверенности (confidence) по каждой колонке и числом найденных «якорей» подсистем.
Если автоматика ошиблась — есть блок «Обучение ИИ»: вы показываете 3–7 примеров «тег → подсистема», и классификация пересчитывается.
Шаг 2. Нарезка технического задания
Текст ТЗ разбивается на смысловые блоки по иерархии заголовков с сохранением полного пути: Раздел → Подраздел → Пункт. Для каждого блока подсчитывается количество токенов — это нужно для того, чтобы при формировании промпта не выходить за лимит контекста модели.
Поддерживаемые форматы ТЗ: .txt, .md, .html. PDF и DOCX нужно предварительно конвертировать в текст — это единственное ограничение, которое немного снижает удобство при работе с «тяжёлыми» документами от заказчиков.
Шаг 3. Группировка по подсистемам
Алгоритм находит «якорные» строки в таблице сигналов — строки, которые явно задают границу подсистемы — и приписывает каждый сигнал к своей группе. Затем для каждой подсистемы подбираются релевантные фрагменты из нарезанного ТЗ.
Это критически важный момент: модель не получает весь документ целиком. Она получает только те блоки ТЗ, которые семантически относятся к данной подсистеме. Это снижает «галлюцинации», уменьшает расход токенов и повышает качество.
Перед финальной генерацией доступен предпросмотр (3b. Предпросмотр подсистем) — можно убедиться, что сигналы сгруппировались правильно, прежде чем запускать дорогой батч-запрос к API.
Шаг 4. Генерация структурированного ТЗ
Это финальный шаг. Для каждой подсистемы модель генерирует полное структурированное ТЗ в строгом JSON-формате. Структура зафиксирована промптом и включает:
-
Назначение подсистемы
-
Перечень оборудования
-
Описание сигналов AI / AO / DI / DO с тегами и описаниями
-
Режимы работы (ручной / автоматический / аварийный и т.д.)
-
Пошаговый алгоритм управления
-
Уставки и параметры
-
Аварии и события
-
Взаимодействия с другими подсистемами
Промпт поддерживает плейсхолдеры ({{name}}, {{tags}}, {{tz_fragments}}, {{tag_count}} и др.) и полностью редактируется опытными пользователями — можно подстраивать стиль и структуру под стандарты своей организации.
Контроль качества и антигаллюцинационные правила
Отдельного внимания заслуживает вкладка «Сравнение». Сценарий: вы сгенерировали ТЗ через API, но хотите проверить, не «выдумала» ли модель данные. Вставляете рядом ответ, полученный вручную через веб-чат, — программа сравнивает два JSON секция за секцией и подсвечивает расхождения.
В самом промпте прямо запрещено выдумывать уставки и режимы, которых нет в исходных документах. Если модели не хватило данных из ТЗ — она явно указывает, что информации недостаточно, а не заполняет пробел правдоподобной выдумкой.
Режим без API-ключа
Инженеры на объектах часто работают без стабильного интернета или без корпоративного разрешения подключать рабочие документы к внешним сервисам. Для этого предусмотрен режим «Промпт чата»: программа формирует полный промпт с контекстом по одной подсистеме и предлагает скопировать его в буфер обмена. Дальше — открываете ChatGPT или Claude в браузере, вставляете, получаете JSON-ответ и возвращаете его обратно во вкладку «Сравнение».
Не самый автоматичный режим, но для единичных подсистем или при работе на закрытом контуре — вполне рабочий.
Лицензирование
Программа работает по схеме «пробный период → постоянная лицензия». Первые 5 дней все функции доступны бесплатно. Далее — покупка лицензии через электронную почту support@plcstudio.ru. Активация привязана к Hardware ID компьютера, лицензия на одну машину.
Если меняете компьютер или переставляете Windows — достаточно написать с новым Hardware ID, перенос для легальных пользователей бесплатный.
Цена публично не указана — нужно запрашивать у разработчика.
Стек и системные требования
|
Параметр |
Значение |
|---|---|
|
ОС |
Windows 10 / 11 (64-бит) |
|
Установка |
Не требуется, один |
|
Бэкенд |
Python + Flask + pandas |
|
ИИ-провайдер |
DeepSeek API (ключ пользователя) |
|
Интерфейс |
Локальное веб-приложение ( |
|
Форматы ТЗ |
|
|
Форматы IOLIST |
|
|
Форматы экспорта |
|
Что получается на выходе
Практический результат работы программы выглядит примерно так. Исходный IOLIST на 600 сигналов и ТЗ на 150 страниц → за 5–10 минут (в зависимости от числа подсистем и скорости DeepSeek API) → ZIP-архив, в котором для каждой подсистемы лежит отдельный структурированный файл с полным ТЗ для программиста.
Программист открывает файл по своей подсистеме и видит ровно то, что ему нужно: список сигналов, алгоритм, уставки, аварии. Не 180-страничный PDF, из которого нужно выловить нужные три страницы.
Кому это нужно
Продукт нишевый, но попадает точно в аудиторию:
-
Инженеры-программисты ПЛК, работающие на объектах без собственного отдела разработки — небольшие интеграторы, фриланс.
-
Небольшие компании-интеграторы АСУ ТП, где один инженер ведёт несколько проектов одновременно.
-
Технические руководители, которым нужно быстро разложить ТЗ по исполнителям-программистам.
Для крупных проектных организаций с выстроенными процессами ценность меньше — там обычно есть специализированные инженеры-постановщики задачи. Но для рынка небольших интеграторов, где один человек и ТЗ читает, и код пишет — инструмент закрывает реальную боль.
Выводы
PLC Smart Splitter — редкий пример ИИ-инструмента, заточенного под специфику промышленной автоматизации, а не очередной «AI-помощник для всего». Разработчики не пытаются заменить инженера — они автоматизируют конкретную, хорошо описанную рутину, которую все ненавидят.
Технически решение не самое сложное (Python + Flask, внешний LLM-провайдер), но инженерная мысль в алгоритме профилирования таблицы и семантической нарезки ТЗ заслуживает уважения. Именно эти части — не вызов к LLM, а собственная логика — делают продукт надёжным на «грязных» реальных данных.
Из пожеланий: было бы здорово видеть поддержку PDF и DOCX напрямую (без ручной конвертации), возможность выбора альтернативных LLM-провайдеров (например, Ollama для полностью офлайн-работы на закрытых объектах), и прозрачное ценообразование на сайте.
Ссылки:
-
GitVerse: gitverse.ru/plcstudio/PLC_Smart_Splitter
-
Видеообзор:
Если вы работаете в сфере АСУ ТП и пробовали подобные инструменты — расскажите в комментариях, как решаете задачу декомпозиции ТЗ сейчас. Интересно, насколько широко распространена эта боль и есть ли у коллег собственные скрипты или подходы.
ссылка на оригинал статьи https://habr.com/ru/articles/1043986/