В мире промышленной автоматизации интерфейсы HMI устарели, выглядят пугающе и бытует мнение, что чем дороже программно-аппаратный комплекс, тем лучше он будет работать. Молодёжь, которая умеет рисовать красивые "WEB-морды" в этот бизнес не суется, всех пугает так называемые Machine to machine протоколы и интерфейсы, индустрия обросла опытными мужиками, которые понимают как выглядит два байта данных в одном регистре Modbus.

Итак статья для тех, кто столкнулся с задачей преобразовать Modbus RTU TCP в протокол HTTP, который уже можно вытянуть на любую красочную "web-морду", либо другой сервис.

Представим, что вы пришли на производство, в котором уже стоят промышленные приборы - датчики температуры, станки, принимающие\передающие данные по протоколу Modbus RTU TCP, а Вам нужно закинуть некоторые данные в систему мониторинга. Действительно подавляющее большинство систем мониторинга не смогут опросить устройства по Modbus без специального программно-аппаратного шлюза.

Предлагаем бесплатное программное обеспечение Node-Red и контроллер AntexGate и получаем мощный программно-аппаратный комплекс для преобразования различных протоколов. В предыдущей статье мы уже рассмотрели конвертацию ModbusTCP2ModbusRTU.

Первое, что необходимо – это установить программный продукт Node-Red, это делается одним скриптом:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Сделать Node-Red после установки сервисом:

sudo systemctl enable nodered.service

Перезагружаем "железяку":

sudo reboot

Теперь попадаем в среду нашего программного конвертора Node-Red через web браузер по ссылке ip шлюза:1880

В настройках справа устанавливаем плагин node-red-contrib-modbus.

Установка node-red-contrib-modbus
Установка node-red-contrib-modbus
Установка node-red-contrib-modbus
Установка node-red-contrib-modbus

После того, как плагин установлен приступаем к настройке, делается это так же просто из web интерфейса. Нажимаем кнопку меню, импорт, примеры, Modbus-HTTP, импорт.

Импортируем пример Modbus-HTTP
Импортируем пример Modbus-HTTP
Импортируем пример Modbus-HTTP
Импортируем пример Modbus-HTTP

Итак, настройка почти закончилась, нам остается настроить наши модули опроса и записи на нужные параметры Modbus соединения.

Настройка Modbus RTU
Настройка Modbus RTU
Настройка Modbus RTU узел чтения 4 регистров, начина с 512
Настройка Modbus RTU узел чтения 4 регистров, начина с 512

Итак мы настраиваем все 4 узла. В моем случае это опрос Modbus RTU устройства с параметрами аппаратного порта /dev/ttyRS485-1 115200 - 8 - 1 - N. Еще 2 узла отвечают за автоматическое чтение из предустановленных регистров, поэтому я сразу настроил чтение массива 4х регистров начиная с 512, функцией (3) Read Holding Register. Кстати не забудьте собственно подключить конечное устройство к RS485 шине.

Теперь в блоке комментариев вы можете встретить API HTTP для взаимодействия, ниже с ними познакомимся.

## Read

### Flex Read

http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=3&address=0&quantity=1

http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=4&address=0&quantity=1

http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=3&address=0&quantity=5

http://ip:1880/modbus/flex/read?value=0&unitid=1&fc=4&address=0&quantity=5

### Read

http://ip:1880/modbus/read

## Write

### Test HTTP without Modbus

http://ip:1880/modbus/flex/write/test?value=[1,2,3,4,5]&unitid=1&fc=16&address=0&quantity=5


### Flex Write

http://ip:1880/modbus/flex/write?value=10&unitid=1&fc=6&address=0&quantity=1

http://ip:1880/modbus/flex/write?value=[1,2,3,4,5]&unitid=1&fc=16&address=0&quantity=5

### Write

http://ip:1880/modbus/write

Мне были интересны пару запросов, которые прекрасно сработали.

Сначала тестируем функцию записи - пишем значение 123 в Modbus RTU устройство с адресом 16 функцией 6 в регистр 512 ну и длина записи 1 значение. Можно писать и сразу массивы функцией 16 например [1,2,3,4,5] тогда и длина записи соответственно 5.

HTTP запрос записи
HTTP запрос записи

Теперь проверим, записалось ли наше значение в нужное адресное пространство и прочитаем состояние 5-ти регистров начиная с 512 функцией 3.

HTTP запрос чтения
HTTP запрос чтения

Как видим значение записалось. Теперь мы можем внедрить наши данные в любое web приложение.

Контроллер AntexGate в связке с Node-Red или другим софтом является отличным универсальным решением для обработки, пересылки и хранения данных. Прошу прощения за рекламу, однако выше представленный проект Вы можете реализовать на любом "железе" и любой ОС.

Присоединяйтесь к нашему сообществу в Telegram там инструкция к контроллеру.

"Железо" можно получить на тесты, пишите на почту: info@antexcloud.ru (на три месяца для ЮР лиц и ИП)

Комментарии (5)


  1. rski1
    02.07.2024 12:35

    Питон граббер в контейнере


    1. antex_dom Автор
      02.07.2024 12:35
      +1

      Я думаю нужно конкретизировать Ваш комментарий.


  1. RomanKu
    02.07.2024 12:35

    Может железки Вы производите и хорошие, но, туториал на троечку:

    1. Зачем вендовый подход с перезагрузкой железки?

      sudo reboot

      Когда можно просто запустить сервис?

      sudo systemctl start nodered.service

    2. "Ставим Node-red, импортируем пример и пользуем все через параметры в HTTP запросах" - ну это выглядит как выстрел из пушки по комару.

    3. Лично у меня в ряде случаев это компонент начинал сбоить, особенно при высокой интенсивности обмена,

      1. в одном инстансе раз в пару недель теряется связь с адаптером и помогает перезагрузка node-red

      2. на другом, может специфика устройства, но при наличии блока, вычитывающего раз в секунду текущие значения регистров и выполнении записи регистров компонент отваливался и сыпал ошибки с таймаутами в консоль. Мне кажется, что для простого конвертера можно найти более надежное решение.

    4. Ну и с точки зрения безопасности: это рука-лицо, я понимаю, что мануал просто показывает концепцию, но вы же расписали все для ЦА пользователей, которые выполнили команды в консоли и на этом успокоились, при этом в мануале ни слова про безопасность, а потом у нас полгорода остается без света и люди не могут неделю получить свою посылку т.к. база йокнулась.

      1. Node-RED без аутентификации, т.е. по сети кто угодно может подлкючиться и написать свой "код", выполняющий все, что угодно, ну как минимум бы сказали, что можно в настройках добавить пользователей в самом Node-RED

      2. HTTP API (не поднимается язык назвать его RESTом) без аутентификации от слова совсем, всяких rate-limit нет

      3. HTTP API (все еще не могу назвать его RESTом) просто принимает кучу параметров, ну как минимум вынести некоторый уровень абстракции, когда GET /modbus/value_name будет трансформироваться в чтение нужных регистров, которые могут меняться от устройства к устройству, а POST /modbus/value_nameс валидацией значения для записи и для разработчика интерфейса это будут осмысленные запросы.

      4. А есть модули, которые генерируют swagger для HTTP методов в Node-RED, за что разработчик веб интерфейса скажет спасибо

    Я понимаю, что это пример и сам поток был взят из примера, но из текущего описания я могут сделать только один вывод: 9 закладок на статью (на момент написания моего комментария) - 9 потенциально уязвимых системы в наше неспокойное время и хорошо, если это будет не критически важная инфраструктура.


    1. antex_dom Автор
      02.07.2024 12:35

      Спасибо, про безопасность думал хотя-бы вскользь написать,но что-то решил оставить на усмотрение пользователя, хотя если сеть чисто технологическая можно и без авторизации, пром протоколы там гуляют в открытом виде, в интернет конечно нужна защита. Http связку не тестил долго, но сам модуль modbus работает по rtu пол года без перезагрузки, с высокой нагрузкой и разными скоростями, там вдовесок ещё can. Посмотрите, возможно у вас копится очередь сообщений?


      1. NutsUnderline
        02.07.2024 12:35
        +1

        Зато вот если хакеры пройдут внешний периметр то перенастраивать центрифуги установок обогащеного урана им будет легко и удобно :)