Работа с шаблоном

“1:2:16” а точно длина 16 бит? Если значение bool, то надо “1:2:1” написать. Т.е. берем значение бита из адреса 1, бит №2 длинной 1 бит. У вас сейчас указана длина 16 бит.

1 лайк

Добрый день.

Совершенно верно.

Вот инструкция:


сделал как вы написали, но канал по прежнему красный

			{
				"id" : "MAN_mode",
				"name": "Режим - Ручной",
				"reg_type": "input",
				"address": "1:2:1",
				"format" : "u16",
				"type": "switch",
				"readonly" : true
			}

пробовал писать 1:2:1, 0:2:1 и т.д., не получается…

А читается ли этот регистр с помощью modbus_client&

не совсем понимаю, так как на все запросы один и тот же ответ

root@wirenboard-ASOI7OWQ:~# modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyMOD1 -a2 -t3 -r1:2:1
Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 1)
[02][03][00][01][00][01][D5][F9]
Waiting for a confirmation...
<02><03><02><00><10><FD><88>
SUCCESS: read 1 of elements:
        Data: 0x0010 
root@wirenboard-ASOI7OWQ:~# modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyMOD1 -a2 -t3 -r1:2:2
Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 1)
[02][03][00][01][00][01][D5][F9]
Waiting for a confirmation...
<02><03><02><00><10><FD><88>
SUCCESS: read 1 of elements:
        Data: 0x0010 
root@wirenboard-ASOI7OWQ:~# modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyMOD1 -a2 -t3 -r1:3:1
Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 1)
[02][03][00][01][00][01][D5][F9]
Waiting for a confirmation...
<02><03><02><00><10><FD><88>
SUCCESS: read 1 of elements:
        Data: 0x0010 
root@wirenboard-ASOI7OWQ:~#

я думаю это просто чтение 1 регистра, так как там тоже самое значение. а как вот именно с этими битами разобраться - непонятно

Я бы для начала попробовал читать все регистры сторонней утилитой. RilhevaModbusPoll например очень удобная. Т.к. в описании на данное устройство в основном используются битовые маски, то получаемые значения переводить в двоичное представление. Тем же калькулятором Windows в режиме “Программист”. На основе полученной двоичной информации уже сопоставлять полученные нули и единицы с реальным состоянием устройства. И только уже убедившись, что все верно считал, то уже мучать шаблоны.

А почему в шаблоне пытаетесь читать командой 0x4?

Но для целей проверки практически бесполезная - не видно что отправляется и что получается…

знаний очень мало по этой теме
гпт тоже не помогает
а как надо?

установил, но пока не пойму как через контроллер wb подключиться к устройству. напрямую к устройству нет возможности подключиться

Ну тут да, надо напрямую к устройству подключаться для удобства. Через преобразователь USB-RS485

Точно так же как читаете с помощью modbus_client. Получается что в шаблоне укажываете input а читать нужно как holding. Нет тут магии.

я пробовал разные варианты, но всегда получаю значения обычных регистров. может вместо 1 в 1:2:2 нужно что-то другое написать?

было бы здорово в modbus статью добавить информацию о том как с битами работать

Тут не очень понятно. Лучше описать - что делаете, какой результат получаете, чем он отличается от ожидаемоего.

Биты регистров - они не имеют отношения к протоколу, в общем.