Парсим SCADA-конфиг за 20 строк Python — и почему на заводе этого недостаточно

Парсим SCADA-конфиг за 20 строк Python — и почему на заводе этого недостаточно

Когда приходишь на промышленный объект с задачей «разобраться с данными оборудования», первое что делаешь — смотришь что вообще есть. Чаще всего есть SCADA. И в ней — конфиг с тысячами тегов.

Технически вытащить их несложно. Вот как это выглядит на Python за двадцать строк:

import xml.etree.ElementTree as ET import pandas as pd def parse_scada_config(filepath): tree = ET.parse(filepath) root = tree.getroot() tags = [] for tag in root.iter('Tag'): tags.append({ 'name': tag.get('name', ''), 'description': tag.get('description', ''), 'unit': tag.get('unit', ''), 'address': tag.get('address', ''), 'type': tag.get('type', '') }) df = pd.DataFrame(tags) df.to_csv('scada_tags.csv', index=False, encoding='utf-8-sig') return df result = parse_scada_config('project.xml') print(f"Извлечено тегов: {len(result)}")

Запускаешь — получаешь CSV с тысячей строк. Красиво. Быстро. И совершенно бесполезно само по себе.

Что не так с тем, что вышло

Открываешь CSV и видишь примерно вот это:

Парсим SCADA-конфиг за 20 строк Python — и почему на заводе этого недостаточно

Проблемы сразу три:

Первая — описания либо пустые, либо обрывочные. «Давл» — это давление где? На входе? На выходе? Какого агрегата? Инженер, который заполнял конфиг десять лет назад, всё понимал. Он уже не работает здесь.

Вторая — нет привязки к физическому оборудованию. TI_101 — это термометр. Но на каком насосе? В каком цехе? На какой позиции по P&ID? Этого в SCADA нет. SCADA знает адрес в памяти контроллера — и всё.

Третья — нет истории. Тег существует. А когда он появился? Что было до него? Этот насос — тот же, что в паспорте 2009 года, или его заменили в 2018-м и забыли переименовать тег?

Почему это важно

Если вы внедряете EAM или CMMS — систему управления техническим обслуживанием — вам нужен справочник оборудования. Не список тегов. Справочник: что это за агрегат, где стоит, какой заводской номер, когда последний ремонт, какие запчасти подходят.

SCADA даёт вам сырой список сигналов. Это примерно как получить телефонный справочник с номерами без имён — данные есть, смысла нет.

Связать теги с реальными объектами — отдельная работа. Она требует:

  • сверки с P&ID и принципиальными схемами
  • работы с паспортами оборудования (часто бумажными)
  • интервью с механиками и технологами
  • сверки с данными из ERP и складского учёта

Двадцать строк Python решают техническую задачу извлечения. Инженерную задачу понимания — нет.

Что делать с этим на практике

Мы в таких проектах идём по следующей схеме:

  1. Парсим все доступные источники — SCADA-конфиг, выгрузки из ERP, Excel-таблицы механиков, сканы паспортов
  2. Строим черновой реестр оборудования с пометкой источника каждого поля
  3. Разрешаем конфликты — когда два источника говорят разное об одном агрегате
  4. Верифицируем с людьми на объекте — только они знают, что реально стоит в цехе
  5. Отдаём готовый справочник в формате, который принимает целевая система

Шаги 1 и 2 автоматизируются хорошо. Шаги 3–5 — нет. И именно они занимают большую часть времени.