Добрый день. Хотел ускорить работу датчиков движения, что бы свет загарался моментально. Нашел статью: https://sprut.ai/client/article/2388 .
Там есть такой пункт:
Для всех устройств надо установить скорость 115200, как это сделать: Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board.
Когда я прошел в эту документацию и попыталс ей воспользоваться, то столкнулся с целым рядом проблем:
1)
Если я выключаю service wb-mqtt-serial stop, то ВСЕГДА получаю:
В целом направление правильное. То есть, чтобы уменьшить интервал опроса датчика нужно увеличить скорость сети и отключить опрос неиспользуемых регистров устройств (у датчика довольно много регистров, поэтому снимите галочку напротив тех, которые не нужны).
Видимо, на шине нет датчика с адресом 1. Команда чтения, вроде правильная.
Сервис wb-mqtt-serial нужно всегда останавливать для корректной работы утилиты modbus_client. К тому же при получении широковещательного сообщения (используется адрес 0) устройства никогда не отправляют ответ.
Все правильно, вы же перед этим сами остановили сервис.
Давайте разбираться по порядку.
Для того, чтобы поменять скорость, нужно точно знать текущие настройки связи ваших датчиков: адрес, скорость обмена, контроль четности, количество стоп-битов. Вы из знаете? Вы их изменяли самостоятельно? Если вы их самостоятельно не изменяли, то адреса написаны на наклейке датчиков, скорость 9600, контроль четности отключен (N), количество стопбитов 2.
Оставьте подключенным к порту RS-485-1 только один датчик с известными настройками связи. Остановите сервис wb-mqtt-serial, и, используя modbus_client попробуйте прочитать регистр 110. Только убедитесь, что правильно задан порт и адрес датчика.
Если чтение будет успешным можно записать новое значение скорости в датчик, используя функцию -t0x06
Затем нужно будет изменить скорость в настройках порта контроллера на новую и убедиться, что датчик опрашивается корректно.
Повторить процедуру со всеми оставшимися датчиками.
Оставлять по одному устройствуна шине для изменения скорости не обязательно. И как раз скорость можно сменить всем по адресу “0” но обязательно проверить доступность устройств после изменения.
Так без разницы, я пробовал и на адрес a0 отправлять. Ошибки: connection timed out: select или Received function not corresponding to the request (4 != 3) - остаются
В случае использования широковещательных запросов и экспериментов - лучше оставлять одно устройство.
Не частый. Выполняется один раз при пусконаладке. К тому же настроить регистры можно и из интерфейса, но зачем эту настройку делать каждый раз при запуске serial?
Не понял ответ. Так достаточно снять галку enabled? Просто в щите отключать все устройства кроме одного, соединенные последовательно, тот еще геморой.
Если я в интерфейсе выставляю скорость устройства: /dev/ttyRS485-1 в 115200, то связь с датчиками пропадает. Я так понимаю, что надо что бы и у датчиков отдельно была установлена такая же скорость. Для этого все эти махинации с wb-mqtt-serial и modbus_client.
Или я из какого то другого интерфейса должен эти регистры менять?
“Снятие галки” - никак не повлияет на реакцию устройств на команды modbus_client/
Да, естественно. Поэтому - сначала менять настройки всех устройств. Можно по одному, с контролем ответа каждого после изменения. А уже в последнюю очередь - в настройках драйвера.
На адрес a0 записать не удалось, но посмотрел адреса на обратной стороне датчиков и отправил запись на них и все заработало. На будущее, команда выглядела так: