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

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

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 ''

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

1 Like

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

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

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

Посмотрел все видео на портале вашего коллеги 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 через терминал вроде нормально работал.

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

Ввел:

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

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

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