Здравствуйте. Не пойму, как мне в шаблоне устройства прописать побитовое чтение input регистров?
Устройство передает в одном регистре сразу несколько булевых значения:
bit 0: 0 – нет аварии; 1 – авария (код в регистре аварии).
bit 1: 0 – реле канала1 отключено; 1 – реле канала1 включено.
bit 2: 0 – реле канала2 отключено; 1 – реле канала2 включено.
bit 3: 0 – реле канала3 отключено; 1 – реле канала3 включено.
bit 4: 0 – реле канала4 отключено; 1 – реле канала4 включено.
bit 5 – bit 15 зарезервированы
Таким образом, мне необходимо передать в разные каналы модифицированное значение из одного регистра. Как я могу прописать это в шаблоне?
Здравствуйте! Предполагаем, что нужно считать биты из 16-разрядного регистра типа input с адресом 100. Для обращения к части регистра нужно использовать следующий формат записи адреса в шаблоне: “регистр:смещение в битах:ширина в битах”
Для вашего случая в шаблон добавляем следующие каналы:
Правильно ли я понимаю, что в итоге получается, что когда я хочу считать побитово значение из регистра, на шине происходит запрос регистра целиком для каждого бита? Т.о. это сильно нагружает шину
Да, понимаете правильно. Драйвер читает из устройства всегда один регистр (16 бит), а затем сам уже вычисляет нужный бит. Чтение одного бита из регистра holding или input не предусмотрено протоколом Modbus.
Если битов нужно считывать много и часто, то, наверное, будет оптимальным читать 16-разрядный регистр один раз как обычно, а биты выделять уже в правилах: