Считывание регистра по Modbus

Добрый день.
Контроллером Wiren Board 6 считываю показания электросчётчиков Энергомера 301.
Далее эту информацию считываю по сети по Modbus (тестово с помощью ModBus poll).
Считывается 1 регистр 16 бит. Максимальное значение регистра 65535.
Что будет после того как значение накопленной энергии на счётчике Энергомера достигнет значения больше 65535?
Как считывать значение больше?
Уже сейчас я не могу по ModBus считать например серийный номер того же счётчика Энергомера так как он значительно больше (127204367).


Здравствуйте!

Предполагаю, что данные должны храниться в нескольких 16-битных регистрах. То есть нужно для энергии выбрать тип данных, например, u32 (32-битное целое без знака) или u64 (64-битное целое без знака). Нужно уточнить по документации.
Какой именно регистр (параметр) хотите считать?

Серийный номер счетчика хранится как строка.
image

Теперь драйвер контроллера Wirenboard строки тоже умеет считывать (новая версия доступна в релизе testing). Для этого нужно выбрать в параметрах пользовательского регистра формат “String” и количество символов для чтения:

Сам WirenBoard6 из Энергомеры 301 по своему собственному шаблону считывает серийный номер очень хорошо



Снимок5

Проблема в считывании регистра из WirenBoard6 Modbus poll-ом.
В WirenBoard6 для считывания из вне выделен только один регистр для значения серийного номера

Штатный шаблон для счетчика использует протокол МЭК (не modbus). А Modbus Poll использует Modbus.
В документации на счетчик на странице 134 есть таблица Modbus-регистров, ориентируйтесь на нее: http://www.energomera.ru/documentations/product/ce304s32_v6_re.pdf

Добрый день.
Мне кажется недопонимание какое-то.

Счётчики Энергомера 301 подключены по RS485 к контроллеру WB6 и опрашивается по протоколу МЭК с помощью шаблона. В WB6, в меню “устройства” я вижу данные со счётчиков (кВт*ч, серийный номер счётчика и т.д.). Всё отлично.

А уже внешней SCADA я хочу опросить контроллер WB6 по Modbus TCP. Для тестирования я использую ПО Modbuspoll. Адреса регистров modbus для считывания из контроллера WB6 я беру со страницы “Настройки” - “Конфигурационные файлы” - “Шлюз MQTT - Modbus RTU/TCP slave” - “ID данных Modbus” - “Начальный адрес”.

Например.
Я хочу по Modbus TCP считать значение серийного номера счётчика из контроллера WB6.
В контроллере WB6, на странице “Устройства” я вижу серийный номер счётчика 8840103472224
1

На странице “Настройки” - “Конфигурационные файлы” - “Шлюз MQTT - Modbus RTU/TCP slave” я беру адрес Modbus устройства (“ID данных Modbus”) - 127 и адрес регистра (“Начальный адрес”) - 51418 этой точки данных.

В программе Modbuspoll я задаю адрес устройства и адрес регистра.

Но в ответ получаю переполненную ячейку (65535 или шестнадцать единичек в двоичном). Т.е. число 8840103472224 просто не помещается в 16битную ячейку.
4

При обращении таким же способом к любой ячейке памяти в которой изначально известно что число меньше 65535, я получаю верный ответ.
5



8

Подскажите что я делаю не так и как решить мою задачу.

заранее спасибо

Вот теперь стало понятно.

Давайте сначала попробуем считать значение Total A energy. В конфигурации mbgate задайте такие параметры:

В конфигурации ModbusPoll нужно задать в настройках опроса Quantity = 2 (2 регистра по 16 бит). А в таблице опроса выбрать тип float. При этом может потребоваться подобрать нужный порядок байт и слов.

1 лайк

сработало
спасибо огромное

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.