Продолжаем разговор про АСУ ТП и устройство котельной, начатый в прошлой статье. Сегодня поговорим про программное обеспечение (ПО), которое ей управляет. А для лучшего понимания дальнейшего текста давайте окинем взглядом программные компоненты контроллера Wiren Board.
Архитектура ПО контролера
Сам контроллер Wiren Board работает под управлением Debian Linux. Поэтому софт контроллера не является чем-то застывшим, пользователь может менять набор программ в широких пределах. Многие программы, написанные под Linux, будут работать на Wiren Board. И сейчас работают — нашими программистами написана только часть сервисов, все, что подходит из стороннего софта, мы активно используем.
Только не надо думать, что мы берем дистрибутив Debian и заливаем его на контроллер, как есть. Наши специалисты отобрали только необходимые пакеты, тщательно протестировали их и выпустили свой дистрибутив, который регулярно обновляется при помощи стандартных инструментов Linux.

Центральным компонентом ПО контроллера является MQTT-брокер Mosquitto, через который программы (MQTT-клиенты) обмениваются информацией между собой. Причем, к брокеру могут обращаться любые программы: как работающие на контроллере, так и имеющие доступ к контроллеру по сети (если в настройках брокера им это разрешено). Поэтому возможности интеграции с контроллером очень широкие.
Для работы с «железом» предназначены драйверы. В частности, в данной котельной используются модули ввода-вывода, подключенные к GPIO контроллера и его последовательным портам. Для работы с ними (GPIO и портами) используются драйверы wb-mqtt-gpio и wb-mqtt-serial соответственно (префикс wb- обозначает, что это написано нашими программистами). Эти драйверы опрашивают модули и передают полученную информацию MQTT-брокеру (публикуют сообщения). А тот рассылает уведомления о поступивших данных всем программам, которые эти данные ждут (подписаны на MQTT-топики). И в обратную сторону все тоже работает — драйверы ждут команд (на включение реле, на изменение напряжения …) в определенных MQTT-топиках. И если какая-либо программа опубликует туда значение, оно драйвером будет передано «железке», и та выполнит соответствующее действие.
Движок правил wb-rules служит для выполнения скриптов. Скрипты пишутся на языке JavaScript, а wb-rules дает программисту дополнительные инструменты (объекты, функции), облегчающие взаимодействие с «железом» через MQTT. Повторюсь, в данной котельной все управление построено на wb-rules.
Сервис wb-mqtt-db предназначен для хранения истории изменения значений (трендов в терминах АСУ ТП). Чтобы пользователь мог посмотреть график в веб-интерфейсе контроллера, например. Или скачать файл со значениями за определенный период и обработать самостоятельно.
Еще есть шлюзы, которые передают сторонним программам или устройствам значения из MQTT по нужному интерфейсу в нужном протоколе. Например, wb-mqtt-mbgate изображает из себя Modbus RTU/Modbus TCP slave-устройство, у которого можно запросить значения. Только предварительно надо сконфигурировать соответствие MQTT-топиков и регистров, а также в каком именно формате отдавать значения.
Ну и для взаимодействия с пользователем на контроллере работает веб-приложение, которое реализует веб-интерфейс пользователя. Т.е. серверная часть веб-приложения работает на контроллере, клиентская — в веб-браузере устройства пользователя (тач-панель, компьютер, телефон/планшет и т.д.). И неважно, как вы подключились к контроллеру — по локальной сети, через Интернет или USB-шнурок в контроллер воткнули, веб-интерфейс будет вам доступен.
А уже в веб-интерфейсе есть:
страница настроек, на которой можно настраивать контроллер и подключенное к нему оборудование, обновлять их ПО и настраивать службы операционной системы;
инструментальные средства для создания и редактирования панелей пользователя;
среда разработки и отладки скриптов, включающая в себя редактор кода и табло для вывода сообщений;
страница для работы с историей (построитель графиков за произвольный период, экспорт исторических данных в файл);
модуль уведомлений, который позволяет настроить отправку email/SMS/Телеграм-сообщений о событиях, происходящих на контроллере (получено значение, которое равно, или не равно, или больше чем, или меньше чем, или вне интервала);
средство для работы с системными журналами Linux.
Есть и еще различные программные компоненты, но в данной котельной они не используются, поэтому и говорить про них не будем. А вот на то, что используется, давайте посмотрим внимательнее.
Страница настроек
Первым делом, после всех электрических подключений, оборудование надо настроить. Подробный рассказ про все настройки, доступные в веб-интерфейсе контроллера, потребует написания отдельной статьи, а то и не одной — возможности очень широки.
Поэтому перечислю только главное:
1. Все настройки и самого контроллера, и подключенного к нему оборудования, производятся в веб-интерфейсе контроллера, т.е. настраивать котельную можно удаленно.
2. Интерфейс настроек интуитивно понятен, здесь не надо знать коды, или структуру конфигурационных файлов — все параметры подписаны и к ним есть комментарии.
3. Есть инструмент для создания пользовательских настроек. Они будут выглядеть точно так же, как и системные настройки.
4. Все настройки сохраняются в файлы, их можно архивировать, версионировать, скачивать, переносить на другие контроллеры и т.д.


