Добрый день.
В счетчике с прошивкой 2.3.2 во втором регистре каждого канала есть число 23, которое сильно завышает показания энергопотребления. Показания напряжения, тока, частоты и активной мощности похожи на правду.
В цифрах. После работы счетчика в течение з часов значение в регистре 4620 == 33525,
в регистре 4621 == 23 (по остальным каналам ситуация - в плане второго регистра в потребляемой мощности - аналогична.
Нет ли возможности “обнулить” регистры счетчиков? Возможно я делаю что-то не так?
Здравствуйте!
Значение прямой активной энергии для канала 1 (и других каналов) хранится в регистрах счетчика в формате u64 little endian (в 4х регистрах с обратным порядком слов). При этом чтобы получить верное результирующее значение нужно считать 4 регистра (4620, 4621, 4622, 4623), выполнить преобразование из формата little_endian в формат big_endian (переставить слова в порядке 4623, 4622, 4621, 4620), полученное число умножить на 0.00001. Карта регистров и алгоритм получения значения энергии описаны в документации на счетчик.
То есть в вашем случае считываем 4 регистра, например, командой (адрес счетчика, номер порта и настройки скорости замените на свои):
root@wirenboard-ATHXPBSP-PLC1:~$modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-2 -a17 -t0x04 -r4620 -c4
Opening /dev/ttyRS485-2 at 9600 bauds (N, 8, 2)
[11][04][12][0C][00][04][36][22]
Waiting for a confirmation...
<11><04><08><29><ED><00><00><00><00><00><00><8F><B1>
SUCCESS: read 4 of elements:
Data: 0x29ed 0x0000 0x0000 0x0000
Добрый день.
Спасибо большое за оперативный ответ.
Перед тем, как просить помощи, я прочитал мануал.
Я определяю энергопотребление согласно вашей инструкции: получаю данные из 4 регистров и провожу арифметические преобразования.
Проблема в том, что во втором регистре после младшего висит число 23 (в каждом канале из 6), которое искажает данные. Не совсем понятно откуда оно взялось и что с ним делать.
То есть сейчас показания потребленной энергии около 23 кВт*ч? Счетчик покупали новый? Возможно, при тестировании он насчитал это количество энергии.
В целом это не искажение показаний, но может сбивать с толку. В любом бытовом счетчике, если он уже что-то насчитал, то показания эти будут только увеличиваться.
Можно сохранить начальное значение показаний энергии и вычитать его из текущего показания (например, с помощью правил на контроллере). Тогда отсчет будет начинаться с нуля.
Не совсем 23, 15 с копейками кВтч насчитал (при активной мощности в 20 Вт). Сейчас вычел это значение (2365536) из общей суммы, теперь значения больше на правду похожи: около 0,6 кВт*ч. Остальные показатели в норме, или как минимум не вылезают за границы разумного.
Добрый день.
Зафиксировал на видео заполнение младшего регистра (cons1 и cons2, где cons1 - младший).
Видимо действительно не почистили регистры перед упаковкой.
Я всё внимательно перечитал, но так и не уверен, что понял суть проблемы.
Правильно ли я понимаю, что вы вычисляете текущую мощность из изменений в регистрах накопленной активной энергии?
В любом случае, прошу очень подробно сформулировать вопрос, проиллюстрировав его сырыми данными из регистров счётчика, до обработки.
Добрый день, Евгений.
Суть проблемы, если это вообще можно назвать проблемой, в том, что во втором регистре из четырех, отвечающих за энергопотребление в кВт*ч, после младшего с самого начала было значение 23, что явно завышает потребление тестового стенда. Вычисление энергопотребления проводится по инструкции:
"Порядок регистров little-endian — значит, регистры идут от младшего к старшему. Поэтому регистры объединяются в шестнадцатеричное число 0x0000 0000 0dff b4df, оно же 234861791 в десятичной системе счисления. Для вычисления энергии нужно умножить его на 10-5, поэтому в итоге получаем 2348.61791 кВт·ч.
Другими словами, чтобы получить итоговое число:
0x2200 младшая часть — значение оставляем «как есть»
0x2201
значение умножаем на 216 (на 65536)
0x2202
значение умножаем на 232 (на 4294967296)
0x2203
значение умножаем на 248 (на 281474976710656)
Суммируем результаты. Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево)."
Производя указанные выше вычисления обнаружил, что вычисленные значения сильно завышены. Отсюда возник вопрос, так должно быть или нет.
Сырые данные представлены на видео. Как я упоминал, переменные cons1 и cons2 отвечают за состояние первых двух регистров накопленной мощности.