Перейти к содержанию

Навигация

MEK 104: различия между версиями

 
(не показано 25 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: МЭК 104}}
{{DISPLAYTITLE: Шлюз МЭК 104}}
== Описание ==
== Описание ==
МЭК 104, 104-ый — протокол по ГОСТ Р МЭК 60870-5-104
МЭК 104 — протокол передачи данных в сетях телеметрии и телемеханики, соответствующий требованиям ГОСТ Р МЭК 60870-5-104. Применяется в системах контроля и управления территориально распределенных систем.


Разработан шлюз для трансляции сообщений между MQTT-брокером и системами c поддержкой протокола МЭК 60870-5-104.
Протокол функционирует на базе стека TCP/IP и использует для передачи данных локальные вычислительные сети (LAN) или глобальные вычислительные сети (WAN).
Работает с контроллером Wiren Board 6.
 
Для работы с протоколом МЭК 104 в контроллере Wiren Board используется шлюз для трансляции сообщений между MQTT-брокером и системами c поддержкой протокола МЭК 60870-5-104.
 
Работает с контроллером Wiren Board 6 и 7.
 
== Принцип работы ==
=== Передача сообщений из MQTT в МЭК 60870-5-104 ===
Сообщения MQTT передаются в МЭК 60870-5-104 блоками данных (ASDU) с причиной передачи “спорадически”(3). При подключении нового контролирующего устройства, шлюз автоматически высылает последние известные значения всех включенных каналов. В дальнейшем каждое новое MQTT-сообщение сразу же передаётся в МЭК 60870-5-104.
 
=== Передача команд МЭК 60870-5-104 в MQTT ===
Шлюз поддерживает ASDU с типами:
* одноэлементная команда (C_SC_NA_1);
* команда уставки, масштабированное значение (C_SE_NB_1);
* команда уставки, короткое число с плавающей запятой (C_SE_NC_1).
Обрабатывается первый объект информации в ASDU. Если в конфигурационном файле есть включенный канал для адреса этого объекта информации, шлюз произведёт запись полученного значения в соответствующую тему канала, например, <code>/devices/wb-gpio/controls/5V_OUT/on</code>. Также поддерживается команда общего опроса станции (C_IC_NA_1, QOI равный 20), прочие команды не поддерживаются.


== Установка ==
== Установка ==
Подключаем репозиторий <code>experimantal</code> командой:
<syntaxhighlight lang="bash">echo 'deb http://releases.contactless.ru/experimental/stretch stretch main' > /etc/apt/sources.list.d/contactless-experimental.list</syntaxhighlight>
Обновляем список пакетов командой:
Обновляем список пакетов командой:
<syntaxhighlight lang="bash">apt update</syntaxhighlight>
<syntaxhighlight lang="bash">apt update</syntaxhighlight>
Устанавливаем командой:
Устанавливаем командой:
<syntaxhighlight lang="bash">apt install wb-mqtt-iec104=0.3.0~feature+first-release+0+64a7c63</syntaxhighlight>
<syntaxhighlight lang="bash">apt install wb-mqtt-iec104</syntaxhighlight>
При запуске шлюза происходит автоматическое создание конфигурационного файла <code>/etc/wb-mqtt-iec104.conf</code>.
 
