Вот этот коммит ломает общение с моим самодельным устройстом, так как моё устройство не поддерживает чтение нескольких значений за один раз. Можно ли как-то запретить объединять регистры?
Кусок конфига, где проблема:
{
"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р.
Патч там довольно тривиальный впрочем, если я правильно понимаю. Можете сделать и прислать пулл реквест, буду только рад:
- Вот в этой строчке нужно вместо MODBUS_MAX_READ_REGISTERS и MODBUS_MAX_READ_BITS использовать соответствующие параметы из Config()
- В Config() их нужно добавить по аналогии MaxBitHole и MaxRegHole
- Ещё их нужно добавить в config_parser, чтобы собственно парсить
- Ещё их нужно добавить в JSON-схему, чтобы показывалось в веб-интерфейсе
- Ну и покрыть тестами
- Нужно подумать, возможно вместо протаскивания двух параметров, нужно протащить что-нибудь типа disable_register_bunching
- при этом надо учитывать, что bunching регистров и использование Read Multiple Registers - это не совсем одно и то же: 32-битные регистры например всё равно продолжат читаться одним запросом. Если у девайса проблема именно в модбас-функции, то нужно будет зарываться немного глубже.
Спасибо, но, видимо, проще всего будет мне прошивку своих устройств поправить