Сам процесс настройки оборудования данной котельной состоял из шести шагов:
1. настроить подключение контроллера к сети (Ethernet, Wi-Fi, GSM…);
2. обновить ПО контроллера;
3. указать, к каким разъемам контроллера каки�� модули подключены;
4. запустить сканер Modbus-устройств — он сам определяет, какие устройства к каким портам подключены, и приводит параметры их RS-485 портов к настройкам портов контроллера;
5. обновить прошивку Modbus-модулей;
6. настроить каждое из Modbus-устройств (какие датчики на какие входы подключены, какая логика используется).
Обратите внимание на пункт 5 — этот сервис умный, сам определяет, какую и откуда скачивать прошивку для каждого устройства, и как ее корректно установить. Ручного вмешательства почти не требуется. Но принудительно ничего не обновляется — все в ваших руках.

В веб-интерфейсе предусмотрены пользователи и роли. Роль «Администратор» дает пользователям, относящимся к ней, доступ ко всем настройкам и служебным страницам контроллера. А у роли «Пользователь» есть доступ только к пользовательским панелям и минимальным настройкам самого интерфейса. Поэтому персонал котельной, не имеющий доступа к «Администратор», не сможет влезть в настройки и сделать что-то несанкционированное.
Железо настроили, теперь можно заняться и бизнес-логикой, то есть, настройкой непосредственно котельной.
Панели пользователя
После подключения к контроллеру вы попадаете на его домашнюю страницу. Как правило, это одна из пользовательских панелей, какая именно — настраивается.

Панели бывают текстовые и SVG. На скриншоте выше вы видите текстовую панель. Да, такие панели не балуют пользователей обилием виджетов. И пользовательский интерфейс получается аскетичным, но вполне удобным. Хотите большего — используйте SVG-панели.
SVG-панели
Если возможностей текстовых панелей вам не хватает, вы можете использовать SVG-панели. То есть, просто нарисовать в векторном графическом редакторе произвольное изображение в формате SVG, и «оживить» его при помощи специальных инструментов, которые вам предоставляет веб-интерфейс.