При последующих запусках шлюз анализирует доступные MQTT каналы(контролы) и добавляет их в файл. Активировать передачу данных конкретных каналов можно, редактируя файл <code>/etc/wb-mqtt-serial.conf</code>, либо воспользовавшись онлайн-редактором настроек.
При запуске шлюза происходит автоматическое создание конфигурационного файла.
Структура конфигурационного файла описана [https://wirenboard.com тут].
При последующих запусках шлюз анализирует доступные MQTT каналы(контролы) и добавляет их в этот файл. Активировать передачу данных конкретных каналов можно, редактируя файл конфигурации, либо воспользовавшись онлайн-редактором настроек.


Шлюз подключается к заданому MQTT брокеру и подписывается на сообщения от каналов, указанных в конфигурационном файле. В системах с поддержкой протокола МЭК 60870-5-104 шлюз выступает в роли контролируемой станции и принимает входящие TCP/IP соединения по указаному в конфигурационном файле локальному интерфейсу и порту.
Шлюз подключается к заданому MQTT брокеру и подписывается на сообщения от каналов, указанных в конфигурационном файле. В системах с поддержкой протокола МЭК 60870-5-104 шлюз выступает в роли контролируемой станции и принимает входящие TCP/IP соединения по указаному в конфигурационном файле локальному интерфейсу и порту.


== Передача сообщений из MQTT в МЭК 60870-5-104 ==
== Настройка в веб-интерфейсе контроллера Wiren Board ==
Сообщения MQTT передаются в МЭК 60870-5-104 блоками данных (ASDU) с причиной передачи “спорадически”(3). При подключении нового контролирующего устройства, шлюз автоматически высылает последние известные значения всех включенных каналов. В дальнейшем каждое новое MQTT-сообщение сразу же передаётся в МЭК 60870-5-104.
[[Файл:online-interface.png|300px|thumb|right|Настройка шлюза МЭК-104 в веб-интерфейсе контроллера Wiren Board]]
После установки шлюза его можно настроить в [[Wiren_Board_Web_Interface#Settings_-.3E_Configs_.28.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8_-.3E_.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5.29 | веб-интерфейсе]] контроллера, выбрав из списка файл <code>/etc/wb-mqtt-iec104.conf</code>.
 
В настройках можно указать параметры подключения к MQTT-брокеру и выбрать локальный IP и порт, по которым шлюз будет ожидать подключения. Нажав на кнопку '''«Properties»''' можно добавить дополнительные параметры подключения.
 
Описание структуры конфигурационного файла смотрите '''[https://github.com/wirenboard/wb-mqtt-iec104 в репозитории на Github]'''.
 
По умолчанию шлюз создаёт отдельную группу для каждого устройства. Список групп можно редактировать.
 
[[Файл:edit-interface.png|300px|thumb|right|Список каналов]]
 
Уникальный адрес объекта информации согласно МЭК генерируется при старте сервиса, его можно изменить в столбце '''Unique IEC information object address'''. Также можно поменять тип объекта информации.


== Передача команд МЭК 60870-5-104 в MQTT ==
== Обработка значения измеряемого параметра ==
Шлюз поддерживает ASDU с типами:
С помощью [[Wb-rules | правил]] в контроллере можно реализовать передачу значений параметров различных типов, а также задание апертуры измеренного параметра. Апертура — величина изменения параметра для инициализации передачи этого параметра на верхний уровень спорадически (спонтанно при изменении параметра, не по таймеру).  
* одноэлементная команда (C_SC_NA_1);
* команда уставки, масштабированное значение (C_SE_NB_1);
* команда уставки, короткое число с плавающей запятой (C_SE_NC_1).
Обрабатывается первый объект информации в ASDU. Если в конфигурационном файле есть включенный канал для адреса этого объекта информации, шлюз произведёт запись полученного значения в соответствующую тему канала (например, /devices/wb-gpio/controls/5V_OUT/on). Также поддерживается команда общего опроса станции (C_IC_NA_1, QOI равный 20), прочие команды не поддерживаются.


== Интерфейс онлайн-конфигуратора ==
Для реализации этих функций создается виртуальный датчик который принимает измеренное значение, обрабатывает его и передает уже обработанное значение в шлюз МЭК104.
После установки шлюза его можно настроить в интерфейсе [https://wirenboard.com/wiki/Wiren_Board_Web_Interface#Settings_-.3E_Configs_.28.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8_-.3E_.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5.29 онлайн-конфигуратора], выбрав из списка файл <code>/etc/wb-mqtt-iec104.conf</code>.


Онлайн-конфигуратор позволяет указать параметры подключения к MQTT-брокеру (дополнительные параметры можно выбрать, нажав на кнопку “Properties”) и выбрать локальный IP и порт, по которым шлюз будет ожидать подключения.
Ниже приведен пример преобразования напряжения в ток, аналогичным образом можно выполнить любые преобразования измеренного сигнала с датчика.


[[Image: online-interface.png |500px]]
<syntaxhighlight lang="bash">
var v_input78 = "wb-adc/EXT1_A7_A8"; //Пишем сюда строку-источник НАПРЯЖЕНИЯ с шунта


Ниже показан интерфейс редактирования списка групп и каналов для трансляции из MQTT в МЭК 60870-5-104. По умолчанию шлюз создаёт отдельную группу для каждого устройства. Список групп расположен слева, его можно самостоятельно редактировать.
defineVirtualDevice("CurrentValue", {
    title: "currentvalue",
    cells: {
current: {
    type: "value",
    value: 0,
        forceDefault: true // при каждой загрузке сценария поле будет получать значение 10
},
    }
});


[[Image: edit-interface.png |700px]]
defineRule("ChangeVoltage", {
  whenChanged: v_input78,
  then: function (newValue, devName, cellName)  {
dev["CurrentValue/current"] = newValue/0,0015; //Преобразуем напряжение в ток
  }
});
</syntaxhighlight>
Доработав этот скрипт под свои нужды можно очень гибко обработать сигнал с датчика.  


При выборе конкретной группы в правой части появится список входящих в неё каналов. Каналы так же можно создавать, удалять и редактировать. Столбец '''MQTT device and control''' указывает конкретный канал MQTT. Он формируется из названия устройства и канала. Для первого в списке канала соответствующий топик MQTT будет <code>/devices/wb-m1w2_107/controls/External Sensor 1</code> . Уникальный адрес объекта информации согласно МЭК генерируется при старте сервиса, его можно изменить в столбце '''Unique IEC information object address'''. Также можно поменять тип объекта информации.
Для создания временной зоны используется тот же механизм — создается виртуальный датчик, содержащий поля, с помощью которых можно задавать таймзону.


== Полезные ссылки ==
== Полезные ссылки ==
* [https://support.wirenboard.com/t/podderzhka-mek-60870-5-104/6465 Тема на форуме]
* [https://support.wirenboard.com/t/podderzhka-mek-60870-5-104/6465 Тема на портале поддержки]
* [https://github.com/wirenboard/wb-mqtt-iec104 Репозиторий wb-mqtt-iec104]
translator, wb_editors
4251

правка