Одинаковые адреса modbus устройств на разных портах

Постепенно радость от покупки wirenboard 8 начинает угасать. Итак:

Вопрос 1: К RS485-1 подключен датчик температуры с адресом 1. Пытаюсь подключить на RS485-2 другой датчик так же с адресом 1. В результате ошибка: “Идентификатор устройства в MQTT совпадает с 25 Сlimate sensor (RS485-2)”. Мало того, через usb подключил внешний преобразователь com-rs485. И так-же не дает подключиться с одним адресом. Это такая фича и у меня ничего не получится?

Вопрос 2: У меня куча климатических датчиков опрашивались в nodejs на компьютере. Обычные сенсоры температуры и влажности. Линия была подключена через тот же преобразователь com-rs485. Работает все на скорости 9600. Уже несколько лет работает вся конструкция без сбоев. Решил перевести в wirenboard. Переключил ту же линию на RS485-1 (и 2, и даже через usb и тот же преобразователь, который работал на компьютере). В результате часть датчиков совсем не видятся, часть валит в лог crc error.

Уважаемые гуру. Поделитесь секретными знаниями. Почему не работает то, что давно отлажено и как запустить.

Добрый день.

Адреса - вполне могут быть и одинаковыми. Но, как совершенно верно написано - идентификатор должен быть уникальным, обязательно. Если формируется, как например при использовании идентичных шаблонов дублирующийся - то для одного из устройств (или для обоих - задайте именно уникальные.
То есть в mqtt должен быть (обязательно) свой топик для каждого устройства.

Покажите пожалуйста что за ошибки? отправленные-принятые посылки, чтобы crc видно было.

Спасибо. Даже не подумал об этом.

Оставил на линии 3 датчика. из nodejs читаются без проблем. Переключаю в wirenboard. 2 из них (23 и 24) не видятся. 25 работает без проблем. Датчики одинаковые. Может быть из разных партий. вот что отвечает modbus_client_rpc:

pi@wirenboard-A7H2CYT2:~$ sudo modbus_client_rpc --debug -mrtu -b9600 -pnone -s1 /dev/ttyRS485-1 -a23 -t0x03 -r0 -c2
2026-10-02 17:51:13,138 [DEBUG] [17][03][00][00][00][02][c6][fd]
2026-10-02 17:51:13,141 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-10-02 17:51:13,142 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 9600, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 1, ‘response_size’: 9, ‘format’: ‘HEX’, ‘msg’: ‘170300000002c6fd’, ‘total_timeout’: 1000} (1000 timeout ms)
2026-10-02 17:51:13,724 [DEBUG] Options: {‘debug’: True, ‘mode’: ‘rtu’, ‘slave_addr’: 23, ‘read_count’: 2, ‘start_addr’: 0, ‘func_type’: 3, ‘timeout’: 1000, ‘address_decrement’: False, ‘baudrate’: 9600, ‘data_bits’: 8, ‘stop_bits’: 1, ‘parity_port’: ‘N’, ‘mqtt_broker’: ‘unix:///var/run/mosquitto/mosquitto.sock’, ‘serialport_host’: ‘/dev/ttyRS485-1’, ‘write_data’: }
ERROR occurred
2026-10-02 17:51:14,726 [DEBUG] Error message: Server error
2026-10-02 17:51:14,726 [DEBUG] Error code: -32000
2026-10-02 17:51:14,727 [DEBUG] Error data: Port IO error: Serial protocol error: request timed out
pi@wirenboard-A7H2CYT2:~$ sudo modbus_client_rpc --debug -mrtu -b9600 -pnone -s1 /dev/ttyRS485-1 -a24 -t0x03 -r0 -c2
2026-10-02 17:51:21,023 [DEBUG] [18][03][00][00][00][02][c6][02]
2026-10-02 17:51:21,025 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-10-02 17:51:21,027 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 9600, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 1, ‘response_size’: 9, ‘format’: ‘HEX’, ‘msg’: ‘180300000002c602’, ‘total_timeout’: 1000} (1000 timeout ms)
2026-10-02 17:51:21,596 [DEBUG] Options: {‘debug’: True, ‘mode’: ‘rtu’, ‘slave_addr’: 24, ‘read_count’: 2, ‘start_addr’: 0, ‘func_type’: 3, ‘timeout’: 1000, ‘address_decrement’: False, ‘baudrate’: 9600, ‘data_bits’: 8, ‘stop_bits’: 1, ‘parity_port’: ‘N’, ‘mqtt_broker’: ‘unix:///var/run/mosquitto/mosquitto.sock’, ‘serialport_host’: ‘/dev/ttyRS485-1’, ‘write_data’: }
ERROR occurred
2026-10-02 17:51:22,598 [DEBUG] Error message: Server error
2026-10-02 17:51:22,599 [DEBUG] Error code: -32000
2026-10-02 17:51:22,600 [DEBUG] Error data: Port IO error: Serial protocol error: request timed out
pi@wirenboard-A7H2CYT2:~$ sudo modbus_client_rpc --debug -mrtu -b9600 -pnone -s1 /dev/ttyRS485-1 -a25 -t0x03 -r0 -c2
2026-10-02 17:51:28,472 [DEBUG] [19][03][00][00][00][02][c7][d3]
2026-10-02 17:51:28,475 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2026-10-02 17:51:28,476 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 9600, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 1, ‘response_size’: 9, ‘format’: ‘HEX’, ‘msg’: ‘190300000002c7d3’, ‘total_timeout’: 1000} (1000 timeout ms)
2026-10-02 17:51:28,529 [DEBUG] RPC Client ← {‘response’: ‘190304029300c953f1’}
2026-10-02 17:51:29,531 [DEBUG] Response: 190304029300c953f1
2026-10-02 17:51:29,532 [DEBUG] <19><03><04><02><93><00><53>
SUCCESS: read 2 elements:
Data: 0x0293 0x00c9

