Wbincludes:MAP Data Registers Preface: различия между версиями
Serbosh (обсуждение | вклад) Метка: ручная отмена |
(Поправил ссылку) |
||
(не показано 8 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
''Детальное описание погрешностей: [[Power Meter WB-MAP12H Measuring Parameters |Счетчики WB-MAP: измеряемые параметры и погрешности, их названия в веб-интерфейсе Wiren Board]].'' | ''Детальное описание погрешностей: [[Power Meter WB-MAP12H Measuring Parameters |Счетчики WB-MAP: измеряемые параметры и погрешности, их названия в веб-интерфейсе Wiren Board]].'' | ||
Строка 17: | Строка 16: | ||
{{note|note|В таблице описания регистров термин «Суммарная/суммарный» означает, что параметр вычисляется для всех трех фаз трехфазного канала.}} | {{note|note|В таблице описания регистров термин «Суммарная/суммарный» означает, что параметр вычисляется для всех трех фаз трехфазного канала.}} | ||
В случае с расхождением данных в таблице с шаблоном устройства, верным значением регистра считайте соответствующее значение из шаблона. Текущие версии шаблонов находятся [https://github.com/ | В случае с расхождением данных в таблице с шаблоном устройства, верным значением регистра считайте соответствующее значение из шаблона. Текущие версии шаблонов находятся [https://github.com/wirenboard/wb-mqtt-serial/tree/master/templates по этой ссылке]. | ||
<h4> Примечания к названиям таблиц регистров </h4> | <h4> Примечания к названиям таблиц регистров </h4> | ||
Строка 36: | Строка 35: | ||
<h4> Порядок байт, широкие регистры, вычисление значения </h4> | <h4> Порядок байт, широкие регистры, вычисление значения </h4> | ||
Некоторые измеряемые счётчиками значения занимают больше 16 бит — размера одного регистра Modbus. Такие значения записываются в нескольких расположенных подряд регистрах: 32-битные в двух регистрах, а 64-битные — в четырёх. | Некоторые измеряемые счётчиками значения занимают больше 16 бит — размера одного регистра Modbus. Такие значения записываются в нескольких расположенных подряд регистрах: 32-битные в двух регистрах, а 64-битные — в четырёх. Некоторое стороннее ПО, например, ioBroker, воспринимают Signed 32 little endian, как signed 32 big endian word swap. Если у вас не сходятся расчётные результаты с показаниям в вашем софте — смените там тип. | ||
В таблицах ниже для таких регистров указаны типы u32, u64 (без знака), s32 и s64 (со знаком). В качестве адреса в таблице указан адрес первого из идущих подряд регистров. | В таблицах ниже для таких регистров указаны типы u32, u64 (без знака), s32 и s64 (со знаком). В качестве адреса в таблице указан адрес первого из идущих подряд регистров. | ||
Строка 58: | Строка 57: | ||
|} | |} | ||
Смотрим в таблицу регистров: | Смотрим в таблицу регистров: | ||
{{Wbincludes:Header Registers Universal|fw=true}} | {{Wbincludes:Header Registers Universal|fw=true|no_description=true}} | ||
|- | |- | ||
| 8704 || 0x2200 || Input || RO || u64<br />''little endian'' || ''Ch 2 Total AP energy''<br />Суммарная прямая активная энергия для канала 2 || | | 8704 || 0x2200 || Input || RO || u64<br />''little endian'' || ''Ch 2 Total AP energy''<br />Суммарная прямая активная энергия для канала 2 || х10<sup>-5</sup>, кВт·ч || 2.1 | ||
|- | |- | ||
|} | |} | ||
Порядок регистров little-endian — значит, регистры идут от младшего к старшему. Поэтому регистры объединяются в шестнадцатеричное число <code>0x0000 0000 0dff b4df</code>, оно же 234861791 в десятичной системе счисления. Для вычисления энергии нужно умножить его на 10<sup>-5</sup>, поэтому в итоге получаем 2348.61791 кВт·ч. | Порядок регистров little-endian — значит, регистры идут от младшего к старшему. Поэтому регистры объединяются в шестнадцатеричное число <code>0x0000 0000 0dff b4df</code>, оно же 234861791 в десятичной системе счисления. Для вычисления энергии нужно умножить его на число в столбце "Значения" (10<sup>-5</sup> = 0.00001), поэтому в итоге получаем 2348.61791 кВт·ч. | ||
Другими словами, чтобы получить итоговое число: | Другими словами, чтобы получить итоговое число: | ||
; 0x2200 | ; 0x2200 | ||
: '''младшая часть''' — значение оставляем «как есть» | : '''младшая часть''' — значение оставляем «как есть» : 0хb4df<sub>hex</sub> = 46303<sub>dec</sub> | ||
; 0x2201 | ; 0x2201 | ||
: значение умножаем на 2<sup>16</sup> | : значение умножаем на 2<sup>16</sup> : 0x0dff<sub>hex</sub> = 3583<sub>dec</sub>, 3583 * 65536 = 234815488 | ||
; 0x2202 | ; 0x2202 | ||
: значение умножаем на 2<sup>32</sup> | : значение умножаем на 2<sup>32</sup> : 0 * 4294967296 = 0 | ||
; 0x2203 | ; 0x2203 | ||
: значение умножаем на 2<sup>48</sup> | : значение умножаем на 2<sup>48</sup> : 0 * 281474976710656 = 0 | ||
Суммируем результаты. | Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. | ||
Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево). | Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево). |
Текущая версия на 11:35, 25 декабря 2023
Детальное описание погрешностей: Счетчики WB-MAP: измеряемые параметры и погрешности, их названия в веб-интерфейсе Wiren Board.
Обозначения в шаблонах
В таблицах регистров, описывающих измеряемые величины, используются следующие обозначения.
Для энергий (AP, AN, RP, RN, S, NP, NN): первая буква (A, R, S, N) — тип энергии, второй — направление:
- A — активная;
- R — реактивная;
- S — кажущаяся, вычисляется как URMS * IRMS;
- N — неактивная.
Направление:
- P — прямая (positive);
- N — обратная (negative).
В таблице описания регистров термин «Суммарная/суммарный» означает, что параметр вычисляется для всех трех фаз трехфазного канала. В случае с расхождением данных в таблице с шаблоном устройства, верным значением регистра считайте соответствующее значение из шаблона. Текущие версии шаблонов находятся по этой ссылке.
Примечания к названиям таблиц регистров
Таблицы регистров соответствуют шаблонам для счетчиков.
Версию прошивки счетчика можно проверить командой
echo -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a$mbusaddr -t0x03 -r250 -c 16 | grep Data | sed -e 's/0x00/\x/g' -e 's/Data://' -e 's/s//g'`| xxd -r -p && echo ''
Здесь $mbusaddr
— Modbus-адрес счетчика.
Порядок байт, широкие регистры, вычисление значения
Некоторые измеряемые счётчиками значения занимают больше 16 бит — размера одного регистра Modbus. Такие значения записываются в нескольких расположенных подряд регистрах: 32-битные в двух регистрах, а 64-битные — в четырёх. Некоторое стороннее ПО, например, ioBroker, воспринимают Signed 32 little endian, как signed 32 big endian word swap. Если у вас не сходятся расчётные результаты с показаниям в вашем софте — смените там тип.
В таблицах ниже для таких регистров указаны типы u32, u64 (без знака), s32 и s64 (со знаком). В качестве адреса в таблице указан адрес первого из идущих подряд регистров.
Порядок регистров при декодировании может быть прямым (big-endian) и обратным (little-endian). При этом порядок двух байт внутри одного 16-битного регистра всегда прямой, в соответствии со стандартом.
Пример: считываем четыре регистра 0x2200 – 0x2203:
Номер регистра |
0x2200 | 0x2201 | 0x2202 | 0x2203 |
---|---|---|---|---|
Содержимое регистра | 0хb4df | 0x0dff | 0x0000 | 0x0000 |
Смотрим в таблицу регистров:
Адрес | Параметры регистра | Описание | Значения | FW | |||
---|---|---|---|---|---|---|---|
Dec | Hex | Тип | Доступ | Формат | |||
8704 | 0x2200 | Input | RO | u64 little endian |
Ch 2 Total AP energy Суммарная прямая активная энергия для канала 2 |
х10-5, кВт·ч | 2.1 |
Порядок регистров little-endian — значит, регистры идут от младшего к старшему. Поэтому регистры объединяются в шестнадцатеричное число 0x0000 0000 0dff b4df
, оно же 234861791 в десятичной системе счисления. Для вычисления энергии нужно умножить его на число в столбце "Значения" (10-5 = 0.00001), поэтому в итоге получаем 2348.61791 кВт·ч.
Другими словами, чтобы получить итоговое число:
- 0x2200
- младшая часть — значение оставляем «как есть» : 0хb4dfhex = 46303dec
- 0x2201
- значение умножаем на 216 : 0x0dffhex = 3583dec, 3583 * 65536 = 234815488
- 0x2202
- значение умножаем на 232 : 0 * 4294967296 = 0
- 0x2203
- значение умножаем на 248 : 0 * 281474976710656 = 0
Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево).