я так понимаю мне нужно мучать китайца и узнать как поменять стоп бит с 1 на 2?
Попробуйте опросить ваше устройство с помощью утилиты modbus_client, правильно задав настройки обмена, нужно убедиться, что устройство нормально отвечает. При этом в аргументах утилиты верно укажите параметры обмена, аналогичные тем, что заданы на стороннем устройстве.
Перед использованием утилиты modbus_client нужно остановить драйвер wb-mqtt-serial:
systemctl stop wb-mqtt-serial
Тут есть несколько вариантов: изменить настройки стороннего устройства аналогично остальным устройствам на шине, изменить настройки остальных устройств на шине аналогично настройкам обмена стороннего устройства, подключить стороннее устройство на другой порт, у которого задать требуемые параметры обмена.
Полагаю, что команда должна быть примерно такая (для настроек обмена по умолчанию устройства 4800, n ,8, 1):
modbus_client --debug -mrtu -b4800 -pnone -s1 /dev/ttyRS485-1 -a1 -t0x03 -r40001
а14 поставил, адрес устройства 14
Я не очень понимаю, почему адрес регистра указываете 4001, а не 40001.
Регистр нужно прописывать как -r
, посмотрите пример.
ошибся
я если пойму хоть с одним устройством обещаю вас больше не мучать уже легче понимать будет мне
Смотри, что есть на AliExpress! RS485 Modbus водонепроницаемый датчик температуры и влажности за 438,98 руб.
https://sl.aliexpress.ru/p?key=Ua4yko
может это поможет вам понять и помочь мне, ссылка на девайс, там есть описание
Нужно опции указывать через “-”: -r40001
. Скопируйте команду, ниже и вставьте в консоль:
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a14 -t0x03 -r40001
Да, вот это то, что читает драйвер контроллера - везде нули. Теперь все правильно.
То есть информация читается драйвером правильно. А адреса 0 и 1 что дают?
Да вот так попробуйте:
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a14 -t0x03 -r0
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a14 -t0x03 -r1
не то