Модули и протоколы взаимодействия

Ниже приведено описание программных модулей применительно к контроллерам Inspark, либо совместимые с платформой SEM NEXT. Но, следует заметить, что описание протоколов взаимодействия между программными модулями, а также между контроллером и сервером, позволяет сторонним разработчикам контроллеров реализовать собственный программный слой, который будет совместим с платформой SEM NEXT. При этом, совместимость может быть на низком уровне: в этом случае повторяется протокол взаимодействия между слоем драйверов (партнерский слой) и агентами SEM NEXT, либо на верхнем уровне: в этом случае контроллер реализует протокол взаимодействия с серверной частью SEM NEXT.
Открытость и документированность протоколов взаимодействия позволяет гибко использовать платформа SEM NEXT или ее элементы в партнерских решениях.

На контроллере установлены следующие программные компоненты:

  • управляющая программа;
  • сервер очередей контроллера;
  • драйверы устройств

Управляющая программа обеспечивает сбор, обработку и передачу информации из контроллера на сервер сбора, а также управление контроллером как извне, так и автономно. Управляющая программа состоит из следующих компонентов:
- монитор;
- планировщик.

Сервер очередей контроллера (MosquittoMQ) предоставляет остальным компонентам средство информационного взаимодействия по протоколу MQTT. Кроме того, он взаимодействует с сервером очередей на сервере сбора для организации между ними соединения типа «мост» (Bridge) c целью передачи данных между контроллером и сервером сбора.
Драйверы устройств отвечают за аппаратные возможности контроллера и функции внешних подключённых устройств. Они периодически записывают их состояние в очередь MQTT в виде специальных сообщений. Кроме того, указанные драйверы получают сообщения из очереди и отдают команды соответствующим устройствам.

Взаимодействие между программными компонентами контроллера осуществляется исключительно путем обмена сообщениями по протоколу MQTT через информационную шину, которую предоставляет сервер очередей (MosquittoMQ).
Каждое сообщение состоит из полезных данных и метаинформации. Публикатор (Publisher) помещает (публикует) данные и метаинформацию (формирует описанные метаинформацией каналы). Подписчик (Subscriber) подписывается на каналы, определённые метаинформацией. Подписчик может подписываться на любые каналы.
В терминах MQTT транспортируемые данные и метаинформация, формирующая каналы транспорта, представлены строками UTF-8. При этом строки метаинформации формируются из фрагментов, имеющих название топиков (topic).

Для реализации взаимодействия между программными компонентами контроллера используются следующие виды сообщений:

  • сообщения драйверов устройств;
  • исходящие сообщения;
  • входящие сообщения;
  • управляющие сообщения.

Сообщения драйверов устройств помещаются в топики с названиями «/devices/+/+». Каждому измеряемому параметру (сенсору датчика) соответствует отдельный топик, название которого формируется следующим образом:
/devices/<T>_<A>/controls/<K>
где

<T>-	тип устройства (датчика) \\
<A>-	адрес устройства \\
<K>-	имя канала

Если параметр является управляемым, то в соответствующем топике для него имеется подтопик с названием «on», куда записываются значения, которые должны быть переданы на конкретное устройство.
Для каждого канала /devices/<T>_<A>/controls/<K> драйверами устройств записывается статус операции чтения/записи с датчиками/устройствами в топик /devices/<T>_<A>/controls/<K>/meta/error.
Исходящие сообщения помещаются в очередь с целью их передачи из контроллера на сервер сбора. Входящие сообщения поступают в очередь контроллера из сервера сбора. Управляющие сообщения используются для взаимодействия программных компонентов управляющей программы контроллера.
Описание топиков для перечисленных видов сообщений, приведено в следующей таблице (Таблица 1).
Таблица 1 - Перечень топиков сервера очередей, используемых в контроллере

Топик Описание Публикаторы Подписчики
Сообщения драйверов устройств
/devices/+/controls/+ Измеренные значения сенсоров датчиков драйверы устройств монитор
/devices/+/controls/+/on Устанавливаемые значения (например, включение и выключение реле) монитор, планировщикдрайверы устройств
/devices/+/controls/+/meta/error драйверы устройств монитор
Исходящие сообщения
/Controller/Out/Measure Значения измеряемых параметров монитор,планировщик сервер сбора
/Controller/Out/Signal Значения сигнальных параметров монитор,планировщик сервер сбора
/Controller/Out/Event Сообщения о событиях монитора, планировщик сервер сбора
/Controller/Out/InitRequestЗапрос подключения монитор сервер сбора
Входящие сообщения
/Controller/In/Command Команды контроллеру сервер сбора монитор, планировщик
/Controller/In/SetValueУстанавливаемые значения параметров сервер сбора монитор
/Controller/In/InitParam Параметры подключения сервер сбора монитор
Замечание. Топики «/Controller/InitRequest» и «/Controller/InitParam» используются только в режиме инициализации контроллера.

Уровни качества обмена сообщениями (QoS) для различных топиков приведены в следующей таблице (Таблица 2). Таблица 2 – Уровни качества обмена сообщениями