Тут уже ограничений почти нет, рисуй что хочешь. А далее привязываете клик на нарисованной кнопочке, например, к переключению нужного вам реле. Или к переключению виртуального выключателя, которое будет обработано скриптом, выполняющим уже любую последовательность действий.
При клике по элементу есть возможность не только отправлять команды в устройства (как физические, так и виртуаль��ые), но и переключаться между панелями. Так что можно создать достаточно сложный, многостраничный интерфейс пользователя.
Специалистов компании «Феррон-строй» и их клиентов текстовые панели вполне устраивают. Особенно скоростью создания — накидать интерфейс котельной можно за час. А вот если перестанут устраивать, перейдут на SVG-панели. Либо начнут использовать SCADA-систему.
Wiren Board и SCADA
На контроллер можно установить SCADA-системы, как платные, так и бесплатные. В частности, на нем давно, успешно и на множестве объектов работают:
MasterSCADA;
IntraSCADA;
Rapid SCADA;
SCADA Симплайт.
Этим списком все не ограничивается, есть еще множество ПО, которое так или иначе можно интегрировать с Wiren Board. Так что есть из чего выбрать.
Указанные SCADA-системы имеют собственный веб-интерфейс, то есть, вы из браузера можете подключаться как к веб-интерфейсу самого контроллера, так и к веб-интерфейсу работающей на нем SCADA. Инструментальные средства для разработки проектов, как правило, требуют десктопного приложения, а на контроллере работает только Runtime-система. Но в той же IntraSCADA и инструментальные средства работают на контроллере, и доступны через веб-интерфейс.
Посмотрите еще раз на домашнюю страницу веб-интерфейса контроллера котельной. В разделе «Панели» как раз видны все текстовые панели, разработанные инженерами «Феррон-строй» для персонала, обслуживающего котельную. На странице «Статус» мы видим все необходимое для оценки текущего состояния котельной «одним взглядом». Ну а дальше идут страницы тех подсистем, которые мы обсуждали: газ, котлы, подпитка…
Еще скриншоты




Еще хочу обратить ваше внимание на значок, п��являющийся, если тапнуть по любому значению в веб-интерфейсе.

Если тапнуть уже по нему, то откроется история изменения этого значения, или тренд.
История (тренды)
Здесь веб-интерфейс запрашивает данные от wb-mqtt-db. По умолчанию открывается тренд за последние сутки.

Этот тренд можно посмотреть на графике, или в таблице. Еще эти данные можно скачать в виде CSV-файла и обработать самостоятельно.
Конечно можно изменить границы временного интервала. Можно добавить на график (и в таблицу) другие интересующие нас значения (кнопка «Добавить канал»), и строить достаточно сложные графики.

По трендам выше видно, что разница температуры и уставки в контуре отопления поддерживается с точностью до 0.5 градуса, что очень хорошо.
Еще обращу ваше внимание на то, что есть линия графика, а есть фон соответствующего цвета. Суть в том, что данные от датчиков могут поступать очень часто, и выводить все значения на экран и в таблицу смысла не имеет. Поэтому при выборе временного интервала он разбивается на разумное (для вывода на экран) количество подинтервалов. Дальше для каждого подинтервала вычисляется среднее, максимальное и минимальное значение. Среднее значение выводится в виде линии, а диапазон минимум-максимум — в виде фона. И пользователю очень просто на графике оценить, как менялось значение.
Во всем этом нет ничего сверхестественного, стандартные функции для работы с трендами. Но, подчеркну, все это доступно в веб-интерфейсе контроллера «из коробки».
В заводской поставке wb-mqtt-db настроен на сохранение всех сигналов, с которыми работает контроллер, с ограничением количества записей в БД.

Настройки интуитивно понятны: всего хранить не более 100 тыс. записей, при этом не более 10 тыс. записей на канал. И эти настройки далеко не оптимальны.
Если у вас будет 10 быстро меняющихся сигналов, то они забьют базу менее, чем за сутки, своими записями. Да и сами сигналы разные, не может быть оптимальной настройки для всех: значения температуры «прилетают» несколько раз �� секунду, а состояния выключателей могут не меняться месяцами. Поэтому предусмотрена возможность создания групп архивируемых сигналов, с индивидуальными настройками. Заносите выключатели в одну группу, датчики — в другую, измерители параметров электрической энергии (самые быстроменяющиеся) в третью — профит.
В этой котельной так и сделано.

