← Публикации

Обновление SCADA-системы кирпичного завода

Как мы модернизировали WinCC и развернули горячее резервирование на действующем предприятии непрерывного цикла, не останавливая производство.

В этой статье мы поговорим о старине…

Особенностью работы с производственными предприятиями «с историей» является регулярно возникающая потребность в общении с оборудованием, которое было установлено пять, десять, пятнадцать, двадцать и более лет назад. Что характерно, это оборудование работает! В том случае, конечно, если в своё время оно было сделано на совесть, с душой и с головой.

От тех людей, которые берутся за его модернизацию, это обстоятельство требует такого же добросовестного подхода: чтоб стало не хуже, а, желательно, лучше, чем было. Это во-первых. А во-вторых, такого рода вмешательства требуют предельной аккуратности и некоторых специальных навыков работы с тем, что на жаргоне айтишников называется Legacy, проще говоря, стариной.

Сложность не только в технической экзотике. Современному программисту, даже выпускнику хорошего вуза, в страшном сне не приснится, к примеру, контроллер, к которому можно подобраться только через приложение MS-DOS… Но с этим ещё как-то можно разобраться «на столе».

Это не капризы и не фантазии. Так оно чаще всего и бывает на самом деле.

Работа кропотливая, ответственная и никогда не повторяющаяся. Как раз как мы любим.

Постановка задачи

Тринадцать лет назад на предприятии, производящем строительную керамику, была установлена SCADA-система на базе платформы WinCC версии 7.0, новейшей на тот момент.

Ничего удивительного: современные кирпичные заводы ничего общего не имеют с мануфактурами, на которых в постоянном пекле полуголые люди в рукавицах, подшитых автомобильным протектором, перекладывают горячие кирпичи с одного поддона на другой. Это сложные производственные комплексы, оснащённые собственными лабораториями и включающие сотни единиц оборудования: датчиков, приводов, горелок, вентиляторов, конвейеров и много всего другого, управляемого десятком-другим контроллеров. Такому хозяйству необходима хорошая SCADA.

Исходная конфигурация
Сервер
HP Proliant DL380P Gen8
ОС
Windows Server 2008 R2
SCADA
WinCC 7.0 → 7.3 SE
Контроллеры
4× Siemens S7-300
В работе с
2013 года

Система, в частности, собирала телеметрию с туннельной обжиговой печи, агрегаты которой работали под управлением контроллера Siemens S7-300. Система позволяла задавать кривую обжига, отслеживала режимы работы вентиляторов, от дымососов на входе до зоны охлаждения на выходе, делала ещё много других полезных вещей. За прошедшие годы система приняла на себя ещё три контроллера, превратившись в полноценный центр управления обжиговой и сушильной печами.

Однако даже для Пролиантов тринадцать лет — уже, мягко говоря, зрелость. Да, они надёжны, как автомат Калашникова, да, они чинятся в полевых условиях без инструмента, для них полно запчастей на вторичном рынке… Но всё же.

Руководство приняло разумное решение. Пусть будет два сервера. Один сломается — другой сможет работать.

Сказано — сделано. Купили, поставили. Такой же в точности, чтобы на нём старый проект запустить без проблем. Запустили. Работает! Два сервера независимо собирают данные со всех контроллеров. Хранят в своих базах. Всё отлично.

Но всегда есть «Но». В данном случае целых два.

Проблема первая: дырки в базах

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

Проблема вторая: ручное переключение клиентов

Клиентские машины, с которых, собственно, и происходит работа с сервером SCADA-системы, настроены на один конкретный сервер. Клиентов несколько: у оператора сушилки, у оператора обжига, у технолога… Если вдруг этот сервер «отвалится», возникает потребность переключить клиентские машины на другой, живой-здоровый. Вручную. А если ситуация возникнет в неурочное время? Точно не оператор будет этим заниматься.

Решение: Redundancy

Самое обидное в этой ситуации, что у Siemens есть штатное решение для обоих этих «Но». Оно называется чудным заграничным словом Redundancy, что на привычном языке означает «Горячее резервирование». И самое замечательное, что для этого ничего не нужно добавлять или докупать! Оба сервера уже есть в наличии.

Схема горячего резервирования WinCC Три клиентские машины работают с сервером-мастером и при его отказе автоматически переключаются на резервный. Оба сервера независимо опрашивают четыре контроллера S7-300 и синхронизируют архивы между собой. CLIENT 0 Оператор обжига CLIENT 1 Оператор сушилки CLIENT 2 Технолог штатная работа переключение при отказе SERVER #1 МАСТЕР WinCC 7.5 SP2 SERVER #2 РЕЗЕРВ WinCC 7.5 SP2 синхронизация базы и архивы независимый опрос 4 × Siemens S7-300 обжиговая и сушильная печи
Клиенты работают с «мастером» и при его отказе переключаются на резерв сами. Оба сервера опрашивают контроллеры независимо и синхронизируют между собой базы и архивы — этим и «заштопываются» дырки в данных.

