[Модуль] ModBus (modbus)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4278
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1476 раз
Контактная информация:

Re: модуль modbus

Сообщение sergejey » Чт окт 26, 2017 9:49 am

slex_s писал(а):Пробовал использовать модуль Modbus для опроса и управления (10 устройств х 40 регистров), но сам модуль периодически отваливался. После долгих попыток связать устройства через модуль с системой отказался от этой затеи. Решив сделать связь MJD и Openscada (мощная система для нижнего уровня) через MySql полет отличный
А что отваливалось? Могли бы вместе разобраться всем на пользу.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Geban
Сообщения: 132
Зарегистрирован: Вс июл 14, 2013 2:42 pm
Благодарил (а): 6 раз
Поблагодарили: 23 раза

Re: модуль modbus

Сообщение Geban » Чт ноя 09, 2017 11:47 pm

может быть я щас буду баянить, но мажордомо не умеет работать с RS485 (последовательным портом) в модуле modbus. Но это решаемо. Есть шикарный проект https://github.com/3cky/mbusd который представляет из себя шлюз между RS232(USB свисток) и MODBUS TCP. работает просто. Втыкаете в сервак преобразователь интерфейса (usb свисток), смотрите как он определился или

Код: Выделить всё

ls /dev/tty* 
собираете mbusd, запускаете

Код: Выделить всё

mbusd -p /dev/ttyUSB1 -s 115200 -P 503
где /dev/ttyUSB1 - ваш свисток, 115200 скорость шины modbus, 503 сетевой порт на который будет транслироваться протокол.
Дальше в мажордомо в модуле модбас создаете подключение на localhost и порт 503 (ну или какой укажете при запуске шлюза), остальные параметры зависят от вашего устройства которое будете опрашивать.

Если запустить шлюз на параметром -d то будет видно обмен через шлюз(полезно при отладке).
Для автозапуска можно прописать это дело в /etc/rc.local

собственно все вышеописанное справедливо для Linux, тем кто живет на винде предписаны боль и страдания )
За это сообщение автора Geban поблагодарил:
shefus (Вс май 20, 2018 11:27 am)
Рейтинг: 1.25%
Geban
Сообщения: 132
Зарегистрирован: Вс июл 14, 2013 2:42 pm
Благодарил (а): 6 раз
Поблагодарили: 23 раза

Re: модуль modbus

Сообщение Geban » Пт ноя 10, 2017 12:24 am

Sl1ng3R писал(а):Всем привет.
Столкнулся с новой для себя темой, а именно RS485.
Есть счетчик электроэнергии, с RS485. Нева 324 (Тайпит)
В качестве "считывателя" использую Moxa NPort 5130A.
Настройки на скриншотах, что выставить в модуле modbus MJ с трудом понимаю (ну кроме адреса и порта).
Данные явно идут, как их поймать в MJ?

МОХА это просто преобразователь интерфейса.
Для того что б все срослось она(МОХА) должна уметь определять протокол и правильно его конвертить либо счетчик должен уметь работать по MODBUS TCP (RTU).
Суть в том, что протокол MODBUS RTU и MODBUS TCP(RTU) имеют одинаковые поля, одинаковую длину и тайминги, но за счет того что в MB TCP он обернут собственно в TCP то из пакета модбас выпиливается контрольная сумма а вместо нее используется контрольная сумма TCP пакета. и получается что мажордом ждет на входе TCP пакет без контрольной суммы modbus внутри, а получает полноценный RTU пакет завернутый в TCP. Поэтому и не работает
Maikl1551
Сообщения: 2
Зарегистрирован: Сб фев 03, 2018 1:56 am
Благодарил (а): 0
Поблагодарили: 0

Re: модуль modbus

Сообщение Maikl1551 » Сб фев 03, 2018 2:09 am

sergejey писал(а):Добавил в последние обновления модуль ModBus.

Возможности:
* Подключение к устройствам ModBus по протоколам TCP/UDP
* Операции чтения данных: FC1, FC2, FC3, FC4 (реле, входы, регистры)
* Выбор функции преобразования прочитанных данных (float, integer, string и т.п.)
* Операции записи данных: FC5, FC6, FC15, FC16 (реле и регистры)

Присутствует возможность установки связанного объекта (свойства) -- для операций чтения в объект будут переносится прочитанные данные, для операций записи изменение свойства автоматически отправит данные на устройство.

Для операций чтения надо выставлять время опроса (в секундах), для операций записи не обязательно, точнее лучше его делать очень большим (запись через связанные свойства будет осуществляться мгновенно и даже без запуска цикла опроса ModBus)

Пример экрана настройки устройства:

Изображение

После добавления первого устройства надо перезапустить систему, т.к. цикл опроса ModBus-устройств запустится только если есть хоть одно устройство.
Maikl1551
Сообщения: 2
Зарегистрирован: Сб фев 03, 2018 1:56 am
Благодарил (а): 0
Поблагодарили: 0

Re: модуль modbus

Сообщение Maikl1551 » Сб фев 03, 2018 2:19 am

