Логи SCADA-систем: что писать, чтобы потом найти ошибку

Друзья, сегодня у нас особенная тема. Если предыдущие статьи были про веб-серверы, Linux и микроконтроллеры, то сейчас мы залезаем на территорию, где цена ошибки измеряется не потерянными клиентами, а сгоревшим оборудованием, остановленным заводом или экологической катастрофой.

Я много лет работал с АСУ ТП и SCADA-системами, и могу сказать честно: подход к логированию здесь совсем другой. То, что прощает веб-приложение, в промышленности убивает.

Чем SCADA-логи отличаются от всего остального

Давайте сразу обозначим разницу.

В обычной разработке мы логируем, чтобы понять, почему упал сервер или где ошибка в коде. Нам важны stack trace"ы, debug-сообщения, детали запросов.

В SCADA логи — это: - Доказательство того, что технологический процесс протекал штатно - Улика при расследовании аварий - Основа для прогнозирования отказов - Документ, который могут затребовать регулирующие органы

Здесь нельзя просто «почистить логи» или сказать «оно само прошло». Здесь логи хранят годами и используют как улики в судах .

Что писать: базовый набор

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

1. Технологические параметры

Это «жизненные показатели» процесса: давления, температуры, расходы, уровни, обороты.

Как писать правильно:

  • Не всё подряд. Эксперты советуют: логируйте только то, что действительно важно . Если вы будете писать каждую миллисекунду с датчика давления, где шум 0.5%, через месяц уто́нете в данных, а сервер захлебнётся.
  • Используйте мёртвые зоны (deadbands). Записывайте значение, только если оно изменилось больше чем на заданный порог. Это сокращает объём логов в десятки раз без потери информативности .
  • Настраивайте интервалы. Для одних параметров достаточно опроса раз в минуту, для других нужна миллисекундная фиксация .

В современных SCADA есть два типа логирования : - Непрерывное — пишем всегда, для постоянных процессов - Триггерное — пишем только при наступлении события (ошибка, авария, смена режима)

2. Дискретные сигналы и состояния

Включился насос, открылась задвижка, сработала блокировка — всё это должно фиксироваться.

Важно: фиксируйте не только факт, но и контекст. Кто дал команду? Из какого режима? С какими параметрами?

3. Аварии и события

Это сердце SCADA-логирования. Здесь нужен максимальный уровень детализации :

  • Время появления сигнала (до миллисекунд, если возможно)
  • Время квитирования (подтверждения оператором)
  • Время снятия (возврата в норму)
  • Приоритет события (информация, предупреждение, авария)
  • Текущие значения связанных параметров на момент события

Пример из жизни: Упало давление в маслосистеме турбины. В логе должно быть не просто "Pressure low", а: 2026-03-03 14:23:45.123 ALARM Pressure low (P-101) value=0.3 bar (threshold=1.5 bar) 2026-03-03 14:23:45.124 INFO Pump P-101 status=RUNNING 2026-03-03 14:23:45.125 INFO Valve V-201 position=100% 2026-03-03 14:23:46.890 EVENT Operator "Ivanov" ACKNOWLEDGED alarm 2026-03-03 14:23:47.120 EVENT Auto-start of backup pump P-102 initiated

4. Действия оператора

В промышленности это критически важно. Кто, когда и что нажимал, должен быть задокументировано .

  • Вход/выход из системы
  • Изменение уставок и параметров
  • Подтверждение аварий
  • Ручное управление исполнительными механизмами

Совет: логируйте не просто "operator changed parameter", а "operator Petrov changed pressure setpoint from 2.5 to 3.0 bar at 14:23:45". Это спасёт при разборе, кто виноват.

5. Системные события SCADA

Сюда входит: - Запуск/остановка серверов - Сбои связи с контроллерами - Переполнение архивов - Ошибки лицензий

Опытные специалисты знают: часто проблема не в «железе», а в том, что SCADA потеряла связь с контроллером и час работала «вслепую» .

Как писать: технические хитрости

Проблема дублирования

В SCADA есть неприятная особенность: при сбоях связи система начинает генерировать лавину однотипных сообщений. В одном форуме Siemens обсуждали случай, когда из-за потери связи с контроллером лог-файлы раздулись до 2 ГБ за пару часов .

Что делать: - Настраивать подавление повторяющихся аварий (похоже на фильтрацию в syslog) - Использовать механизмы подтверждения связи - Для критичных случаев — писать скрипты чистки логов от "шума"

Сжатие и агрегация

Промышленные системы работают годами. Логи за 5 лет могут занимать терабайты. Современные SCADA умеют сжимать данные "на лету", сохраняя тренды, но отбрасывая шум .

Механизм такой: - Сырые данные хранятся неделю-месяц - Затем агрегируются в минутные/часовые интервалы - Долгосрочно хранятся только статистики: min, max, average за период

Резервирование

Потерять логи в промышленности — это катастрофа. Поэтому обязательно : - Резервирование серверов архивации (активный-пассивный или активный-активный) - Географически распределённое хранение (не храните всё в одном цехе — сгорит) - Регулярное тестирование восстановления из бэкапов

Где искать логи

Каждый вендор прячет логи по-своему. Вот шпаргалка по популярным системам.

Schneider Electric / Geo SCADA

