MSW3 - нестабильная работа шины

Добрый день!
Возникают проблемы с работой датчиков wb-msw3.
3 датчика подключены последовательно экранированной витой парой (суммарно не более 30 метров) на второй канал rs485.
В логе messages постоянно возникают ошибки чтения/записи отдельных регистров.
Nov 21 12:31:38 wirenboard-AB3RVWYB user.notice serial: ModbusRTU::ReadRegisterR ange(): failed to read 1 holding(s) @ 8 of device modbus:102: Serial protocol er ror: request timed out
Nov 21 12:31:39 wirenboard-AB3RVWYB user.notice serial: ModbusRTU::ReadRegisterR ange(): failed to read 1 coil(s) @ 0 of device modbus:102: Serial protocol error : request timed out
Nov 21 12:31:39 wirenboard-AB3RVWYB user.notice serial: ModbusRTU::ReadRegisterR ange(): failed to read 7 coil(s) @ 5100 of device modbus:102: Serial protocol er ror: request timed out

Много раз тестировал, отключал/подключал/снимал датчики с шины безрезультатно.
Периодические единичиные пропадания значений температуры, влажности и тд некритичны.
Основная проблема с ик сигналами, он их воспроизводит с каналов ROM (1 раз из 10) , а например из RAM почти всегда.

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

  1. Как точно удостовериться что проблема с шиной а не программная?
  2. Почему в альтернативном ПО (другой драйвер) работы с шиной все работает хорошо?

Спасибо.

Дополнение.
После обновления прошивки до 4.16.1.wbfw ошибки пропали, а работа с ик каналами не изменилась при этом.

Nov 21 13:13:06 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:06 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:13 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:13 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:18 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:18 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:23 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:23 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:26 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:26 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:32 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:32 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:46 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:46 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 0
Nov 21 13:13:46 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:47 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:47 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:47 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:47 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:47 wirenboard-AB3RVWYB user.notice serial: setting device register: <modbus:59:coil: 5100> <- 1
Nov 21 13:13:48 wirenboard-AB3RVWYB user.notice serial: new val for <modbus:59:coil: 5100>: 0
Nov 21 13:13:48 wirenboard-AB3RVWYB user.notice serial: register value change: <modbus:59:coil: 5100> <- 0

Нажатие на кнопку 2- 3 -4 раза подряд решает задачу.

Попробуйте пожалуйста записать сигнал в RAM, проверить, что он воспроизводится, затем записать его в ROM. Или просто заново записать сигнал в ROM с пульта.
Возможно в ROM при обучении сигнал записался неправильно

Ещё нужны подробности про то, как вы понимаете, что

ИК-передатчик не светится? Оборудование не реагирует? Какое это оборудование?

Перезаписывал несколько раз.

В ram записывается и воспроизводится без проблем.

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

Сегодня поэкспериментировал, когда проблемы с шиной перестали появляться (как раз исправлено это судя по чейнджлогу в последней прошивке). Если быстро нажать два раза play rom, то хорошо срабатывает.
Причем rom1, 2 и тд не меняет ситуации.
Приемник ИК никак не реагирует (морганием) на сигнал. На двухкратное нажатие play rom реагирует морганием и включается/выключается.
Оборудование - телевизор samsung. Просто on/off.

Есть аналогичная тема,


как раз воспроизвожу, именно с IR.
Для считывания из RAM, ROM -

export DEV_PORT=/dev/ttyRS485-2
export DEV_ADDR=55
for i in {2000..2164}
do
 echo "register $i $(modbus_client --debug -mrtu -pnone -s2 $DEV_PORT -a$DEV_ADDR -t0x03 -r$i | grep Data:)"
done

Ну и по аналогии.

  1. Проверил, аналогичное поведение - при остановленном wb-mqtt-serial командой
    root@wirenboard-AB3RVWYB:~# modbus_client --debug -mrtu -b115200 -s2 -pnone /dev/ttyRS485-2 -a59 -t5 -r5100 1
    Data to write: 0x1
    Opening /dev/ttyRS485-2 at 115200 bauds (N, 8, 2)
    [3B][05][13][EC][FF][00][4C][11]
    Waiting for a confirmation…
    <3B><05><13><00><4C><11>
    SUCCESS: written 1 elements!

Включает и выключает великолепно.

При запущенном wb-mwtt-serial только со второго раза, но с очень маленьким промежутком между нажатием на кнопку play rom, буквально как папку открыть. Если пауза больше, то ничего не происходит.
Поэтому присоединяюсь к той теме, но там нет ни одного ответа.

  1. Регистры прочитал. Но не совсем понял, как в регистрах с 2000 по 25… разделены ик команды. Судя по https://wirenboard.com/wiki/WB-MSx_Consumer_IR_Manual#.D0.9A.D0.B0.D1.80.D1.82.D0.B0_.D1.80.D0.B5.D0.B3.D0.B8.D1.81.D1.82.D1.80.D0.BE.D0.B2_.D1.84.D0.BB.D0.B0.D0.B3.D0.BE.D0.B2_.D0.B8_.D0.B2.D1.85.D0.BE.D0.B4.D0.BE.D0.B2_.28Coils_.D0.B8_Inputs.29 и RAM и ROM “живут” в этом регистре.
    Или из ROM сначала пишутся в 2000-2509 и оттуда воспроизводятся?
    Этот момент не до конца понятен, чтобы сравнить последовательности из RAM и ROM (1).

Разберусь - отпишусь.

Они не разделены. В регистрах хранится содержимое ROM банка ( копируется туда при отображении) или RAM.

В нормальном состоянии, когда ни один банк не отображен в регистра RAM - по этим адресам досупно то, что хранится в RAM банке (если что-то есть). Если “отображаем” - то в RAM копируется содержимое ROM, содержимое одного банка и становится доступно для чтения/редактирования. По окончанию отображения - по записи “0” в 5200+i - RAM записывается в соответствующий банк ROM. Но из RAM не удаляется, остается.