В мире промышленной автоматизации интерфейсы 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.
После того, как плагин установлен приступаем к настройке, делается это так же просто из web интерфейса. Нажимаем кнопку меню, импорт, примеры, Modbus-HTTP, импорт.
Итак, настройка почти закончилась, нам остается настроить наши модули опроса и записи на нужные параметры Modbus соединения.
Итак мы настраиваем все 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.
Теперь проверим, записалось ли наше значение в нужное адресное пространство и прочитаем состояние 5-ти регистров начиная с 512 функцией 3.
Как видим значение записалось. Теперь мы можем внедрить наши данные в любое web приложение.
Контроллер AntexGate в связке с Node-Red или другим софтом является отличным универсальным решением для обработки, пересылки и хранения данных. Прошу прощения за рекламу, однако выше представленный проект Вы можете реализовать на любом "железе" и любой ОС.
Присоединяйтесь к нашему сообществу в Telegram там инструкция к контроллеру.
"Железо" можно получить на тесты, пишите на почту: info@antexcloud.ru (на три месяца для ЮР лиц и ИП)
Комментарии (5)
RomanKu
02.07.2024 12:35Может железки Вы производите и хорошие, но, туториал на троечку:
-
Зачем вендовый подход с перезагрузкой железки?
sudo reboot
Когда можно просто запустить сервис?
sudo systemctl start nodered.service
"Ставим Node-red, импортируем пример и пользуем все через параметры в HTTP запросах" - ну это выглядит как выстрел из пушки по комару.
-
Лично у меня в ряде случаев это компонент начинал сбоить, особенно при высокой интенсивности обмена,
в одном инстансе раз в пару недель теряется связь с адаптером и помогает перезагрузка node-red
на другом, может специфика устройства, но при наличии блока, вычитывающего раз в секунду текущие значения регистров и выполнении записи регистров компонент отваливался и сыпал ошибки с таймаутами в консоль. Мне кажется, что для простого конвертера можно найти более надежное решение.
-
Ну и с точки зрения безопасности: это рука-лицо, я понимаю, что мануал просто показывает концепцию, но вы же расписали все для ЦА пользователей, которые выполнили команды в консоли и на этом успокоились, при этом в мануале ни слова про безопасность, а потом у нас полгорода остается без света и люди не могут неделю получить свою посылку т.к. база йокнулась.
Node-RED без аутентификации, т.е. по сети кто угодно может подлкючиться и написать свой "код", выполняющий все, что угодно, ну как минимум бы сказали, что можно в настройках добавить пользователей в самом Node-RED
HTTP API (не поднимается язык назвать его RESTом) без аутентификации от слова совсем, всяких rate-limit нет
HTTP API (все еще не могу назвать его RESTом) просто принимает кучу параметров, ну как минимум вынести некоторый уровень абстракции, когда
GET /modbus/value_name
будет трансформироваться в чтение нужных регистров, которые могут меняться от устройства к устройству, аPOST /modbus/value_name
с валидацией значения для записи и для разработчика интерфейса это будут осмысленные запросы.А есть модули, которые генерируют swagger для HTTP методов в Node-RED, за что разработчик веб интерфейса скажет спасибо
Я понимаю, что это пример и сам поток был взят из примера, но из текущего описания я могут сделать только один вывод: 9 закладок на статью (на момент написания моего комментария) - 9 потенциально уязвимых системы в наше неспокойное время и хорошо, если это будет не критически важная инфраструктура.
antex_dom Автор
02.07.2024 12:35Спасибо, про безопасность думал хотя-бы вскользь написать,но что-то решил оставить на усмотрение пользователя, хотя если сеть чисто технологическая можно и без авторизации, пром протоколы там гуляют в открытом виде, в интернет конечно нужна защита. Http связку не тестил долго, но сам модуль modbus работает по rtu пол года без перезагрузки, с высокой нагрузкой и разными скоростями, там вдовесок ещё can. Посмотрите, возможно у вас копится очередь сообщений?
NutsUnderline
02.07.2024 12:35+1Зато вот если хакеры пройдут внешний периметр то перенастраивать центрифуги установок обогащеного урана им будет легко и удобно :)
-
rski1
Питон граббер в контейнере
antex_dom Автор
Я думаю нужно конкретизировать Ваш комментарий.