Состояния переключателей хранятся все, без ограничений на количество записей в интервал времени.
Значения температур хранятся долго, чтобы можно было делать анализ за отопительный период, но пишутся редко, и быстрые изменения не отслеживаются.
А вот значения измеряемых давлений долго хранить смысла не имеет — нужны они только для расследования происшествий, поэтому много записей не хранится, но быстрые изменения будут записаны, поскольку они наиболее информативны.
Есть еще группы для сигналов аварий (алармы), статусов контроллеров (программные модули, не железо), и данные с измерителей параметров электроэнергии. Расписывать не буду, думаю, принцип вам понятен.
Еще обращу ваше внимание на то, что в историю попадают не только цифры и логические значения (включено/выключено), но и текстовые значения. Например — статусы программных контроллеров. Представить себе график из текстовых значений сложно, но это может быть информативно, поэтому покажу.

На данном графике хорошо видно, как и с каким запаздыванием меняется температура котла после смены статуса (переключения режима) его программного контроллера. Под контроллером в данном случае подразумевается та часть скриптов управления котельной, которая управляет этим котлом.
А раз уж заговорили про скрипты, давайте перейдем к движку правил wb-rules.
Движок правил wb-rules
Программисты в последнее время стали дорогостоящими, и не всякая компания может себе позволить содержать в штате профессионального программиста. Ситуацию спасает то, что всякий успешный бизнес старается тиражировать свои технические решения.
В штате «Феррон-строй» программиста тоже нет. Есть фрилансер, работающий удаленно, с которым компания сотрудничает давно и успешно. Он, работая над первой котельной, написал библиотеку, в которой есть функции, реализующие необходимые алгоритмы управления оборудованием. Теперь эта библиотека используется на всех объектах. А штатному наладчику, немного знакомому с программированием, достаточно подключить эту библиотеку и привязать программные объекты к физическому оборудованию, чтобы все заработало. Выглядит это так.

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

На скриншоте выше, в числе прочих настроек, есть строка «Уставки» — это и есть настройки котельной. Сама страничка «Конфигурационные файлы» доступна только при работе от «Администратора», что логично. Посмотрим на «Уставки».

Все подробно и наглядно, на человеческом языке. И, самое важное — после нажатия «Записать» новые данные не только сохранятся в файл, но и рестартуется движок правил wb-rules, что приведет к чтению новых уставок.
Модуль уведомлений
Помимо охранника, реагирующего на уведомления 24/7, есть персонал, обслуживающий котельную. Это и сервисные инженеры, и главный инженер санатория, да и многие руководители предприятий хотят быть в курсе, что там происходит на их энергообъектах. Для них для всех самый удобный способ получения уведомлений — в мессенджер. Телефон всегда с собой, а на ночь/выходные уведомления можно автоматически блокировать, пусть охранник разбирается в соответствии со своей инструкцией, куда звонить и кого вызывать.
В этой котельной уведомления доставляются в Телеграм, в специальный канал, на который подписаны все заинтересованные лица. Сообщения присылает чат-бот котельной.

Поясню по скриншоту выше (специально узнавал): это хроника трагедии. 7 ноября в 12:23 на ГРУ подскочило давление газа, тут же был закрыт ГГК, в результате чего давление газа после клапана упало (горелки еще работают), и реле высокого давления газа пришло в норму. А трагедия в том, что сервисному инженеру вместо обеда пришлось ехать в котельную и разбираться с ГРУ.
Из неочевидного: в сообщениях видно, кто их просматривал. И если сервисный инженер, который был на смене, сообщение не прочитал — получит от начальника. Поэтому читают все своевременно. И сам канал становится таким журналом событий, происходящих в котельной. Здесь же можно и дать комментарий к событию, задать вопрос… короче, удобная штука.
Тут вы должны спросить: «А как это работает?» Отвечу: этим как раз и занимается модуль уведомлений.
Он умеет отправлять уведомления:
по электронной почте;
СМС-сообщениями (если на контроллере установлен GSM-модем);
в чат Телеграм (если у контроллера есть выход в Интернет).
Можно сразу всеми тремя способами. И одно и то же уведомление может отправляться на разные адреса эл. почты, разные номера телефонов и в разные чаты. Как настроите, ограничений практически нет.
А настраивается элементарно.

