Ошибка чтения регистров модуля WB-MR6C

Пробую сменить адрес устройства с 16 на 186 и после проверить регистр 128. Вот что получаю:

root@wirenboard-ATNO6FBW:~# modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-2 -a186 -t0x03 -r128

Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)
[BA][03][00][80][00][01][9E][A9]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!

До этого еще не ставил его никуда - начал со смены адреса.
На всякий случай проверил старый адрес, получаю это:

root@wirenboard-ATNO6FBW:~# modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-2 -a16 -t0x03 -r128

Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)
[10][03][00][80][00][01][86][A3]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured

Что не так?

На запрос утилита не получила ничего в ответ. Вариантов довольно много:

  1. Нет питания на модуле (должен гореть зеленый светодиод)
  2. Неправильно выполнено подключение RS-485 (обрыв провода, перепутаны провода А и В, замыкание между проводами А и В)
  3. Неправильно указаны настройки связи (настройки связи в контроллере не совпадают с настройками в модуле): номер порта, скорость, стопбиты, четность, адрес устройства.
  4. Неисправен порт контроллера или модуля.

Можно попробовать получить ответ от модуля перебором всех возможных адресов с помощью скрипта, как написано здесь: https://wirenboard.com/wiki/Wiren_Board_Device_Modbus_Address
или перебором всех возможных комбинаций настроек связи, однако это не очень быстрый процесс: https://wirenboard.com/wiki/UART_Communication_Settings

3 или 4 варианты надо искать. Первые два исключил, другой модуль работает при том же подключении. А скорость устройства можно узнать?

Значит порт контроллера исправен.

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

Значение адреса можно задать, использовав широковещательный адрес 0, предварительно отключив другие устройства кроме проблемного модуля (задается адрес 1):

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1

Можно сбросить настройки приемопередатчика и получить доступ к устройству по инструкции в главе “Восстановление доступа”:
https://wirenboard.com/wiki/Wiren_Board_Device_Modbus_Address

Это касается только текущего порта, остальные можно оставить подключенными?

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

root@wirenboard-ATNO6FBW:~# modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-2 -a0 -t0x06 -r128 1
Data to write: 0x1
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)
[00][06][00][80][00][01][48][33]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!

Пробовал сбросить настройки по инструкции в течение 2-х сек:

root@wirenboard-ATNO6FBW:~# wb-mcu-fw-flasher -d /dev/ttyRS485-2 -a0 -u
/dev/ttyRS485-2 opened successfully.
Send reset UART settings and modbus address command...
Error: Connection timed out.

Делаю вывод, что модуль неисправный. Придется отправлять его Вам

При сбросе адреса командой с широковещательным адресом - это нормально.
Цитата из документации со страницы, ссылку на которую я вам приводил:
“Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой.”
Зеленый светодиод при отправке команды моргает 1 раз?

Попробуйте на контроллере выполнить такую команду:

mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && wb-mcu-fw-flasher -d /dev/ttyRS485-2 -a0 -u
1 лайк

root@wirenboard-ATNO6FBW:~# mosquitto_pub -t ‘/devices/wb-gpio/controls/V_OUT/on’ -r -m 0 && sleep 3 && mosquitto_pub -t ‘/devices/wb-gpio/controls/V_OUT/on’ -r -m 1 && sleep 1 && wb-mcu-fw-flasher -d /dev/ttyRS485-2 -a0 -u

/dev/ttyRS485-2 opened successfully.

Send reset UART settings and modbus address command...

Ok.

Device is in Bootloader now! To flash FW run

wb-mcu-fw-flasher -d -f <firmware.wbfw>

потом попробовал:
root@wirenboard-ATNO6FBW:~# modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-2 -a1 -t0x03 -r110

Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)

[01][03][00][6E][00][01][E5][D7]

Waiting for a confirmation...

<01><03><02><00><60><B8><6C>

SUCCESS: read 1 of elements:

Data: 0x0060

root@wirenboard-ATNO6FBW:~# for i in {1…247}; do echo -n "$i - "; D=modbus_client -mrtu /dev/ttyRS485-2 --debug -a$i -t3 -o100 -r200 -s2 -c6 -pnone 2>/dev/null | grep Data: | awk 'gsub("Data:","")' | sed -e 's/0x00/\\\x/g' -e 's/\s//g'; echo -e $D; done

1 - WBMR6
2 -
3 -

...

247 -

Можно считать что получилось?

А версию прошивки нужно обновить?

Да, все получилось.
Вообще мы всегда рекомендуем использовать последнюю версию прошивки. Но если проблем в работе нет, то можно и не обновлять.

Нашел команду для обновления прошивки и обновился!

Спасибо за помощь!!!

wb-mcu-fw-updater update-fw /dev/ttyRS485-2 -a186

2021-08-02 11:29:04,987 Will find serial port settings for (/dev/ttyRS485-2 : 186)...

2021-08-02 11:29:05,063 Has found serial port settings: {'baudrate': 9600, 'parity': 'N', 'stopbits': 2}

2021-08-02 11:29:06,247 Firmware will be upgraded. Will flash (1.16.2) over (1.14.1).

Sending data block 109 of 110...

2021-08-02 11:29:29,112 Successfully flashed firmware (1.16.2) over (1.14.1)