Определение данных устройства RS-485


#1

Добрый день!
Собрал щит с вашим оборудованием, порядка 10 устройств, стоят плотно, “плечом к плечу”, приступил к настройке оборудования и-и-и…" Нажмите кнопку + Serial Device , чтобы добавить устройство. Выберите тип устройства (обычно соответствует модели устройства) и укажите его адрес (обычно указывается документации к устройству, для устройств нашего производства указан на корпусе на наклейке — в десятичном формате)". Есть ли возможность узнать эти данные не заглядывая на бок устройства? Очень не хочется перебирать щит, очень много плотно расположенных проводов.


#2

SlayerPlus, добрый день!
Вы можете найти все наши устройства, последовательно опросив их. Остановить wb-mqtt-serial и запустите такую команду:

for i in {1..247}; do modbus_client -mrtu /dev/ttyRS485-1 --debug -a$i -t3 -r0x80 -s2 -pnone; done 2>/dev/null | grep Data: 

Оп последовательно выведет адреса всех найденных устройств на шине:
Data: 0x0001
Data: 0x002e

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

export mbusaddr=0x0001; echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a$mbusaddr -t0x03 -r200 -c 6 | grep Data | sed -e 's/0x00/\x/g' -e 's/Data://' -e 's/s//g'`|  xxd -r -p && echo ''

можно получить текстовое название каждого из устройств.


#3

Я честно говоря в программировании не очень, поэтому выдернул один контроллер, им оказался WB-MPRS6, номер на нем был 37, благодаря номеру успешно добавил устройство, работает. Это номер, который у устройства оказался 37, он рандомно закрепляется за устройствами, у всех по разному?


#4

SlayerPlus, да, этот номер – это Modbus-адрес модуля, число из диапазона 1…247, которое идентифицирует устройство на шине. Задается при инициализации устройства на производстве, может быть произвольно вами изменен при настройке.
Для справки: наша статья про протокол Modbus.


#5

Команды, пример которых я привел выше, просто выполняются в командной строке, не требуют программирования как такового. Вот обучающее видео на тему от нашего уважаемого коллеги Flagman: https://www.youtube.com/watch?v=Isl1m3mSN6Y


#6

Посмотрел все видео на портале вашего коллеги Flagman (кстати, ранее я по его видео прошил контроллер со сбросом настроек), запускать терминал и SSH умею, но что идет не так. Запускаю терминал, пишу ssh root@192.168.0.2, ввожу пароль, попадаю в SSH, останавливаю драйвер командой service wb-mqtt-serial stop, копирую из вашего ответа команду “for i in {1…247}; do modbus_client -mrtu /dev/RS485-1 --debug -a$i -t3 -r0x80 -s2 -pnone; done 2>/dev/null | grep Data:”, правлю в ней RS485-1 на RS485-2, так как у меня всё именно на втором порту подключено, нажимаю запустить и-и-и-и-и… Ничего. Контроллер думает пару секунд, потом предлагает ввести следующую команду. Где я не прав? Ввожу не через Putty на Windows, а через терминал на Mac, пару лет назад с другим девайсом и другим вопросом SSH через терминал вроде нормально работал.


#7

Думаю, дело не в терминале. Попробуйте убрать из команды перебора перенаправление вывода потока ошибок 2>/dev/null, как будет ругаться?


#8

Ввел:

for i in {1…247}; do modbus_client -mrtu /dev/RS485-2 --debug -a$i -t3 -r0x80 -s2 -pnone; done | grep Data:

Получил кучу одинаковы ошибок:

ERROR Can’t open the device /dev/RS485-2 (No such file or directory)
Connection failed: No such file or directory


#9

Не заметил сразу, прошу прощения, пропущено у меня “tty”: /dev/ttyRS485-2 правильно, заменил в сообщении.


#10

Получилось, спасибо!