Я тут только конфиденциальную информацию убрал (токен Телеграм-бота и идентификатор Телеграм-чата). Регистрация бота и получение токена выполняется стандартными средствами Телеграм.
Также можно слать уведомления с произвольным текстом прямо из скриптов wb-rules, для этого есть функции Notify.sendEmail('to', 'subject', 'text'), Notify.sendSMS('to', 'text') и Notify.sendTelegramMessage('token', 'chatId', 'text'). Делают они все то же самое.
Да, вот так вот все элементарно. Но уведомления — это еще не все. Иногда нужно разобраться, что происходило в котельной в определенный момент времени. И полагаться в этом на канал в Телеграм наивно, нужен более надежный источник информации. И такой источник есть - это системные журналы.
Журналирование
В операционной системе Linux есть развитая система журналирования. Весь софт контроллера пишет туда сообщения, связанные со своей деятельностью. В основном аварийно-предупредительные, но также и все то, что программист посчитал нужным сохранить.
Сервис wb-rules тоже журналирует свою деятельность. И из скриптов есть возможность оставить в его журнале произвольное сообщение. Это очень удобно для анализа того, как котельная работает. Или для разбора нештатных ситуаций.
В веб-интерфейсе контроллера есть специальная страничка для работы с журналами. Посмотрим на нее.

Мы видим журнал сервиса wb-rules, последние записи. Если скроллить журнал вниз, будут выводиться более старые записи. Еще можно выбрать момент времени, начиная с которого мы хотим видеть записи.
Сейчас выведены только записи, относящиеся к wb-rules. Мы можем выбрать любой другой сервис, либо смотреть все записи в общем списке.
Есть возможность фильтрации сообщений. Сейчас отобраны записи, содержащие «controller_pump». И мы видим, как работает управление насосами. Четко видна ротация насосов в 11:00.
Можно отфильтровать журнал по типу сообщений — выбрать только аварийные, например. Или аварийные и предупредительные. Или любое другое сочетание.
Удобно? Удобно. И информативно.
Теперь давайте обсудим уровни автоматизации. Да, автоматизация может быть многоуровневой. И между уровнями тоже надо передавать информацию.
Трансляция сигналов
Одна из задач контроллера котельной — передавать состояние сигналов, имеющихся у него, на более высокий уровень АСУ ТП. В данном случае — с уровня управления котельной на уровень диспетчеризации предприятия, которым является SCADA-система на диспетчерском пункте той организации, которая владеет санаторием. Она (эта организация) не только санаторием владеет, поэтому и содержит целый диспетчерский пункт. И передавать туда нужно не все сигналы, а выборочно.
Принимать в SCADA информацию им было удобно по протоколу Modbus RTU. Помните, я рассказывал про wb-mqtt-mbgate? Именно он тут и используется. Настройки элементарны.

После заполнения этой таблицы контроллер начнет отвечать на запросы Modbus-мастера, которым является SCADA. И, при получении запроса значения регистра 20004 от устройства с адресом 2, контроллер отправит в ответ последнее известное значение «забортной» температуры.
Для специалистов, обслуживающих SCADA, была сделана панель «В SCADA», чтобы они могли увидеть отправляемые им значения, и корректно настроить их прием.

