Rapid SCADA для контроля системы очистных сооружений
В условиях кризиса экономики в стране приходиться работать даже на непрофильных объектах (все-таки основной деятельностью автора статьи является диспетчерский контроль систем учета тепла). Однако программный комплекс Rapid SCADA позволяет строить по-настоящему универсальные системы контроля.
В одном коттеджном поселке Свердловской области чешской компанией были построены очистные сооружения. В рамках этой статьи мы не будет раскрывать технологические аспекты их работы, а остановимся только на вопросах связи и диспетчерского контроля.
В сердце системы очистных был установлен контроллер WAGO с 2 модулями Ethernet, а в качестве HMI интерфейса – сенсорная панель Weintek (см. фото).
Заказчиком была поставлена задача:
- На удаленном пульте (1,4 км) необходимо было получить мнемосхемы с параметрами работы станции очистки, причем так, чтобы они не отличались от локальных (к описанию процесса строительства вернемся в конце статьи).
- Установить камеру видеонаблюдения и обеспечить контроль открытия входной двери в помещение блок-контейнера.
Выдержка из сформированного технического задания:
Требования к АСК (автоматизированной системе контроля) 1. Очистные сооружения Отображения: - мнемосхемы работы очистной станции, согласно панели отображения на объекте. Управление: - согласно схемы управления проекта очистных сооружений. Аварийные сигналы: - согласно перечня аварийных сигналов проекта очистных сооружений (п. 3 ТЗ). Состав оборудования: № Наименование Кол-во, шт. 1 Беспроводной мост Ubiquiti NanoBeam M51 2 Розетка РАр10-3-ОП 220 din 2 3 Коммутатор на DIN 5 портов 1 4 SNR-ERD-3s Устройство контроля и мониторинга 1 5 Сетевая камера Ubiquiti 1 2. Диспетчерская Отображения: - сигналы с объекта Очистные сооружения. Аварийные сигналы: - согласно разработанного плана аварийных сигналов. Состав оборудования: № Наименование Кол-во, шт. 1 Беспроводной мост Ubiquiti NanoBeam M5 1 2 GSM модем (отправка аварийных SMS) 1 3. Перечень аварийных сигналов объекта Очистные сооружения. № Наименование Вид оповещения 1 Дверь входная очистные SMS, журнал 2 Воздуходувка М1 поломка SMS, журнал 3 Воздуходувка М2 поломка SMS, журнал 4 Воздуходувка М3 поломка SMS, журнал 5 Воздуходувка М4 поломка SMS, журнал 6 Воздуходувка М5 поломка SMS, журнал 7 Воздуходувка М6 поломка SMS, журнал 8 Эл.вентиль М7 поломка SMS, журнал 9 Эл.клапан М8 поломка SMS, журнал 10 Эл.клапан М9 поломка SMS, журнал 11 Эл.клапан М10 поломка SMS, журнал 12 Насос М11 в насос.станции 1 поломка SMS, журнал 13 Насос М12 в насос.станции 1 поломка SMS, журнал 14 Насос М13 в насос.станции 1 поломка SMS, журнал 15 Насос М14 в насос.станции 2 поломка SMS, журнал 16 Насос М15 в насос.станции 2 поломка SMS, журнал 17 Насос М16 в насос.станции 2 поломка SMS, журнал 18 Эл.вентиль YV31 АЧБ 1 поломка SMS, журнал 19 Эл.вентиль YV32 АЧБ 2 поломка SMS, журнал 20 Эл.вентиль YV33 АЧБ 3 поломка SMS, журнал 21 Эл.вентиль YV34 АЧБ 4 поломка SMS, журнал 22 Неисправность датчика LIC21 SMS, журнал 23 Неисправность датчика LIC22 SMS, журнал 24 Макс. уровень Насосная стан. 1 SMS, журнал 25 Макс. уровень Насосная стан. 2 SMS, журнал 26 Мин. уровень Насосная стан. 1 SMS, журнал 27 Мин. уровень Насосная стан. 2 SMS, журнал
Главная сложность проекта – это отсутствие исходных проектов (прошивок) панели и ПЛК WAGO. Оценив, что ПЛК и панель соединяются по Ethernet, предположили, что протокол обмена – Modbus TCP. Осталось придумать, как получить карту регистров ПЛК. Подключившись к панели по USB, запроса пароля не произошло, что довольно странно, ведь наладчики систем автоматики, довольно часто ставят защиту на свои проекты.
Радостно скопировав файл project.xob (компилированный файл проекта панели) с помощью EasyBuilder (среда разработки для панелей Weintek) на компьютер, выполняем декомпиляцию:
Рис. 2. Декомпиляция прошивки Weintek
Однако пароль все-таки есть, причем установлен хитро – на декомпиляцию (это когда проект из панели считать можно, но посмотреть, что внутри – только после декомпиляции, и на нее-то как раз и стоял пароль). Порывшись в сети, оказалось, что общедоступных способов взломать пароль нет. Что ж, видимо, придётся отказаться от проекта, но вечер пятницы сделал свое дело, и через пару часов подбора пароля вручную (3 попытки неверных и перезапуск приложения), последовательность из 6 цифр была обнаружена случайно и получено следующее:
Рис. 3. Открытый проект панели Weintek
И все на чешском. Что ж, уже интереснее.
Оказалось, что состояния механизмов характеризуются значениями от 0 до 3, причем эти значения берутся из внутренних регистров панели, а в панель они попадают из регистра хранения 4×15289. Особенностью проекта является то, что панель и ПЛК имеют следующую адресацию Modbus TCP:
Рис. 4. EasyBuilder, объект – битовый индикатор
Обратите внимание, что 01 – номер бита слова, помещенного в регистр 15320. Rapid SCADA по умолчанию, не умеет работать с битовыми регистрами, но это столь мощный продукт, который можно научить.
Напишем функцию, которая из значения регистра, будет получать состояние бита n.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//к входному каналу привязываем регистр и передаем его значение в функцию вместе с номером //интересующего нас бита. public bool GetBit(int CnlNum, int n) { bool status = false; double CnlVal = Val(CnlNum); int val = Convert.ToInt16(CnlVal); //Необходимо для работы с битами string binary = Convert.ToString(val, 2); //к сожалению, лишь подобное преобразование давало 100 % результат. string b = binary.PadLeft(16, '2'); //Дополняем строку до 16 символов слева (C# при ToInt16 проводит неявное преобразование, например до int8 если старшие биты нулевые) if(b[15-n] == '1') //все просто, смотрим номер бита n и его значение 15-n в строке состояний { return true; } return status; } |
Обращаю ваше внимание, что функция написана непрофессиональным программистом, и дальше будет только хуже.
Примечание от Rapid SCADA: Начиная с версии 4.5 функция получения бита GetBit, написанная оптимальным образом, входит в стандартную конфигурацию.
Рассмотрим на примере битового индикатора запуска системы автоматической очистки. Он имеет два положения: 0 – выключено, 1 – включено.
Настроим Коммуникатор для считывания регистра 15320. Обращаю внимание, что в случае чтения регистра состояния битов мы не увеличиваем на 1 адрес регистра, а в случае, если мы считываем число (float), например, характеризующее уровень жидкости, то к адресу регистра нужно прибавить единицу. Такова особенность ПКЛ WAGO.
Создадим канал «Активация регистр» с номером 300, типом Телеизмерение и сигналом 1. В коммуникаторе проверим, что сигнал 1 соответствует считываемому регистру.
Так как в панели используются биты 0-3, пропишем еще 4 канала (Активация 1 — 4, каналы 301 — 304) со следующими параметрами:
Тип: | Дорасчетный ТИ |
Исп. формулу: | флаг установлен |
Формула: | GetBit(300,0) – для первой активации и по аналогии GetBit(300,1) для второй и т.д. |
Таким образом, в каналах 301-304 мы получаем 0 или 1 в зависимости от того, установлен ли бит состояния Активации.
На станции используются механизмы (M1-M6, M7-M10 и M11-M16), состояние которых описывается тремя значениями, и вот тут-то возникает некоторая сложность. Панель Weintek считывает регистры 15289, 15291 и 15293 таким образом:
1 |
GetData(binary[0], "MODBUS TCP/IP", 4x, 15289, 35)// nacteni vsech binaru |
И далее применяет макросы (некие программные функции, выполняемые в зависимости от условий или вызываемые явно при нажатии на экран, в данном случае макрос вызывался при получении данных по Modbus TCP) вида:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
short nula = 0, jedna = 1, dva = 2, tri = 3, ctyri = 4, stav //*************************************** Dmychadlo M1************************************************* GETBIT(binary[0], chod , 0) GETBIT(binary[1], porucha_jistic , 8) if chod == true then // nastaveni barvy stav = jedna end if if chod == false then stav = nula end if if porucha_jistic == true then stav = tri end if SetData(stav, "Local HMI", LW, 101, 1) //устанавливает внутренний регистр панели, в соответствии со значением stav. |
Повторим логику работы макроса, с помощью функций Rapid SCADA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public int SetStateM(int CnlNum1, int CnlNum2, int n, int m) { bool chod = GetBit(CnlNum1, n); bool porucha_jistic = GetBit(CnlNum2, m); int stav = 0; if(chod== true) { stav = 1; } if(chod== false) { stav = 0; } if(porucha_jistic== true) { stav = 3; } return stav; } |
Имена переменных оставим без изменений.
Считаем регистры 15289 — 15293 в каналы 309 — 311 и применим написанную функцию SetStateM(309,310,0,8), где 0 – номер бита в канале 309 (регистр 15289), 8 – номер бита в канале 310 (регистр 15291).
Аналогично напишем функции для оставшихся механизмов, отличающиеся от базовой лишь порядком проверки условий.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public int SetStateM710(int CnlNum1, int CnlNum2, int n, int m, int k) { bool zavreno = GetBit(CnlNum1, n); bool otevreno = GetBit(CnlNum1, m); bool porucha_jistic = GetBit(CnlNum2, k); int stav = 0; if(otevreno == true) { stav = 1; } if(zavreno == true) { stav = 0; } if(!otevreno && !zavreno) { stav =3; } if(otevreno && zavreno ) { stav = 3; } if(porucha_jistic == true) { stav = 2; } return stav; } |
Функция для механизмов YV31-34:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public int SetStateYV(int CnlNum1, int CnlNum2, int n, int m) { bool chod = GetBit(CnlNum1, n); bool porucha_jistic = GetBit(CnlNum2, m); int stav = 0; if(chod == true) { stav = 1; } else { stav = 0; } if(porucha_jistic == true) { stav = 2; } return stav; } |
Все перечисленные выше расчетные состояния механизмов используются для отображения на мнемосхеме.
Как оказалось, единичные состояния (установлен бит или нет) используются для контроля работы: открыт-закрыт, контроль электропитания или отображения поломки. Пропишем их в соответствии с проектом панели с использованием функции GetBit.
А теперь попробуем повторить мнемосхемы:
Рис. 7. Схема насосной станции
Рис. 8. Схема воздуходувной станции
А теперь для сравнения, интерфейс панели, который мы копировали:
Рис. 9. Weintek — Главная схема
Рис. 10. Weintek — Схема насосной станции
Рис. 11. Weintek — Схема воздуходувной станции
Все получилось максимально похоже. Внимательный читатель обнаружит, небольшие нестыковки по значениям времени работы механизмов М1-М6 (например, для машины М5 в Rapid SCADA время работы — 2400 ч, а в панели — 2402 ч), видимо, это связано с системой округления C#. В данном конкретном проекте точность отображения этих параметров несущественна, главное, чтобы порядок значений совпадал.
Не забыли и о контроле открытия двери: к SNR-3rds подключается герконовый датчик, далее по протоколу SNMP передается состояние двери на Multi Protocol Master OPC Server (бесплатный OPC-сервер протокола SNMP на одно рабочее место на 32 тега).
Строительство Wi-Fi канала передачи информации
Объект Очистные сооружения расположен на расстоянии 1,4 км (по разным картографическим системам расстояние разное, возьмем за эталон 1,4 км) от здания диспетчерской.
AP — диспетчерский пункт,
ST_1 — очистные сооружения,
ST_2 — станция скважин (проектируемый объект, об автоматизации которого, будет отдельная статья).
В качестве приемо-передающей аппаратуры, был выбран WiFi беспроводной мост Ubiquiti PowerBeam M5 300mm. Диапазон в 5 GHz был выбран не случайно — в пределах коттеджного поселка эфир 2,4 был перегружен и заниматься подбором свободного канала желания не было.
Антенны были смонтированы на 4 метровые опоры, без использования такелажа, в силу того, что аппаратура имеет вес до 2 кг. По наблюдениям амплитуда колебаний опор составляет до 1 метра при скорости ветра в 10 м/с, что не сказывается на стабильности канала передачи информации. Скорость передачи составляет 78 мегабит в секунду (по 39 мегабит в каждую сторону).
Данные о работе канала передаются по SNMP в OPC сервер и далее в Rapid SCADA в виде ламп состояния (зеленая — канал работает, красная — есть проблемы).
Для просмотра потока с камеры видеонаблюдения, была создана кастомная страница в Rapid SCADA. К сожалению, скриншотов не сохранилось, но принцип прост: создаем <div>, внутри которого запускаем онлайн-плеер с подключением к потоку IP камеры. Все решается на JavaScript.
Рис. 13. Веб-интерфейс Ubiquiti PowerBeam M5 300mm
Рис. 14. Беспроводной мост на очистных сооружениях
Рис. 15. Беспроводной мост на диспетчерской
Работы по монтажу и наладке выполнены, заказчик доволен. Спасибо команде разработчиков Rapid SCADA за удобный инструмент автоматизации, которым можно решать самые разнообразные задачи.
Автор: Пастухов Алексей Владимирович
Начальник отдела ИТ ООО «ЭкспертСервис»
alex.vl.pas@gmail.com
Теги: scada, очистные сооружения