Увеличить скорость опроса датчиков WB-MSW v.3

Добрый день. Хотел ускорить работу датчиков движения, что бы свет загарался моментально. Нашел статью: https://sprut.ai/client/article/2388 .
Там есть такой пункт:
Для всех устройств надо установить скорость 115200, как это сделать: Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board.
Когда я прошел в эту документацию и попыталс ей воспользоваться, то столкнулся с целым рядом проблем:
1)
Если я выключаю service wb-mqtt-serial stop, то ВСЕГДА получаю:


2)
Если я включаю service wb-mqtt-serial start, то получаю вот такой ответ:

3)
Если при ВЫКЛЮЧЕННОМ сервисе запросить статус, то вот такой ответ:

4)
При попытке просканировать устройства перебором получил, произошел broken pipe на 27%, но до этого я получил вот такой ответ:

И там видно, что есть всего три адреса (хотя у меня 4 датчика): 0x000d, 0x001e и 0x0000

Как мне для всех устройств выставить скорость 115200 ? Что я делаю не так?

Прошивка вайрена обновлена:
Welcome to Wiren Board 6.6.0 (s/n AD3RB5FD), release wb-2108 (as stable)
Linux wirenboard-AD3RB5FD 4.9.22-wb2 #2 SMP Thu Jun 24 14:46:55 UTC 2021 armv7l GNU/Linux

Здравствуйте!

В целом направление правильное. То есть, чтобы уменьшить интервал опроса датчика нужно увеличить скорость сети и отключить опрос неиспользуемых регистров устройств (у датчика довольно много регистров, поэтому снимите галочку напротив тех, которые не нужны).

Видимо, на шине нет датчика с адресом 1. Команда чтения, вроде правильная.

Сервис wb-mqtt-serial нужно всегда останавливать для корректной работы утилиты modbus_client. К тому же при получении широковещательного сообщения (используется адрес 0) устройства никогда не отправляют ответ.

Все правильно, вы же перед этим сами остановили сервис.

Давайте разбираться по порядку.

  1. Для того, чтобы поменять скорость, нужно точно знать текущие настройки связи ваших датчиков: адрес, скорость обмена, контроль четности, количество стоп-битов. Вы из знаете? Вы их изменяли самостоятельно? Если вы их самостоятельно не изменяли, то адреса написаны на наклейке датчиков, скорость 9600, контроль четности отключен (N), количество стопбитов 2.
  2. Оставьте подключенным к порту RS-485-1 только один датчик с известными настройками связи. Остановите сервис wb-mqtt-serial, и, используя modbus_client попробуйте прочитать регистр 110. Только убедитесь, что правильно задан порт и адрес датчика.
  3. Если чтение будет успешным можно записать новое значение скорости в датчик, используя функцию -t0x06
  4. Затем нужно будет изменить скорость в настройках порта контроллера на новую и убедиться, что датчик опрашивается корректно.
  5. Повторить процедуру со всеми оставшимися датчиками.

Оставлять по одному устройствуна шине для изменения скорости не обязательно. И как раз скорость можно сменить всем по адресу “0” но обязательно проверить доступность устройств после изменения.

Так без разницы, я пробовал и на адрес a0 отправлять. Ошибки: connection timed out: select или Received function not corresponding to the request (4 != 3) - остаются

Причина:

В смысле физически отключить? Или достаточно убрать галку - enabled в настройках?

P.S. А что за сложность то то вывести изменение этих настроек в веб интерфейс и сделать команду запроса их оттуда же? Я так понимаю это частый кейс

В случае использования широковещательных запросов и экспериментов - лучше оставлять одно устройство.

Не частый. Выполняется один раз при пусконаладке. К тому же настроить регистры можно и из интерфейса, но зачем эту настройку делать каждый раз при запуске serial?

Не понял ответ. Так достаточно снять галку enabled? Просто в щите отключать все устройства кроме одного, соединенные последовательно, тот еще геморой.

Если я в интерфейсе выставляю скорость устройства: /dev/ttyRS485-1 в 115200, то связь с датчиками пропадает. Я так понимаю, что надо что бы и у датчиков отдельно была установлена такая же скорость. Для этого все эти махинации с wb-mqtt-serial и modbus_client.

Или я из какого то другого интерфейса должен эти регистры менять?

“Снятие галки” - никак не повлияет на реакцию устройств на команды modbus_client/

Да, естественно. Поэтому - сначала менять настройки всех устройств. Можно по одному, с контролем ответа каждого после изменения. А уже в последнюю очередь - в настройках драйвера.

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

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a172 -t0x06 -r110 1152

Считаю тему закрытой. Спасибо!