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

Эта статья продолжает серию, в которой мы используем инструменты Data Science с открытым исходным кодом для анализа журналов тревог и событий, созданных системами SCADA.

Это третья статья в серии, включая предыдущие статьи,

  1. Обработка тревожных данных SCADA в автономном режиме с помощью ELK
  2. Стандарты и показатели сигнализации SCADA

В разделе Обработка данных аварийных сигналов SCADA в автономном режиме с помощью ELK было представлено следующее:

  • Введение в промышленные системы управления (также известные как SCADA-системы), их архитектуру и назначение.
  • Введен и установлен стек ElasticSearch (ELK)
  • Журналы тревог и событий из коммерческой SCADA-системы очищены и загружены в ELK
  • Был выполнен простой анализ необработанных тревожных событий с использованием ElasticSearch Kibana и созданы простые информационные панели.

В SCADA Alarm Standards & Metrics было рассмотрено следующее:

  • Стандарты управления тревогами
  • Жизненный цикл тревоги
  • Показатели производительности системы сигнализации

Вот где мы были, но куда мы идем? В этой статье мы будем…

  • Изучите жизненный цикл тревоги
  • Преобразование тревожных событий в записи тревожных сигналов
  • Дополнить записи сигналов тревоги информацией об области процесса и модуле, извлеченной из тега сигнала тревоги.
  • Дополните запись тревоги полезной статистикой

Это позволит нам в следующей статье создавать информационные панели для анализа записей сигналов тревоги с использованием стандартных отраслевых показателей, описанных в разделе Стандарты и показатели сигналов тревоги SCADA.

SCADA-системы

Как обсуждалось в предыдущей статье, SCADA — это общий термин для компьютерной промышленной системы управления. Система SCADA (диспетчерское управление и сбор данных) может использоваться для мониторинга и контроля промышленных процессов, которые могут включать очистку воды, производство, электростанции, продукты питания и напитки и т. д. Фактически, любой промышленный процесс с автоматизированным производственным оборудованием.

будильники

Определение

Назначение аварийных сигналов — предупредить операторов о необычных или опасных условиях процесса, требующих вмешательства.

Жизненный цикл тревоги

На приведенной ниже диаграмме представлен упрощенный жизненный цикл сигнализации, соответствующий стандарту IEC.

Для каждой точки сигнализации контролируемый физический процесс содержит два состояния: нормальное и ненормальное.

Таким образом, каждый аварийный сигнал будет иметь два атрибута: статус аварийного сигнала (нормальный | аварийный) и статус подтверждения (подтвержденный | неподтвержденный). Поскольку сигнал тревоги имеет два атрибута, он может находиться в одном из четырех состояний в любое время. Допустимые переходы состояний показаны на диаграмме ниже.

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

Создание записей тревог из журналов тревог

