WB-MAP12H, странные показания

Написали софт для опроса WB-MAP12H, внесли параметры трансформаторов и, в целом, все работает, однако есть нестыковки по некоторым показаниям. Наример, суммарные значения мощности и энергии не сходятся с пофазовыми:

Канал 1 (на остальных каналах картина схожая):

total active power: 3421.76
phase active power: 4400.32 | 4774.13 | 4512.51

total positive active energy: 35570.8
phase positive active energy: 23656.9 | 29193.2 | 25334.4

Кроме того, мы получаем очень странные показатели суммарной активной энергии, смотрите приложенную картинку с графиком, “пила” это как раз она.

Подскажите, почему могут быть такие показания? Значения адресов регистров мы проверяли уже несколько раз, все соответствует документации. Если нужно, я пришлю дампы ответов прибора.

Думаю, вы неправильно обрабатываете значения из регистров, и это можно проверить как раз на пиле. Пришлите, пожалуйста, сырые значения из регистров, соответствующие впадине, середине подъёма, вершине, и следующей впадине. Впадину и вершину можно не совсем точно, просто в некоторой их окрестности. И рядом напишите формулами, как вы это пересчитываете.

Если нужно конкретно на подъемах и спадах - то нам нужно будет отловить логи, это займет какое-то время. А пока приведу рандомный пример.

Читаем 64 регистра начиная с 0x1200, ответ:

24 04 80 42 ca 04 d4 00 00 00 00 f1 a1 01 8d 00 00 00 00 84 38 01 ae 00 00 00 00 cf 4a 01 97 00 00 00 00 00 ae 00 00 00 00 00 00 00 5c 00 00 00 00 00 00 00 fe 00 00 00 00 00 00 01 bf 00 00 00 00 00 00 02 6d 00 00 00 00 00 00 01 85 00 00 00 00 00 00 e4 c8 00 02 00 00 00 00 01 3f 00 00 00 00 00 00 61 af 00 02 00 00 00 00 7b 7a 00 01 00 00 00 00 01 cb 00 00 00 00 00 00 c9 94 00 03 00 00 00 00 aa 60

Первые 4 регистра это “Суммарная прямая активная энергия для канала 1”, 64 бита, little endian:

42 ca 04 d4 00 00 00 00

Переворачиваем:

00 00 00 00 d4 04 ca 42 : 3557083714 (dec)

Умножаем:

3557083714 * 1e-05 = 35570.83714

UPD:

А вот и дампы из логов. Это второй канал, 64 регистра начиная с 0x2200.

2020.05.26 07:04:01:

24 04 80 b4 df 0d ff 00 00 00 00 70 82 05 55 00 00 00 00 97 3a 04 7f 00 00 00 00 ad 8a 04 2a 00 00 00 00 00 6d 00 00 00 00 00 00 00 60 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 4a 00 00 00 00 00 00 e6 23 03 fd 00 00 00 00 7b 3f 01 ac 00 00 00 00 92 6f 01 6e 00 00 00 00 85 e3 00 e6 00 00 00 00 35 6c 00 00 00 00 00 00 15 eb 00 00 00 00 00 00 50 06 00 00 00 00 00 00 7c eb 00 03 00 00 00 00 fa 48

b4 df 0d ff 00 00 00 00 > 00 00 00 00 ff 0d df b4 > 4279099316 * 1e-05 = 42790.9931...

2020.05.26 07:05:01:

24 04 80 4b ad 0e 00 00 00 00 00 a8 b3 05 55 00 00 00 00 cb 6e 04 7f 00 00 00 00 d7 f2 04 2a 00 00 00 00 00 6d 00 00 00 00 00 00 00 60 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 4a 00 00 00 00 00 00 fb 09 03 fd 00 00 00 00 83 ed 01 ac 00 00 00 00 9c 97 01 6e 00 00 00 00 87 f3 00 e6 00 00 00 00 35 6c 00 00 00 00 00 00 15 eb 00 00 00 00 00 00 50 06 00 00 00 00 00 00 7c eb 00 03 00 00 00 00 65 4f

4b ad 0e 00 00 00 00 00 > 00 00 00 00 00 0e ad 4b > 961867 * 1e-05 = 9.6186...

2020.05.26 07:06:01:

24 04 80 df 4e 0e 00 00 00 00 00 df 4f 05 55 00 00 00 00 fe be 04 7f 00 00 00 00 01 a6 04 2b 00 00 00 00 00 6d 00 00 00 00 00 00 00 60 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 4a 00 00 00 00 00 00 0e e0 03 fe 00 00 00 00 8c 1c 01 ac 00 00 00 00 a6 6f 01 6e 00 00 00 00 89 c1 00 e6 00 00 00 00 35 6c 00 00 00 00 00 00 15 eb 00 00 00 00 00 00 50 06 00 00 00 00 00 00 7c eb 00 03 00 00 00 00 f1 3b

df 4e 0e 00 00 00 00 00 > 00 00 00 00 00 0e 4e df > 937695 * 1e-05 = 9.37695