Но иногда проскакивает сообщение с ошибкой crc error. И очень редко проскакивает без ошибок.

Вот тут хочется подробностей.

NodeJS - имеется в виду компьютер? Шина переключается с чего (с какого устройства)?
Ну и как эта шина выполнена. Длина, из чего сделана, какие терминаторы.
Соединен ли (и надежно) Gnd.

По одному запросу - мало для диагностики.
Проверьте сотней, например. При этом лучше остановить wb-mqtt-serial
systemctl stop wb-mqtt-serial
ну и поверить циклом, по сотне, например, чтений.

for i in {0..100}; do modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyRS485-1 -a23 -t0x03 -r0 -c2; done

Большинство таймаутов, из практики - это устройство не получило запрос или получило его с ошибкой. И, соответственно не ответило.
На самих устйоствах есть какой-то индикатор активности связи?

На NodeJS на компьютере написана процедура опроса датчиков. Используется библиотека modbus-serial Подключено через silicon labs cp210x usb to uart bridge. В цикле раз в секунду опрашивает 23, 24 и 25 устройство. Ошибок от устройства нет. Линия: витая пара Датчики подключены на расстоянии 10 м друг от друга. На последнем стоит 120 ом Специально сделал такой стенд. Результат тестирования 23 устройства:

pi@wirenboard-A7H2CYT2:~$ for i in {0..100}; do sudo modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyRS485-1 -a23 -t0x03 -r0 -c2; done
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[17][03][00][00][00][02][C6][FD]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[17][03][00][00][00][02][C6][FD]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!

25 устройста

pi@wirenboard-A7H2CYT2:~$ for i in {0..100}; do sudo modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyRS485-1 -a25 -t0x03 -r0 -c2; done
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[19][03][00][00][00][02][C7][D3]
Waiting for a confirmation…
<19><03><04><02><57><00>
SUCCESS: read 2 of elements:
Data: 0x0257 0x00b0
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[19][03][00][00][00][02][C7][D3]
Waiting for a confirmation…
<19><03><04><02><57><00>
SUCCESS: read 2 of elements:
Data: 0x0257 0x00b0
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[19][03][00][00][00][02][C7][D3]
Waiting for a confirmation…
<19><03><04><02><57><00>
SUCCESS: read 2 of elements:
Data: 0x0257 0x00b0
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[19][03][00][00][00][02][C7][D3]
Waiting for a confirmation…
<19><03><04><02><57><00>
SUCCESS: read 2 of elements:
Data: 0x0257 0x00b0
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[19][03][00][00][00][02][C7][D3]
Waiting for a confirmation…
<19><03><04><02><57><00>
SUCCESS: read 2 of elements:
Data: 0x0257 0x00b0
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[19][03][00][00][00][02][C7][D3]
Waiting for a confirmation…

Подключаю это же самое к компу все датчики отвечают. Попробовал опросить через Device Monitoring Studio тоже без проблем. На датчиках нет никаких лампочек

Для чистоты эксперимента подключил один датчик к порту.

Отлично.
А проверьте то же самое с компьютера, тот же modbus_client и тот же цикл.
Ну и выкладывайте вывод полностью, можно текстовым файлом.
Цель - убедиться, что отправляемое в шину (байты) точно совпадают.

Мне кажется довольно странным то что идентичные устройства на одной шине работают по разному. А местами менять пару из них пробовали?

Ну и на вопрос про Gnd я пока ответа не получил. Он подключен к Gnd контроллера?

Ага, вижу один датчик. Это с каким адресом?

Это с адресом 23. Переключил этот же датчик к компьютеру. Вот результат:

d:\tmp>modbus_client_1.3.2 --debug -mrtu -b9600 -pnone -s1 com5 -a23 -t0x03 -r0 -c2
Opening com5 at 9600 bauds (N, 8, 1, 1)
[17][03][00][00][00][02][C6][FD]
Waiting for a confirmation…
<17><03><04><02><5B><00>
SUCCESS: read 2 of elements:
Data: 0x025b 0x00c0

Похоже что разница в физике интерфейса WB↔конкретный экземпляр датчика.
Есть ли осциллограф? Проще всего, пожалуй, посмотреть что именно на шине. Ну или, как вариант, хотя и с гораздо меньшей пользой - измерить напряжение между GND и A, GND и B линией. На контроллере и на компьютере, с подключенных одним датчиком.
В состоянии покоя шины, без опроса. И повторить, на контроллере с отключенной растяжкой шины.

Осцилограф есть. Хотя я не очень дружу с этим. Раз вы предполагаете что дело в физическом соединении WB-датчик, как тогда можно объяснить то, что я подключаю тот же преобразователь com-rs485, которым подключаюсь на компьютере, в разъем USB на wirenboard, пытаюсь считывать через modbus_client и данные у меня не читаются с проблемных датчиков. Из этого делаю вывод что проблема не в физическом соединении. В одном месте вся связка работает, в другом нет

А как при таком подключении питаются датчики и куда подключен Gnd?
Ну и - в любом случае имеет смысл посмотреть что физически уходит в шину и что возвращается.
И - советую взять для теста какое-то заведомо хорошо работающее устройство, например нашего производства и подключить на шину вторым. Просто для того стобы проверить что нет ошибок и оно работает.