Топик Публикация Получение
/devices/+/controls/+ Определяется конфигурацией драйверов 1 – для измеряемых параметров, 2 – для сигнальных параметров
/devices/+/controls/+/on 2 Определяется конфигурацией драйверов
/devices/+/controls/+/meta/errorОпределяется конфигурацией драйверов 2
/Controller/Out/Measure 1 Определяется конфигурацией сервера очередей
/Controller/Out/Signal 2
/Controller/Out/Event 2
/Controller/Out/InitRequest 2
/Controller/In/Command Определяется конфигурацией сервера очередей 2
/Controller/In/SetValue 2
/Controller/In/InitParam 2

Общая схема информационного взаимодействия программных компонентов контроллера приведена на следующем рисунке.

Взаимодействие между контроллером и сервером сбора также осуществляется путем обмена сообщениями по протоколу MQTT. Для реализации этого взаимодействия на стороне контроллера конфигурируется мост (Bridge) для объединения отдельных топиков очередей локального MosquittoMQ и MQTT сервера на сервере приема SEM NEXT. Параметры конфигурации этого моста записываются в специальный конфигурационный файл сервера очередей контроллера (bridge.conf).
Для каждого контроллера на стороне сервера сбора участвуют:
- три входных топика «/Controller/<Id>/In/+», где <Id> - идентификатор контроллера;
- два выходных топика «/Controller/<Id>/Out/+».
Параметры объединяемых топиков приведены в следующей таблице (Таблица 3). В указанной таблице для каждой пары объединяемых топиков приведены:
- направление передачи данных Direct («OUT» - из контроллера в сервер сбора, «IN» - из сервера сбора в контроллер);
- рекомендуемый уровень качества сервиса QoS.

Таблица 3 – Схема объединения очередей контроллера и сервера сбора для штатного режима функционирования

Топик контроллера Топик сервера сбора Direct QoS
/Controller/Out/Measure /Controller/<Id>/In/Measure OUT 1
/Controller/Out/Signal /Controller/<Id>/In/Signal OUT 2
/Controller/Out/Event /Controller/<Id>/In/Event OUT 2
/Controller/In/ Command/Controller/<Id>/Out/Command IN 2
/Controller/In/SetValue/Controller/<Id>/Out/SetValue IN 2

Для инициализации контроллеров используется выделенный сервер сбора, который для взаимодействия использует следующие топики:
- «/Controller/In/InitRequest» - один топик на все контроллеры для получения от них запросов на инициализацию;
- «/Controller/<SN>/Out/InitParam» - уникальный топик для каждого контроллера, обеспечивающий передачу в контроллер параметров инициализации (здесь <SN> - серийный номер контроллера).
Параметры объединяемых топиков для режима инициализации контроллера приведены в следующей таблице (Таблица 4).
Таблица 4 – Схема объединения очередей контроллера и сервера сбора для режима инициализации контроллера

Топик контроллера Топик сервера сбора Direct QoS
/Controller/Out/InitRequest /Controller/In/InitRequest OUT 2
/Controller/In/InitParam /Controller/<SN>/Out/InitParam IN 2

Измеренные значения

Формат <значение>
Описание <значение> - значение параметра в виде текстового представления числа
Топик /devices/+/controls/+
Публикатор драйверы устройств
Подписчик монитор

Устанавливаемые значения

Формат <значение>
Описание <значение> - значение параметра в виде текстового представления числа
Топик /devices/+/controls/+/on
Публикатор монитор
Подписчик драйверы устройств

Значения измеряемых параметров

Формат M;<IdP>;<время>;<значение>
Описание <IdP> - идентификатор параметра
<время> - дата и время в виде «ДД.ММ.ГГГГ чч:мм:сс»
<значение> - значение параметра (в виде текстового представления целого числа или вещественного числа с фиксированной точкой)
Топик /Controller/Out/Measure
Публикатор монитор
Подписчики планировщик, сервер сбора

Значения сигнальных параметров

Формат S;<IdP>;<время>;<значение>
Описание <IdP> - идентификатор параметра
<время> - дата и время в виде «ДД.ММ.ГГГГ чч:мм:сс»
<значение> - значение параметра (в виде текстового представления чисел 0 и 1)
Топик /Controller/Out/Signal
Публикатор монитор
Подписчики планировщик, сервер сбора

Сообщения о событиях

Формат
Описание <Id события> - идентификатор события \\<время> - дата и время в виде «ДД.ММ.ГГГГ чч:мм:сс»
<Msg> - сообщение с дополнительной информацией о событии
Топик /Controller/Out/Event
Публикаторы монитор, планировщик
Подписчик сервер сбора

Команды контроллеру

Формат
Описание «Id команды> - идентификатор команды, зарегистрированной в базе данных
<команда> - наименование команды
Топик /Controller/In/Command
Публикаторы сервер сбора
Подписчик монитор планировщик

Устанавливаемые значения параметров

Формат
Описание <Id сообщения> - идентификатор сообщения на сервере сбора
<Id параметра> - уникальный идентификатор параметра
<значение> - значение параметра в виде текстового представления числа
Топик /Controller/In/SetValue
Публикатор сервер сбора
Подписчики монитор, планировщик