2020.05.26 07:07:01:

24 04 80 72 78 0e 01 00 00 00 00 15 55 05 56 00 00 00 00 32 22 04 80 00 00 00 00 2b 67 04 2b 00 00 00 00 00 6d 00 00 00 00 00 00 00 60 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 4a 00 00 00 00 00 00 22 9f 03 fe 00 00 00 00 94 20 01 ac 00 00 00 00 b0 4f 01 6e 00 00 00 00 8b 9e 00 e6 00 00 00 00 35 6c 00 00 00 00 00 00 15 eb 00 00 00 00 00 00 50 06 00 00 00 00 00 00 7c eb 00 03 00 00 00 00 13 04

72 78 0e 01 00 00 00 00 > 00 00 00 00 01 0e 78 72 > 17725554 * 1e-05 = 177.2555...

Если здесь кусок, начиная с регистра 0x2200, то

0x2204 input u64 little endian (power_consumption) 1e-05 Ch 2 AP energy L1 Прямая активная энергия для фазы L1 для канала 2 кВт·ч 2.1

должна содержаться тут:

Чтобы исключить такие проблемы, предлагаю присылать скриншоты Modbus Poll или вывод modbus_client вместе с запросом. Думаю, можно будет уже не подгадывать к пиле, просто штуки четыре запроса подряд пришлите, время между ними можно тоже не выжидать.

Нет, не должна. Во-первых, речь идет не о энергии по фазе L1, а о суммарной энергии, которая должна находиться по адресу 0x2200, во-вторых, это дамп всего пакета, а не только полезной нагрузки, поэтому:

24 - адрес устройства
04 - функция (4 - read input registers)
80 - длина данных (64 регистра = 128 байт = 0x80)
b4 df 0d ff 00 00 00 00 - регистры с 0x2200 по 0x2203 - суммарная прямая активная энергия для канала 2
70 82 05 55 00 00 00 00 - регистры с 0x2204 по 0x2207 - прямая активная энергия для фазы L1 для канала 2
97 3a 04 7f 00 00 00 00 - регистры с 0x2208 по 0x220b - прямая активная энергия для фазы L2 для канала 2
...
fa 48 - CRC16

Что касается Modbus Poll и прочих клиентов - к сожалению прибор находится на удаленном объекте и доступ к контроллеру, к которому он подключен, есть только по GPRS-каналу, так что будет довольно сложно провести правильные тесты. Однако могу заверить, что для нашего софта это далеко не первый прибор, работающий по modbus, и дампы более чем корректные. Сейчас попрошу коллег, чтобы повысили уровень логирования до видимости запросов.

Добрый день!

Little-endian относится к порядку регистров, а не байт в регистре.

т.е. правильно не так:

b4 df 0d ff 00 00 00 00 > 00 00 00 00 ff 0d df b4 > 4279099316 * 1e-05 = 42790.9931…

а так:

b4 df 0d ff 00 00 00 00 > 00 00 00 00 0d ff b4 df > 234861791 * 1E-05 = 2348.61791 кВт*ч

Спасибо! Сейчас поправим парсер, посмотрим что будет. Думаю вам стоит уточнить этот момент в документации.

Да, идея хорошая. Сделали: Счётчики электроэнергии серии MAP: таблица Modbus-регистров измеряемых и вычисляемых величин — Wiren Board

Поправили, все заработало, теперь суммарная энергия сходится с пофазовой, за исключением значений обратной энергии, вот например:

total positive active energy:   2618.49
phase positive active energy:   993.523 | 844.151 | 780.815

total negative active energy:   0.00109
phase negative active energy:   0.00096 | 0.00017 | 0.00074

total positive reactive energy  755.071
phase positive reactive energy: 314.855 | 269.658 | 172.989

total negative reactive energy: 0.13676
phase negative reactive energy: 0.05611 | 0.20486 | 2.30698

Возможно дело в недостаточном, на данный момент, количестве данных?

Ну и попутные вопросы - а есть ли хитрости при вычислении значений мощности? Там, вроде бы, порядок регистров big endian, то есть все лежит в правильном порядке? Или мы опять что-то упустили? Суммарные значения мощности все еще не сходятся с пофазовыми (пример в первом сообщении в этой ветке). При этом, значения напряжений на фазах, которое выводится в том же формате (u32, big endian), у нас получаются очень похожими на правду - 220 +/- несколько вольт.

Покажите пожалуйста для значений, которые не сходятся, номера регистров и данные ответов устройства.

Обратите внимание пожалуйста, что для суммарных мощностей множитель не такой, как для пофазных. Кроме таблицы в вики, кстати, есть ещё и машиночитаемый файл: https://github.com/wirenboard/wb-mqtt-serial/blob/master/wb-mqtt-serial-templates/config-map12h-fw2.json . Возможно, будет удобнее.

пока писал вам ответ, делал расчеты и нашел ошибку, дело действительно было в множителях, спасибо