На время настройки была сделана панель, да прижилась — нет ничего более постоянного, чем временное решение.
Подытожим. В котельной веб-интерфейс контроллера выведен на тач-панель, висящую на щите автоматики, которая работает всегда. У охранника такая же панель висит на стене, тоже работает всегда, пищит при необходимости привлечь внимание. При потере связи с контроллером тоже пищит.
Контроллер и эти панели подключены к компьютерной сети санатория и выделены в отдельную VLAN, чтобы ограничить доступ.
Связь контроллера с диспетчерским пунктом осуществляется через Интернет, с использованием VPN, средствами которой обеспечивается защита соединения.
Прочий персонал, имеющий отношение к котельной, получает уведомления в Телеграм, и в любой момент может подключиться к контроллеру, используя свое мобильное (или не мобильное) устройство. А вот как это сделано? И как там обеспечивается безопасность? Ответ — Wiren Board Cloud.
Wiren Board Cloud
Безусловно, удаленный доступ к веб-интерфейсу контроллера из любой точки мира очень удобен. Но встает вопрос информационной безопасности — а ну как жулики получат доступ к управлению котельной, потом греха не оберешься.
В штате «Феррон-строй» специалиста по информационной безопасности, который мог бы выстроить надлежащую защиту, нет. Да и не дело инжиниринговой компании заниматься такими вопросами. Поэтому они воспользовались нашим готовым облачным решением — Wiren Board Cloud (далее WBC). У нас нужные специалисты в штате есть.
WBC, в первую очередь, предоставляет защищенный доступ к веб-интерфейсу, файловому менеджеру и консоли контроллера. А бонусом идут фичи для организаций, которые эксплуатируют большое количество контроллеров Wiren Board: разграничение доступа, метрики, инвентаризация…
Выглядит работа с облаком так: пользователь с любого своего устройства (компьютер, планшет, телефон) авторизуется на wirenboard.cloud, и видит доступные ему организации с их контроллерами. И может подключиться к любому из них.

Для защиты соединения используется специальный крипточип, установленный на контроллере. С его помощью производится авторизация контроллера на WBC, шифрование и прочие операции, связанные с защитой соединения от посторонних глаз.
Немаловажно и то, что наша техподдержка занимается и WBC тоже. Поэтому ситуации, что связь с контроллером пропала, а никто ничего не делает, не возникает.
Ну и вишенка на торте — WBC бесплатен. Там есть платные опции, но специалистам «Феррон-строй» они вряд ли когда-либо понадобятся.
Чувствую, пора закругляться, а то повествование мое затянулось. А закончить я хочу вот чем.
О промышленном оборудовании, сертификации и прочем
На эту тему в комментариях к прошлой статье разгорелась целая баталия. Люди часто считают, что для управления котельной нужно какое-то специальное оборудование, производимое «для котельных». Или «промышленное». И оно обязательно должно быть каким-то особенным образом сертифицировано.
Так вот. Никакого «промышленного» оборудования не существует, нет такой классификации в нормативной документации. Соответственно, нет и такой сертификации. Есть требования к условиям эксплуатации, к характеристикам, к уровню электрической опасности… Так что все зависит от задачи.
В котельной есть задачи, требующие особого оборудования и его сертификации. Такого оборудования, как менеджер горения на горелке, например. Или сигнализатор загазованности. А вот команду на включение горелки может отдавать любой прибор, поскольку безопасность обеспечивается менеджером горения.
Еще пример. Если у вас в котельной будет работать паровой котел с давлением пара выше 0.7 бар (поднадзорный Ростехнадзору), то у него будет сертифицированный шкаф управления. Но при помощи любого другого оборудования вы можете взаимодействовать с ним — разрешать/запрещать работу котла, задавать уставку, интегрировать автоматику котла в систему автоматизации более высокого уровня и т.д.
Повторюсь, все зависит от задачи. И если у вас нет особых требований, то не нужно и особое оборудование, подойдет любое, какое есть под рукой, или какое больше нравится. А на реальном производстве у большинства задач нет особых требований. И наше оборудование прекрасно подходит для их решения.
Поэтому не бойтесь заниматься АСУ ТП. Потому что АСУ ТП — это очень просто. И очень интересно.
