2485
правок
Admin (обсуждение | вклад) |
|||
Строка 37: | Строка 37: | ||
==== Порядок байт и широкие регистры ==== | ==== Порядок байт и широкие регистры ==== | ||
Некоторые значения, измеряемые счётчиками, занимают больше 16 | Некоторые значения, измеряемые счётчиками, занимают больше 16 бит - размера одного регистра Modbus. Такие значения записываются в нескольких подряд расположенных регистрах: 32-битные в двух регистрах, а 64-битные - в четырёх. | ||
В таблицах ниже для таких регистров указаны типы u32, u64 (без знака), s32 и s64 (со знаком). В качестве адреса в таблице указан адрес первого из подряд идущих регистров. | В таблицах ниже для таких регистров указаны типы u32, u64 (без знака), s32 и s64 (со знаком). В качестве адреса в таблице указан адрес первого из подряд идущих регистров. | ||
Порядок '''регистров''' при декодировании может быть прямой (big-endian) и обратный (little-endian). При этом порядок двух '''байт''' внутри одного 16-битного регистра всегда прямой | Порядок '''регистров''' при декодировании может быть прямой (big-endian) и обратный (little-endian). При этом порядок двух '''байт''' внутри одного 16-битного регистра всегда прямой в соответствии со стандартом. | ||
---- | Пример: считываем четыре регистра 0x2200 - 0x2203: | ||
{| class="wikitable" | |||
|- | |||
! Номер регистра<br /> | |||
! 0x2200 | |||
! 0x2201 | |||
! 0x2202 | |||
! 0x2203 | |||
|- | |||
| Содержимое регистра | |||
| 0хb4df | |||
| 0x0dff | |||
| 0x0000 | |||
| 0x0000 | |||
|} | |||
Смотрим в таблицу регистров: | |||
{|border="1" class="wikitable" style="text-align:center; width:1000px;" | |||
|+ style="text-align:left;" | | |||
!Регистр / адрес (hex) | |||
!Тип | |||
!Разрядность | |||
!Порядок регистров | |||
!Формат | |||
!Множитель | |||
!Параметр | |||
!Назначение | |||
!Единицы измерения | |||
!Прошивка | |||
|- | |||
| 0x2200 || input || u64 || little endian || (power_consumption) || 1e-05 || Ch 2 Total AP energy || Суммарная прямая активная энергия для канала 2 || кВт·ч || 2.1 | |||
|- | |||
|} | |||
Порядок регистров little-endian - значит, регистры идут от младшего к старшему. Поэтому регистры объединяются в итоговое число 0x0000 0000 0dff b4df, оно же 234861791. Для вычисления энергии нужно умножить его на 10<sup>-5</sup>, поэтому в итоге получаем 2348.61791 кВт·ч. | |||
=== WB-MAP12H === | === WB-MAP12H === |