Для диагностики OPC UA сервера используется aaLogViewer.exe (лежит в C:\Program Files (x86)\Common Files\ArchestrA). Там можно включать флаги логирования для конкретных компонентов и выгружать логи для поддержки .

Коммуникационные логи делятся на TX (передача) и RX (приём), с подробными статусами: - Rx ACCEPTED — пакет принят - Rx REJECTED — данные прочитаны, но отброшены (неверный формат) - Rx FAILED — ошибка контрольной суммы - Rx PURGED — обрыв связи

Siemens WinCC Unified

В TIA Portal V20 появились встроенные функции управления логированием: - StartTagLog / StopTagLog — для тегов - StartAlarmLog / StopAlarmLog — для аварий - StartAuditLog / StopAuditLog — для действий оператора

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

Где лежат логи: C:\Users\[username]\AppData\Roaming\MPSSoft\MasterSCADA4D\[version]\ProjectsServiceData\[project]\Debug\[node]\PLC\logs

MasterSCADA

Для диагностики обмена по SNMP включается ключ /t в параметрах запуска, после чего логи пишутся в отдельную папку. В логах ищите строки "SNMP driver" .

Bentley SCADAConnect

Если не грузятся данные, включайте Advanced Logging. Логи будут в C:\Users\[user]\AppData\Local\Bentley\[product]\SCADAConnect.log .

Как настроить, чтобы потом найти

1. Используйте цвет и приоритеты

Современные SCADA (например, ESAWARE CREW) позволяют раскрашивать события: - Информационные — серым или зелёным - Предупреждения — жёлтым - Ошибки — оранжевым - Аварии — красным

Это критически важно для оператора, который в стрессе должен мгновенно оценить ситуацию .

2. Добавляйте контекст

Одно дело — "ошибка датчика". Другое — "ошибка датчика давления P-101, текущее значение 0.0, ожидалось 2-4 bar, предыдущее исправное значение 2.3 bar 2 секунды назад".

Контекст — это то, что превращает логи из набора цифр в расследование.

3. Синхронизируйте время

Золотое правило промышленной автоматизации: все устройства должны иметь синхронизированное время.

Если контроллер считает, что сейчас 14:23, а SCADA — что 14:25, вы никогда не восстановите хронологию событий. Используйте NTP-серверы и проверяйте синхронизацию.

4. Настройте допуски по времени

При запросе исторических данных из SCADA в смежные системы (например, в MES или ERP) используйте временны́е допуски. Если SCADA опрашивает контроллер раз в минуту, а вам нужны данные на 12:00:00, разумно брать значения с 11:57:30 до 12:02:30 .

Типичные грабли (на своих ошибках)

Грабли 1: Логировать всё подряд

Был у меня случай: на объекте включили логирование всех тегов с частотой 100 мс. Через неделю архивы заняли 500 ГБ, SCADA начала тормозить, а операторы не могли открыть тренды за последний час.

Решение: Включили голову, оставили только критичные параметры с частотой 1 сек, для остальных — изменения больше 1% .

Грабли 2: Игнорировать качество данных

В SCADA Siemens есть понятие "качество тега" (quality). Если связь с контроллером пропадает, теги получают статус "bad" (quality code 0x14). Но многие забывают, что такие "плохие" данные тоже пишутся в архив и засоряют логи .

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

Что делать: Настраивайте фильтрацию событий по качеству. Например, в WinCC Unified можно через скрипты чистить логи от записей с определённым кодом ошибки .

Грабли 3: Не тестировать восстановление

"У нас есть бэкапы!" — самая опасная фраза в IT и АСУ ТП. Проверьте, сможете ли вы реально восстановить логи годичной давности, если сервер сгорит. И сколько времени это займёт.

Грабли 4: Забывать про регуляторов

Если объект подпадает под регулирование (например, водоканал по стандарту DWA-M 260), требования к логам жёстко прописаны : - Фиксировать все вмешательства оператора - Хранить данные определённое время - Обеспечить невозможность подделки

Лучше закладывать compliance на этапе проектирования, чем переделывать работающую систему.

Промышленный чек-лист

Если вы проектируете или модернизируете SCADA-систему, вот что должно быть в техническом задании на логирование:

  • [ ] Определён перечень технологических параметров с указанием периодичности опроса и мёртвых зон
  • [ ] Настроены уровни аварий и цветовая индикация
  • [ ] Включено логирование действий оператора с привязкой к учётным записям
  • [ ] Настроена синхронизация времени (NTP)
  • [ ] Определены сроки хранения и политика агрегации
  • [ ] Настроено резервирование серверов архивации
  • [ ] Проведено тестирование восстановления из бэкапов
  • [ ] Для объектов с регулированием — проверено соответствие стандартам
  • [ ] Настроена фильтрация "мусорных" событий (повторы, плохое качество)

Вместо заключения

Знаете, чему меня научили годы работы с промышленными системами? Логи в SCADA — это не просто файлы для отладки. Это единственный источник правды о том, что реально происходило на объекте.

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

Поэтому я всегда говорю заказчикам: закладывайте на логирование не меньше 10-15% бюджета автоматизации. Дешёвые логи выходят дороже.

И помните главное: SCADA пишет не для галочки. Она пишет для того дня, когда случится ЧП и вам придётся отвечать на вопрос «Почему это произошло?». Сделайте так, чтобы в этот день у вас были ответы.