Файлы журнала, созданные нашей системой SCADA, описывают каждое изменение состояния (они были проанализированы в Обработка данных аварийных сигналов SCADA в автономном режиме с помощью ELK). Чтобы иметь возможность выполнить более подробный анализ аварийных сигналов (как описано в Стандартах и ​​показателях аварийных сигналов SCADA, будут обработаны события перехода состояния, и мы создадим запись аварийного сигнала для полного жизненного цикла каждого аварийного сигнала.

Формат журнала тревог

Имеющиеся у меня файлы журналов тревог были сгенерированы продуктом Schneider Electric CitectSCADA. Файлы изначально были текстовыми файлами с разделителями-пробелами, которые мы предварительно преобразовали в CSV. Ниже приведен пример первых пяти записей типичного файла,

Формат тревожной записи

Ниже приведено определение записи тревоги, которую мы будем хранить в базе данных Elasticsearch.

Подробная информация об отдельных полях приведена ниже.

отметка времени:

Отметка времени, когда была поднята тревога. То же значение, что и raiseTime.

описание:

Описание устройства, вызвавшего сигнал тревоги (например, ток бустерного насоса №1)

приоритет:

Числовое значение, указывающее приоритет тревоги. Для этого набора данных 1–5.

статус:

Статус подтверждения тревоги. (Это внутренняя переменная обработки тревожных событий, и ее не следует записывать в запись тревожных событий).

p_state:

«Состояние процесса» соответствует состоянию тревоги. (Это внутренняя переменная обработки тревожных событий, и ее не следует записывать в запись тревожных событий).

a_state:

состояние тревоги; A, B, C или D в соответствии с диаграммой перехода состояний. (Это внутренняя переменная обработки тревожных событий, и ее не следует записывать в запись тревожных событий).

поднять время:

Отметка времени, когда будильник стал активным.

Время подтверждения:

Отметка времени, указывающая, когда тревога была подтверждена.

RTNTime:

Временная метка, указывающая, когда аварийный сигнал возвращается в нормальное состояние (Return To Normal).

t_active

Продолжительность времени, в течение которого тревога находилась в активном состоянии.

t_ack:

Промежуток времени до подтверждения тревоги.

t_interval:

Промежуток времени от RTN до повторного входа тега в состояние тревоги.

болтовня:

Логическое значение, указывающее, что это вибрирующая тревога (т. е. тревога, которая срабатывает ›2 раза в секунду).

мимолетное:

Логическое значение, указывающее, что это кратковременная тревога (т. е. тревога, которая возвращается в нормальное состояние до того, как оператор успеет что-то предпринять. Принято менее 1 секунды)

код_экипировки

номер_модуля

номер_процесса:

subprocess_no:

№ оборудования:

Дополнительная информация об активах описана ниже в разделе «Увеличение данных».

Тег:

Буквенно-цифровой идентификатор сигнала тревоги.

Увеличение данных

Многие схемы нумерации активов включают данные об активах в идентификатор актива. Анализ записей о тревогах упрощается, если отдельные компоненты идентификатора актива извлекаются и помещаются в отдельные поля записи о тревогах.

Ниже приведена схема, используемая в анализируемых здесь данных,

Для извлечения этих компонентов использовалось простое регулярное выражение.

Код — Создание записи

Код для преобразования данных о событиях тревоги в формате CSV в записи тревог содержится в файле csv-2-record.py, который доступен в следующем Gist.

Основная функция

Основная функция,

  • Обрабатывает входные параметры командной строки
  • Настраивает циклы для перебора всех файлов данных
  • Считывает каждый файл данных в Pandas Dataframe.
  • Обработайте каждую строку Dataframe с помощью конечного автомата

Структура данных

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

Для хранения данных был создан класс AlarmRecord, который включает метод writeOut для записи данных. Класс AlarmRecord — это Python @dataclass, полезная библиотека для управления классами, состоящими в основном из данных.

Используется переменная данных, представляющая собой словарь AlarmRecords, с использованием тега сигнала тревоги в качестве ключа.

AlarmRecords, которые обрабатываются, хранятся в переменной данных (Словарь Python), которая индексируется тегом тревоги (который является уникальным идентификатором).

Государственный аппарат

Для обработки этих записей в журнале тревог требуется конечный автомат.

Поскольку существует только четыре состояния, для создания конечного автомата использовались конструкции it—then—else. Это предел того, что это было бы жизнеспособно, если бы было больше состояний, необходимо было бы использовать более сложную реализацию (например, шаблон состояния GOF).

Мы рассмотрим только два перехода.

Если мы обрабатываем тревожное событие, когда тревожный сигнал активен (on — истина), а тревожный сигнал не подтвержден (ack — ложно), то из нашей диаграммы перехода состояния тревожного сигнала мы знаем, что должны перейти в состояние B.

Это показано в коде ниже,

Если мы обрабатываем событие тревоги, когда тревога активна (on = true) и тревога подтверждена (ack = true), то из нашей диаграммы перехода состояния тревоги мы знаем, что должны перейти из состояния B в C.

Это показано в коде ниже,

Загрузка в Elasticsearch

Файл csv-record-2-es.py (доступный в Gist) используется для загрузки CSV-файлов AlarmRecord в Elasticsearch.

Приведенный ниже код считывает все записи в кадр данных Pandas, а затем использует функцию массовой загрузки в библиотеке Python Elasticsearch для загрузки данных в базу данных.

Будущее

На сегодняшний день мы обработали и проанализировали необработанные файлы журналов аварийных сигналов и создали записи аварийных сигналов. В SCADA Alarm Standards & Metrics мы увидели, что стандарты управления сигналами тревоги определяют 12 показателей производительности для систем управления сигналами тревоги. В следующем выпуске этой серии мы создадим информационные панели с помощью ELK, чтобы оценить производительность наших систем по этим 12 стандартам производительности.

Ресурсы

Полный код находится в следующем Gist.

Читать дальше

Спасибо за прочтение, надеюсь, вам понравилась эта статья.

Чтобы исследовать дальше,

Для поддержки авторов среды рассмотрите подписку.

Не забудьте нажать на кнопку подписаться и подписаться,