всем привет! кто сможет помочь, объяснить что не так. есть устройство Modbus на ардуино мега. из mojordomo отправляю команды write single coil, все ровно работает, ардуино принимает реле включается. но в обратном направлении, инфа с датчика температуры ds18b20 идет как то не нормально, то есть в mojordomo отображается на буквально секунду и пропадает на 10 на 5 секунд и опять на секунду появляется . и так всегда. что это может быть кто поможет. настройки как положено как и выше. FC3 holding register/ INT to Integer и другие пробовал.
Аватара пользователя
barsmaster
Сообщения: 60
Зарегистрирован: Пн апр 03, 2017 12:21 pm
Откуда: Киев
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: модуль modbus

Сообщение barsmaster » Чт мар 01, 2018 6:23 pm

Помогите разобрать данные с устройства.
Не получается самому разобрать.
Модулем вычитываю все регистры, получаю следующее:
0,16,134,151,35,65,48,50,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
На самом устройстве данные светятся так: https://gyazo.com/7aacbe9afcf221c547d0ec294790d285
var1=108697
var2=datetime
var3=0.006
var4=0
var5=0.006

История
0,16,134,151,35,65,47,50,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
0,16,134,151,35,65,47,56,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
0,16,134,151,35,65,48, 9,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
0,16,134,151,35,65,48,24,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
0,16,134,151,35,65,48,44,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
0,16,134,151,35,65,48,50,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0
0,16,134,151,35,65,50,15,0,0,0,6,0,0,0,0,0,6,35,65,1,65,0,12,2,14,0,0,0,0,0,0,0,0,0,0

Видно что данные меняются, в частности время.

Вижу что есть пары регистров 0,0,0,6 нужно получить 0.006.
Вопрос, как? какое преобразование использовать?
andrusha7778
Сообщения: 65
Зарегистрирован: Сб авг 12, 2017 11:03 am
Благодарил (а): 7 раз
Поблагодарили: 0

Re: модуль modbus

Сообщение andrusha7778 » Ср май 02, 2018 11:17 am

Добрый день.
Подскажите пожалуйста, каким образом можно получить данные через модуль modbus, если требуется сделать это не по-расписанию (когда в цикле идет опрос каждую секунду) а одномоментно, сразу скажем после вызова какого-то метода?
Аватара пользователя
Sapizdullin
Сообщения: 354
Зарегистрирован: Сб фев 18, 2017 9:47 am
Благодарил (а): 41 раз
Поблагодарили: 54 раза

Re: модуль modbus

Сообщение Sapizdullin » Сб май 19, 2018 1:29 pm

Господа! Решил прикрутить железяку по ModbusTCP к МД. Итог ниже:

Код: Выделить всё

2018-05-19 13:22:43 FC2 Error: <pre>readInputDiscretes: START
Connected
Packet: 8aea0000000601020000000a
Send
Wait data ... 
Data received
Packet: 8aea00000003018202
</pre> Exception: Modbus response error code: 2 (ILLEGAL DATA ADDRESS) in /var/www/html/modules/modbus/ModbusMaster.php:205
Stack trace:
#0 /var/www/html/modules/modbus/ModbusMaster.php(302): ModbusMaster->responseCode('\x8A\xEA\x00\x00\x00\x03\x01\x82\x02')
#1 /var/www/html/modules/modbus/ModbusMaster.php(415): ModbusMaster->readCoilsParser('\x8A\xEA\x00\x00\x00\x03\x01\x82\x02', '10')
#2 /var/www/html/modules/modbus/ModbusMaster.php(352): ModbusMaster->readInputDiscretesParser('\x8A\xEA\x00\x00\x00\x03\x01\x82\x02', '10')
#3 /var/www/html/modules/modbus/modbus.class.php(227): ModbusMaster->readInputDiscretes('1', '0', '10')
Куда копать?
Intel(R) Core(TM) i7-6700, Debian 9 "Stretch", Zoneminder, Avreg.
Aven
Сообщения: 510
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 2 раза
Поблагодарили: 125 раз

Re: модуль modbus

Сообщение Aven » Сб май 19, 2018 7:10 pm

andrusha7778 писал(а):
Ср май 02, 2018 11:17 am
Добрый день.
Подскажите пожалуйста, каким образом можно получить данные через модуль modbus, если требуется сделать это не по-расписанию (когда в цикле идет опрос каждую секунду) а одномоментно, сразу скажем после вызова какого-то метода?
Подключить библиотеку:

Код: Выделить всё

   require_once 'ПУТЬ/ModbusMaster.php';
Создать экземпляр класса:

Код: Выделить всё

   $modbus = new ModbusMaster(адрес, протокол);
Примеры работы смотрите в исходниках модуля.
Aven
Сообщения: 510
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 2 раза
Поблагодарили: 125 раз

Re: модуль modbus

Сообщение Aven » Сб май 19, 2018 7:11 pm

Sapizdullin писал(а):
Сб май 19, 2018 1:29 pm
Господа! Решил прикрутить железяку по ModbusTCP к МД. Итог ниже:
Куда копать?
Ну он же выдает ошибку ILLEGAL DATA ADDRESS, значит неверный адрес регистра задан, устройство это и сообщает.
Ответить