Шаблон ectocontrol для wirenboard

Добрый день не приходилось писать шаблоны еще с регистры для сторонних устройств можете помочь с написанием 1 регистра дальше я продолжу. нужно написать. не могу разобраться как это сделать и как из документации понял адрес 0х15 для Адаптер BSB для газового котла baxi

Это ответ ectocontrol после запроса регистров

Добрый день.
Описание - https://ectocontrol.ru/download/protocol_description_modbus_RS485_ectostroy_ru.pdf

запросы регистров у адаптера должны производиться с опкодом 3, read holding registers.

так же из-за ограниченных ресурсов контроллера мы были вынуждены так же ограничить чтение регистров следующим образом

- читать можно из диапазонов 0x00 .. 0x0F, 0x10…0x2F, 0x30…0x70. если прочитать одновременно из 2 диапазонов, результат будет валиден только для первого из запрошенных диапазона

- максимальное кол-во запрашиваемы регистров 32

Добрый день.
Пример с одним регистром - да, конечно могу.
Напишите пожалуйста какой регистр и в каком виде хотите прочитать? И покажите как он читается с помощью modbus_client.

А как отправить эти запросы modbus_client

Вот тут описано.
Ну или скажите имя порта, куда оно подключено, параметры подключения и адрес с типом регистра - помогу составить.

порт MOD1

Да, давайте остальные параметры.

0x0018 адрес регистра как я понял из скинутой выше документации а адрес устройства 0x15

Транспортный уровень протокола Для реализации обмена данными с устройствами используются стандартные функции протокола Modbus: Read Holding Registers (0x03) Write Holding Registers (0x10) Read input registers (0x04) Каждое устройство на шине является ведомым, для опроса устройств и управления ими используется единое ведущее устройство (система EctoControl). Для чтения адреса из устройства используется функция 0x46, а для его записи в устройство – функция 0x47. Далее при описании регистров используются следующие условные обозначения: RSVD – зарезервировано для последующего использования (чтение и запись могут привести к непредсказуемому результату) R – доступ только на чтение (input registers). Запись не даст результата. RW – доступ на чтение и запись (holding registers) Каждое устройство содержит однотипную информационную структуру, содержащую общую информацию об устройстве. Начальный адрес структуры (регистры): 0x0000, holding registers Длина структуры (регистры): 4 Адрес байта 0 1 2 3 4 5 6 7 Поле RSVD UID RSVD ADDR TYPE CHN_CN T Регистр 0 1 2 3 Доступ R R R R Адрес регистра 0x0000 0x0001 0x0002 0x0003 UID – уникальный идентификатор устройства (длина 3 байта), диапазон значений: [0x800000; 0xFFFFFF]. ADDR – логический адрес устройства на шине ModBus, по умолчанию 0xF0 (может быть принудительно записан мастером с помощью широковещательного пакета). Имеет диапазон 0x01…0x20. TYPE – тип устройства, определяющий его физические свойства: Измерительные датчики: 0x22 – датчик температуры 0x23 – датчик влажности воздуха Контактные датчики: 0x50 – универсальный контактный датчик 4 0x59 – разветвитель контактного датчика 10-канальный Устройства управления: 0xC0 – блок управления реле двухканальный 0xC1 – блок управления реле десятиканальный Прочие устройства: 0x11 – адаптер OpenTherm (первая версия, снята с производства) 0x14 – адаптер OpenTherm (вторая версия) 0x15 – адаптер eBus 0x16 – адаптер Navien CHN_CNT – число каналов устройства (1…10).

Производитель устройств не задает им при производстве какой-либо конкретный адрес, перед обменом данными нужно принудительно задать этот адрес или прочитать имеющийся в устройстве адрес. Для задания устройству уникального адреса на шине Modbus используется процедура программирования адреса. Процедура основана на отправке специальной функции PROG_READ (0x46) и PROG_WRITE (0x47). Функция PROG_READ (0x46) (высылается ведущим устройством единственному устройству на шине с неизвестным адресом). Запрос от ведущего устройства: Широковещательный адрес Код функции CRC_HI CRC_LO 0x00 0x46 0xXX 0xXX Ответ от ведомого устройства: Адрес ведомого устройства Код функции Адрес устройства CRC_HI CRC_LO 0x00 0x46 ADDR 0xXX 0xXX Устройство возвращает в ответе свой текущий адрес ADDR. Функция PROG_WRITE (0x47) (высылается ведущим устройством ведомому с указанием сменить свой имеющийся адрес на заданный). Запрос от ведущего устройства: Широковещательный адрес Код функции Новый адрес CRC_HI CRC_LO 0x00 0x47 ADDR 0xXX 0xXX Ответ от ведомого устройства: SLAVE_ADDR Код функции Новый адрес CRC_HI CRC_LO ADDR 0x47 ADDR 0xXX 0xXX Устройство обновляет свой адрес на ADDR и высылает ответ уже с нового адреса.

5.1. Что такое адаптер котла? Адаптер котла позволяет управлять котлом с использованием его цифрового интерфейса передачи данных. Способ взаимодействия с адаптером по шине Modbus одинаков для любого типа адаптера. Для доступа к регистрам адаптеров используются функции: Read Holding Registers (0x03) для чтения регистров, Write Holding Registers (0x10) для записи в регистры. Существует 2 аппаратной версии адаптера. Первая версия (снята с производства) отличалась синей печатной платой и выпускалась только для котлов с интерфейсами OpenTherm и eBus. Особенность этой версии – наличие встроенных алгоритмов регулирования температуры, поэтому среди настроек присутствовал выбор режима работы котла, выбор гистерезиса и т.д. Первая версия снята с производства. Вторая версия отличается желтой печатной платой, все функции и алгоритмы регулирования переложены на систему ectoControl. Обе версии адаптеров используют различное назначение регистров (за исключением единого для всех заголовка, находящегося в регистрах 0x0000…0x0003 и единой функции чтения и установки адресов). Адаптер опрашивает все параметры котла постепенно, один за другим, поэтому сразу после включения питания адаптера регистры, содержащие параметры котла (температуру, давление, расход) могут содержать значения, указывающие на то, что данные еще не прочитаны: 0x7FFF (для двухбайтных значений), 0x7F или 0xFF (для однобайтных значений). Также такие показания могут считываться для параметров, которые не поддерживаются электроникой котла.

Скорость обмена 19200

Тогда - задайте предварительно адрес. Если удобней с компьютера - то сделайте с него.

modbus_client не работает с функциями кроме указанных.
Да, проще будет с компьютера, наверно.
Можно и с контроллера используя GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver · GitHub но если нет опыта компьютер удобнее.

Проверьте стандартный, возможно ответит.

То есть - да, я могу сделать шаблон, но от этого немного толку, надо убедиться что устройство отвечает.

вот так написать modbus_client --debug -mrtu -b19200 -pnone -s2 /dev/ttyMOD1 -a0x15 -t0x03 -r0x0018

на самом устройстве 9007da

Да, корректно. Если адрес на устройстве действительно 0x15 - должно ответить.

не отвечает ошибка. а как можно задать адрес или узнать его ?

Вот так попробовал сделать запрос есть ответ или это ошибка?

root@wirenboard-ALSPTZPR:~# modbus_client --debug -mrtu -b19200 -pnone -s2 /dev/ttyMOD1 -a0xF0 -t0x46 -r0x0018
No correct function type chosenmodbus_client [–debug] [-m {rtu|tcp}] [-a<slave-addr=1>] [-c=1]
[-r=100] [-t] [-o=1000] [{rtu-params|tcp-params}] serialport|host
NOTE: if first reference address starts at 0, set -0
f-type:
(0x01) Read Coils, (0x02) Read Discrete Inputs, (0x05) Write Single Coil
(0x03) Read Holding Registers, (0x04) Read Input Registers, (0x06) WriteSingle Register
(0x0F) WriteMultipleCoils, (0x10) Write Multiple register
rtu-params:
b=9600
d{7|8}=8
s{1|2}=1
p{none|even|odd}=even
tcp-params:
p=502
Examples (run with default mbServer at port 1502):
Write data: modbus_client --debug -mtcp -t0x10 -r0 -p1502 127.0.0.1 0x01 0x02 0x03
Read that data: modbus_client --debug -mtcp -t0x03 -r0 -p1502 127.0.0.1 -c3

Задать - вот тут описано:

Можно перебором, например вот так: Настройка параметров подключения по RS-485 для Modbus-устройств Wiren Board — Wiren Board
То есть если адрес есть - то при его запросе устройство ответит. Например вот тут j,ce;lfkb/

Как я писал выше modbus_client не работает с 0x46 функцией.