— С этим надо что-то делать!

Такими словами встретил меня мой руководитель, главный инженер одного из фармацевтических предприятий, расположенного неподалёку от Москвы. Спорить с ним я не собирался – у нас действительно была проблема, и с ней действительно надо было что-то делать. Причём делать быстро, качественно и из подручных средств; и так уж вышло, что из этих самых подручных средств у нас оказался только технологический контроллер М3000-Т производства НВП «Болид»…


Тяжёлой поступью шагал по миру коронавирус. Стараясь обеспечить адекватный ответ на возникшую угрозу, фармацевтические заводы росли, как грибы после дождя. Все спешили, и в условиях строящегося производства просто-напросто забыли про то, что единственную на весь завод компрессорную следовало бы автоматизировать. Теперь же технические службы пожинали плоды своей неосмотрительности. Каждый раз, когда на компрессорном оборудовании возникала какая-то неполадка, дежурная смена узнавала об этом только по факту падения давления в воздушной магистрали. Основная опасность ситуации состояла в том, что воздух использовался в качестве энергоносителя для нужд КИПиА, в том числе – противоаварийной автоматики. Соответственно, допустить снижение давления ниже определённого порога было нельзя.

Задача выглядела следующим образом:

  • Используя имеющийся шлюз Elektronikon Mk5, обеспечить получение данных о давлении и основных аварийных сигналов с двух компрессоров Atlas Copco, двух осушителей и воздушного ресивера.
  • Вывести указанные сигналы на систему SCADA.
  • Обеспечить рассылку сообщений об авариях на e-mail.

После поскребания по сусекам там был найден технологический контроллер М3000-Т с MasterSCADA на борту – относительная новинка, ранее нами не используемая. До этого, насколько мне известно, НВП «Болид» занималось только специальной автоматикой: охранными системами и устройствами противопожарной защиты. И вот в 2018 году кому-то пришла в голову неплохая мысль на имеющихся производственных мощностях изготовить и выпустить на рынок собственный дешёвый контроллер общепромышленного назначения.


Характеристики устройства, как говорится, звёзд с неба не хватают: Cortex A9 Core 1.0 ГГц, 512 мегабайт оперативной памяти, часы реального времени, 4 четыреста восемьдесят пятых интерфейса, один двести тридцать второй, Ethernet. Общий объём энергонезависимой памяти – 4 Гб. Ни дискретных, ни аналоговых входов/выходов устройство не имеет. На контроллере предустановлена MasterSCADA 4D поверх linux. Имеется поддержка Modbus, веб-визуализации и всех основных промышленных языков программирования по стандарту МЭК. Всё это добро упаковано в характерный для Болида хлипкий корпус из тонкого пластика. Форм-фактор – привычный для тех, кто хоть раз взаимодействовал с системами противопожарной защиты. Размещение интерфейсов на плате показалось жутко неудобным – кабели приходится заводить прямо вовнутрь прибора, пыльников под них нет, поставить лицевую панель на место довольно трудно. Встроенный датчик снятия панели постоянно отщёлкивается, чем невероятно раздражает. Крепится контроллер на стандартную дин-рейку.


Начать решили с физической части – нашли место в шкафу, повесили контроллер, протянули линию связи с компрессорной: 100 метров 4-жильного пожароустойчивого кабеля, фольгированного и в металлической броне. Не то, чтобы это был необходимый минимум, просто прокладка происходила в сложных условиях, и обычный UTP пришлось бы вести в гофро-рукаве, что увеличило бы сроки выполнения работ. Затем контроллер был подключен к локальной сети – все операции, кроме первичной настройки, проводились удалённо.

В качестве теста сборки и подключения была написана простейшая конфигурация, выводящая на экран информацию о том, включён или выключен компрессор №1. Как такового программирования на этом этапе не потребовалось – SCADA позволяет привязать состояние логического входа напрямую к элементу HMI (в нашем случае – эллипс, становящийся зелёным при включении компрессора, и красным – при его выключении).

Здесь начались первые проблемы. Во-первых, лицензию SCADA требовалось предварительно активировать, во-вторых, отсутствовала адекватная документация с адресацией Modbus на Elektronikon Mk5. Активация лицензии, по идее, не должна была вызвать никаких сложностей. Мы просто заходим в режим активации, получаем код устройства, нажимаем «Отправить разработчику», и… и ничего не происходит. Не появляется страничка с контактами, не создаётся форма в Outlook, не происходит автоматическая отправка – система просто считает, что окей, кнопка нажата, всего хорошего. Обращаемся к мудрости интернета, и выясняем, что код нужно скопировать, и отправить на общую почту разработчика MasterSCADA, компании Insat. Через какое-то время (фактически – в течение суток) представитель разработчика пришлёт ответное письмо с ключом; этот ключ необходимо сохранить, и указать в среде разработки SCADA путь к нему. Всё это делается вручную, и не совсем понятно, как быть, если контроллеров не один-два, а полторы сотни.

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

Пробуем ещё раз, потом ещё один – результат остаётся прежним. Во время третей итерации замечаем, что статус лицензии поменялся. То есть ключ загружен и исправно работает, но система всё равно ругается на то, что ошибка успешно допущена.

Среда разработки благополучно заливает программу на контроллер, а мы, тем временем, приступаем к подбору адресов Modbus. Вручную, включая и выключая оборудование и изменяя его статус со встроенных панелей.

Методом проб и ошибок было выявлено, что в нулевом регистре (Coil) прячется статус оборудования, в седьмом – наличие аварийных сигналов, а первый аналоговый вход отвечает за давление в ресивере компрессора и температуру точки росы в осушителе. Относительно беспроблемно собираем данные по Modbus RTU, обрабатываем, и вот тут MasterSCADA начинает раскрывать свои сильные стороны.

Во-первых, это невероятно удобная система привязок переменных к объектам. Например, нам нужно, чтобы цвет текста менялся при возникновении значения True на дискретном входе. Для этого мы просто находим нужный вход в дереве проектирования, и перетаскиваем его на параметр «цвет текста» нужного объекта. И всё, дело сделано – как по мне, очень удобно, просто и интуитивно.

Во-вторых, это комфортный инструмент для создания визуализации. Неплохой набор шаблонов для HMI, в том числе – анимированных.

В-третьих, встроенный функциональный блок работы с e-mail, не требующий вообще никакой настройки – вбил необходимые адреса и пароли, и всё заработало.

Не обошлось и без минусов: область проектирования организована неудобно, всё в куче; экран, на котором собирается визуализация, очень маленький. При «относительном» режиме позиционирования после загрузки конфигурации на контроллер текст превращается во что-то пугающее, но эта проблема решается переключением в «абсолютный» режим. Интуитивно не понятно, каким образом добавить дополнительные входы в логические функциональные блоки: конструкцию «А или Б или В или Г» пришлось сперва разбить на «А или Б» и «В или Г», а затем выполнять окончательную дизъюнкцию уже над результатами этих операций.

После определённых танцев с бубнами удалось получить вот такой прототип:


Просто, дёшево, сердито – как, собственно, и требовалось.

Система реализована, запущена, и на сегодняшний день успешно функционирует. В ходе реализации мы пришли к выводу, что на данный момент стек М3000-Т + MasterSCADA 4D ещё сыроват. Среда разработки требует доведения до ума, и, кроме того, имеет хороший запас чувствительных ошибок – в этих условиях «вешать» что-то критически важное на Болид по меньшей мере некомфортно. В то же время, и у М3000-Т, и у MasterSCADA 4D, как самостоятельного продукта, есть явный потенциал занять свою нишу в качестве удобного средства малой и средней автоматизации на направлениях, не требующих валидации надёжности.

P.S. В ходе дальнейшего развития указанной в посте системы возникла необходимость подключения к ней программируемого реле SiemensLOGO. К сожалению, из этого ничего не вышло — при внешне правильных настройках обмен данными почему-то не идёт. Если кто-то имеет опыт успешного решения подобной задачи — буду рад обсудить в комментариях.