Можно ли отключить register bunching в modbus (объединение регистров)

Вот этот коммит ломает общение с моим самодельным устройстом, так как моё устройство не поддерживает чтение нескольких значений за один раз. Можно ли как-то запретить объединять регистры?
Кусок конфига, где проблема:

        {
          "name": "reed_a",
          "reg_type": "discrete",
          "address": 1
        },
        {
          "name": "reed_b",
          "reg_type": "discrete",
          "address": 2
        },
        {
          "name": "reed_c",
          "reg_type": "discrete",
          "address": 3
        } 

Спасибо.

Нет, такой возможности не предусмотрено, к сожалению. Нормальные устройства, которые не поддерживают Read Multiple Registers нам пока не встречалось.

Есть грязный хак, который я не пробовал правда: можете у каждого регистра указать разный poll_interval. Текущая реализация склеивает только диапазоны с одинаковым poll_interval.

А вообще можем сделать на коммерческой основе, за 4 * 1700р.

Патч там довольно тривиальный впрочем, если я правильно понимаю. Можете сделать и прислать пулл реквест, буду только рад:

  1. Вот в этой строчке нужно вместо MODBUS_MAX_READ_REGISTERS и MODBUS_MAX_READ_BITS использовать соответствующие параметы из Config()
  2. В Config() их нужно добавить по аналогии MaxBitHole и MaxRegHole
  3. Ещё их нужно добавить в config_parser, чтобы собственно парсить
  4. Ещё их нужно добавить в JSON-схему, чтобы показывалось в веб-интерфейсе
  5. Ну и покрыть тестами
  6. Нужно подумать, возможно вместо протаскивания двух параметров, нужно протащить что-нибудь типа disable_register_bunching
  7. при этом надо учитывать, что bunching регистров и использование Read Multiple Registers - это не совсем одно и то же: 32-битные регистры например всё равно продолжат читаться одним запросом. Если у девайса проблема именно в модбас-функции, то нужно будет зарываться немного глубже.

Спасибо, но, видимо, проще всего будет мне прошивку своих устройств поправить :slight_smile: