Предлагаю при выполнении работ, запланированных в теме [12818, 14071] Чтение состояний с универсального устройства ModBus (разбор битовой маски), реализовать в драйвере универсального modbus устройства возможность запрашивать несколько расположенных друг за другом регистров за один запрос.
Зачем нужно: данный функционал позволит сократить время, затрачиваемое на опрос устройств(особенно актуально на CSD/GPRS каналах связи), соответственно сократится траффик/минуты. Помимо этого это позволит снизить нагрузку на сеть RS-485, в случае когда к ней подключено большое количество устройств.
Предполагаемый принцип работы: у экземпляра оборудования “Универсальное modbus устройство” добавляется признак “использовать групповые запросы”. В случае, если он активен - драйвер опроса сортирует по возрастанию номера регистра все регистры устройства (holding отдельно, Input отдельно). Далее соответственно при наличии двух и более следующих подряд регистров формируется запрос на чтение необходимого количества регистров.
При этом регистры могут идти “вперемешку” Uint16,Single,Uint16 - это не должно оказывать влияния.
Такие работы мы не планируем. Это сильно усложнит логику и может привести к различным трудно обнаруживаемым ошибкам. Поддержка такого механизма будет намного сложнее, так что, в универсальном устройстве будут считываться только стандартные двухбайтные регистры.
Это не совсем правда. Если в привязке ячеек устройства указать тип данных Double - то лэрс читает 8 байт за один раз. С Single аналогично (4 байта).
В любом случае, пока считаю, что пока лучше считывать регистры отдельно, чтобы гарантировано работать со всеми типами устройств. Мы встречали оборудование, у которого внутренняя память разделена на какие-то “страницы”, и считать регистры из разных страниц одним запросом нельзя, хотя они и идут друг за другом, прибор выдавал ошибку. Это, конечно, маргинальные случаи, но всё-таки универсальный драйвер хотелось бы оставить максимально универсальным.