Система работает так. Два сервера, две SCADA-системы одинаковой конфигурации. Они знают друг про друга. И договариваются таким образом, что, хотя в процессе работы информацию они собирают независимо каждый в свою базу, но один из них считается «главным». И именно с ним работают клиентские машинки. Второй — «подчинённый». Он просто копит базы данных и наблюдает за «главным» — жив ли он.

Тренд с дыркой в данных
Тренд температуры обжиговой печи: видна «дырка» — пропуск данных при отказе сервера
Статус резервирования — сервер в режиме Резерв
SERVERSCADA4 в режиме «Резерв», партнёр — «Мастер». Синхронизация ещё не выполнена

Неприятность первая: отваливается «подчинённый». Ничего не происходит. «Главный» продолжает работать. Когда «подчинённый» поднимется, «главный» поделится с ним информацией и «заштопает» дырку в его базах.

Неприятность вторая: отваливается «главный». «Подчинённый» это заметит и тут же возьмёт на себя роль «главного». Он даст команду клиентским машинкам: «С этого момента я Главный, и вы работаете со мной!» Клиентские машинки послушно переключатся сами. Сисадмин может спать спокойно. Операторы ничего не заметят: всё произойдёт за миллисекунды.

Статус резервирования — сервер в режиме Мастер
SERVERSCADA5 — «Мастер», партнёр — «Резерв», синхронизация = ДА. Серверы нашли друг друга
Тренд после синхронизации
Тот же участок тренда: после синхронизации «дырка» заштопана данными с резервного сервера

Вавилонская башня

Однако, как известно, всё гладко только на бумаге. К Legacy-системам это правило относится с коэффициентом «Много».

Первое, от чего очень хотелось уйти, — это Windows Server 2008 R2. Далее — поднять версии WinCC до максимально возможных. Ну и, конечно, сам Пролиант.

И вот тут всё пошло не по плану.

Заказчик отказался покупать новые серверы. В этом есть логика: новый современный Пролиант 12-го поколения стоит как приличная иномарка, а тут два «дедушки» Gen8 уже в наличии, меняй им диски, и они ещё двадцать лет прослужат.

Финальная конфигурация
Сервер
HP Proliant DL380P Gen8 + SSP 8.1
ОС
Windows Server 2012 R2 (все обновления)
SCADA
WinCC 7.5 SP2 Upd15
Режим
горячее резервирование (Redundancy)

На Gen8 стабильно ставится Windows Server 2012 R2. Хорошая новость в том, что обновления идут регулярно, расширенная корпоративная поддержка идёт до октября 2026 года. На нём встаёт максимум WinCC 7.5 SP2, обновления которого шли накопительными пакетами вплоть до 2024 года.

Постройка такой «Вавилонской башни» не была лёгкой прогулкой. Например, установка ОС на Пролиант данной модели возможна с флэшки, отформатированной только в формате FAT32. Это древний формат, и файлы размером более 4 ГБ он не поддерживает. Однако файл Install.wim в дистрибутиве Windows Server 2012 R2 имеет размер 4,7 ГБ… И таких нюансов было много.

Стенд и миграция

В итоге для обкатки решения был развёрнут стенд из четырёх серверов HP Proliant DL380P Gen8.

На первом, под Windows Server 2008 R2, была развёрнута исходная SCADA-система WinCC 7.0 и поднята до WinCC 7.3 SE. Ещё на двух серверах под Windows Server 2012 R2 был установлен WinCC 7.5 SP2 Upd15 и проведена миграция проекта. На них же было обкатано взаимодействие двух серверов в режиме горячего резервирования. На четвёртом был поднят Клиент и проверен порядок переключения при различных вариантах неприятностей.

Развёртывание на заводе

Два сервера вместе с клиентом были передислоцированы на предприятие и временно установлены в качестве «боевых». Они встали, увидели контроллеры, увидели друг друга и приняли на себя рабочую нагрузку. Мы собрали-таки новую «турбину» и на ходу подвесили её на крыло!

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

Так закончилась славная эпопея: модернизация SCADA-системы вместе с развёртыванием горячего резервирования на базе платформы Siemens WinCC.

Техническая версия этой статьи с подробностями миграции, SQL, реестра и DCOM

Читать на Хабре