Мне кажется, вот тут "Size (in registers) " на самом деле “Size (in bytes)”.
Как я мыслю: один регистр в модбасе это 16 бит, два байта. Меньше сделать нельзя, только биты, больше можно. Но у меня температура, мне хватит int16, поэтому я выставляю “size 1”. Пробую читать, и ничего не получается:
modbus_client --debug -mtcp 127.0.0.1 -a1 -r5 -t0x3
Connecting to 127.0.0.1:502
[00][01][00][00][00][06][01][03][00][05][00][01]
Waiting for a confirmation...
<00><01><00><00><00><03><01><83><02>
ERROR Illegal data address
ERROR occured!
Причем ровно так же свой сервер на питоне я читаю успешно:
modbus_client --debug -mtcp 10.31.41.69 -p502 -a1 -r1 -t0x4
Connecting to 10.31.41.69:502
[00][01][00][00][00][06][01][04][00][01][00][01]
Waiting for a confirmation...
<00><01><00><00><00><05><01><04><02><06><46>
SUCCESS: read 1 of elements:
Data: 0x0646
Смотрю в тех вариантах, что генерируются автоматически, а там везде size 2. Делаю у себя тоже размер в два регистра и все начинает работать.
И более того, можно сделать “address 16, size 2”, хотя оно должно занимать 16 и 17, и валиться при запуске с Address overlapping, потому что 17 адрес уже занят.
Как, например, валится “address 16, size 4; address 17, size 2”. Делаю вывод, что “size 2” это “size 2 bytes”.
Плюс, “0” в “Value scale”, который подставляется по-умолчанию это ужасно неинтуитивно: это множитель, и пока его не изменить на 1, клиенты будут читать из модбаса всегда ноль(х*0=0, логично). Лучше бы поставить его на 1 по умолчанию.
Как и подставляемый “0” в Modbus unit ID, который не может быть нулем и интерфейс об этом тут же предупреждает: “Value must be at least 1.”
Кроме этого, очень хотелось бы убрать из каждой строки надписи “Set size in registers for range metatype, > 0”, “value will be multiplied by this before convertion”, “little-endian for bytes in words”, “little-endian for words”, т.к. они адски жрут место. Перенести их в заголовок таблицы или показывать всплывающей подсказкой там…
Сравните результат от ublock-фильтра “10.31.41.20##td.compact > .form-group > p.help-block”: