Table of Contents

Описание работы модулей для счетчиков газа Elster, Metrix, Samgaz

Модули выполнены в разных корпусах. Алгоритм функционирования полностью идентичен.

LoRaWan sensor commands

LoRaWan sensor commands. Version 4.6 (Rev.2.22)

Начало работы

Для корректной инсталляции модуля в NS, необходимо знать заводские параметры модуля (Уточнить в спецификации):

Индикация

Индикация с помощью светодиода:

Время, дата

FIXME

Время модуля и сервера необходимо синхронизировать. В процессе работы необходимо корректировать время модуля при его расхождении с сервером. Допустимое отклонение не более 30 секунд

Время модуля передается в виде 4-х байтного счетчика. Это время в секундах, начиная с 2000 года. Время модуля необходимо синхронизировать с временем сервера. Установка времени может происходить при помощи 2 команд: SET_TIME и CORRECT_TIME. Команда SET_TIME предназначена для начальной установки времени и в случае корректировки более +/-128 секунд. При выполнении этой команды могут быть потеряны почасовые данные, если коррекция производиться назад. В дальнейшем сервер должен корректировать время модуля при его расхождении с временем сервера. Рекомендуемое допустимое отклонение времени не более 30 секунд, при его превышении проводится корректировка времени командой CORRECT_TIME.

Режим Активации

Активация происходит после того, как кнопка находится в “зажатом” состоянии 20 секунд. Это происходит при установке модуля в счетчик газа. Опрос датчика происходит постоянно. Режим АКТИВАЦИИ подтверждается светодиодной индикацией - 7 вспышек светодиода с периодом 50 мс. Под АКТИВАЦИЕЙ подразумевается то что модуль начнет пересылать кадры данных по радиотракту. До активации радиотракт выключен. В режиме АКТИВАЦИИ происходят события INSERT и ACTIVATE, передаются кадры NEW_EVENT с событиями - INSERT и ACTIVATE, в данных этих событий передается время события. Также командой GET_CURRENT передаются текущие данные счетчика импульсов. Если модуль снять со счетчика газа (кнопка отжата), то через 30 секунд модуль будет деактивирован. На сервер будет отправлен кадр NEW_EVENT с событиями - REMOVE и DEACTIVATE (в данных этих событий передается время события) и командой GET_CURRENT передаются текущие данные счетчика импульсов.

Данные потребления

После активации модуль будет регулярно пересылать данные потребления. По умолчанию модуль передает данные почасового потребления с интервалом около 4 часов + псевдослучайная составляющая в пределах от 0 до 17 минут. Периодичность отправки данных может быть изменена, но период не может быть меньше 10 минут и больше 36 часов. Можно задать тип передаваемых данных. Возможно передача текущих данных, почасовых, посуточных. Также возможна передача по часовых и суточных одновременно (в одном кадре). Для выбора типа передаваемых данных следует воспользоваться параметром 5 (Тип выдаваемых данных). Почасовые данные сохраняются в архиве, максимальная глубина архива 6 месяцев. Данные суточного потребления также сохраняются в архиве, максимальная глубина 2 года. Глубина архивов конфигурационно не меняется.

Элемент питания (Аккумуляторная батарея)

Один раз в сутки модуль измеряет параметры элемента питания. Измеряется напряжение батареи без нагрузки и напряжение батареи под нагрузкой резистора (150 Ом для модулей на WLE). Эти данные и вычисленное значение внутреннего сопротивления будет передаваться один раз за сутки. По результатам проверки батарейки возможен запуск процесса депассивации батарейки. В этом случае в журнал будет записано событие DEPASS_DONE.

Датчики магнитного поля

В модуле установлены два датчика магнитного поля. Первый датчик фиксирует потребление газа. В счетчике газа в одно из колец механизма установлен магнит. Таким образом модуль фиксирует количество оборотов этого кольца. Счетчик импульсов в модуле только наращивается, нет механизма для сброса счетчика импульсов. Наращивание счетчика импульсов сигнализируется короткой вспышкой светодиода (20 мс). Счетчик импульсов это беззнаковое 4-х байтовое число. При переполнении счетчика он начинает отсчет с “0”. При этом будет сформировано событие COUNTER_OVER и отправлен кадр NEW_EVENT с этим событием. Второй датчик используется для фиксации вредоносного воздействия магнитом на счетчик газа. Если это воздействие было продолжительностью более 20 сек, то на сервер будет отправлен кадр NEW_EVENT с уведомлением о магнитном воздействии MAGNIT_ON. После снятия воздействия магнита на сервер будет отправлен кадр NEW_EVENT о прекращении воздействия магнитного поля MAGNIT_OFF. При кратком воздействии магнитного поля (2-20 сек), на сервер будут отправлены текущие данные счетчика импульсов GET_CURRENT для HARD_TYPE 1,2 и GET_CURRENT_MUL для HARD_TYPE 12.

Организация хранения данных в модуле

CURRENT DATA

CURRENT DATA - Текущие данные счетчика импульсов. Данные хранятся в нескольких местах. При рестарте микроконтроллера производится попытка восстановления данных счетчика импульсов. Проверяется сохраненное значение в BACKUP-регистрах микроконтроллера. Если данные корректны, то они принимаются как данные счетчика импульсов. В противном случае происходит поиск последних сохраненных данных в памяти микроконтроллера. Запись текущих данных в BACKUP-регистр происходит при каждом приращении счетчика импульсов, т.е. в BACKUP-регистре всегда находится актуальное значение счетчика импульсов. Рестарт микроконтроллера не приводит к потере данных в BACKUP-регистрах. Значения счетчика импульсов записывается в память не чаще 90 секунд. Под хранение CURRENT_DATA выделено 2 страницы флеш-памяти - 2048*2=4096 байт.

Формат хранения CURRENT_DATA
0 1 2 3 4 5 6 7 8 9 A B C D E F
CNT[4] RES]* CRC16[2] CNT[4] RES* CRC16[2]

HOURS_DATA

HOURS_DATA - почасовые данные счетчика импульсов. Данные записываются во флэш память микроконтроллера при смене часа по времени микроконтроллера. Под хранение архива почасовых данных отведено 24 страницы флэш памяти 2048*24 = 49152 байт. Почасовые данные за сутки занимают 256 байт. Общая глубина архива не более 6 месяцев.

Формат хранения HOURS_DATA
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 Y M D Hour_0 CNT[4] LRC Y M D Hour_1 CNT[4] LRC
10 Y M D Hour_2 CNT[4] LRC Y M D Hour_3 CNT[4] LRC
20 Y M D Hour_4 CNT[4] LRC Y M D Hour_5 CNT[4] LRC
30 Y M D Hour_6 CNT[4] LRC Y M D Hour_7 CNT[4] LRC
.. .. .. .. .. .. .. .. ..
A0 Y M D Hour_20 CNT[4] LRC Y M D Hour_21 CNT[4] LRC
B0 Y M D Hour_22 CNT[4] LRC Y M D Hour_23 CNT[4] LRC

DAYS_DATA

DAYS_DATA - Данные суточного потребления. Данные записываются во флэш-память в “учетный час” суток. Учетный час можно задать произвольно в пределах 24 часов суток. По умолчанию “учетный час” равен 0 часов. Для хранения архивов суточных данных во флэш-памяти отведено 3 страницы - 2048*3=6144 байта.

Формат хранения DAYS_DATA
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 Y M D_1 CNT[4] LRC Y M D_2 CNT[4] LRC
10 Y M D_3 CNT[4] LRC Y M D_4 CNT[4] LRC
20 Y M D_5 CNT[4] LRC Y M D_6 CNT[4] LRC
30 Y M D_7 CNT[4] LRC Y M D_8 CNT[4] LRC
E0 Y M D_29 CNT[4] LRC Y M D_30 CNT[4] LRC
F0 Y M D_31 CNT[4] LRC

Абсолютные данные. Команды, настройки

Устройство поддерживает режим работы с абсолютными данными. Этот режим устанавливается для того, чтобы из переданных устройством данных можно было легко получить текущие показания прибора учета. В этом режиме устройство использует другой набор команд для передачи данных о потреблении. Для установки начальных показаний прибора учета, необходимо использовать импульсный коэффициент - IPK, который является параметром прибора учета и обозначает объем ресурса на один импульс.

Для установки режима передачи абсолютных данных в модуль, необходимо передать импульсный коэффициент IPK и начальные показания прибора учета, выраженные с учетом импульсного коэффициента INITIAL_METER_DATA= INITIAL_CONSUMPTION/IPK. А также текущее значение счетчика импульсов. Значение счетчиков импульса можно получить в момент активации или инициировать передачу текущих данных с помощью слайдера, магнита, нажатии кнопки, установки разъема (замыкание тампера). При необходимости эти операции можно повторить.

Например, для газового модуля:

При таких исходных данных необходимо установить INITIAL_METER_DATA в значение 12.5/0.1 = 125.

Установка параметров

Для установки параметров режима абсолютных данных используется команда SET_PARAMETERS = 0x03 c TYPE_PARAMETERS = 23.

7 6 5 4 3 2 1 0
0 0 0 CMD SET_PARAMETERS = 0x03
CMD_LENGTH = 10
TYPE_PARAMETERS = 23
INITIAL_METER_DATA[4]
IPK[1]
START_COUNTER[4]

Пример:

hex dump: 030A170000007D6400005033
	     030A - SET_PARAMETERS = 0x03, len = 10 dec
		  17 - TYPE_PARAMETERS = 23
		      0000007D - INITIAL_METER_DATA = 0x0000007D = 125 dec
		      64 - IPK = 0x64 = 100 dec
		     	00005033 - START_COUNTER = 0x5033 = 20531 dec

Режим передачи

Для включения режима передачи абсолютных данных используется команда SET_PARAMETERS = 0x03 c TYPE_PARAMETERS = 24.

7 6 5 4 3 2 1 0
0 0 0 CMD SET_PARAMETERS = 0x03
CMD_LENGTH = 2
TYPE_PARAMETERS = 24
ABS_DATA_EN=1

Пример:

hex dump: 03021801

Параметры TYPE_PARAMETERS = 23 и TYPE_PARAMETERS = 24 можно установить одним сообщением.

Пример:

hex dump: 030A170000007D640000503303021801+LRC

Выполнение команды подтверждается ответом hex dump: 0302170103021801, что подтверждает успешную установку параметров. Так же после этого устройство начнет выдавать абсолютные данные прибора учета. Это означает, что вместо команд DATA_DAY и DATA_HOUR_DIFF, передаваемых периодически без запроса, будут передаваться команды ABS_DATA_DAY и ABS_HOUR_DIFF для модулей HARD_TYPE=1,2 и вместо команд DATA_DAY_MUL и DATA_HOUR_MUL будут выдаваться команды EX_ABS_DAY_MUL и EX_ABS_HOUR_MUL для модулей HARD_TYPE=12.

В сообщениях мы будем получать показания прибора учета с учетом импульсного коэффициента.

Например:

если мы получим значение поля METER_DATA = 0x80 = 128 dec, то это соответствует показаниям прибора учета - METER_CONSUMPTION = METER_DATA*IPK = 128*100=12,8m3

Реализация в устройстве

Устройство передает в сообщения данные METER_DATA = INITIAL_METER_DATA + (CURRENT_COUNTER-START_COUNTER).

Например:

Cтартовые показания прибора учета INITIAL_CONSUMPTION = 41.1 м3(41100 дм3, IPK=100 (100 дм3 на один импульс), текущие показания счетчика импульсов CURRENT_COUNTER = 4580, стартовые показания счетчика импульсов START_COUNTER=5. В результате: METER_DATA = 41100/100 + (4580-5)=4986. В результате получаем текущие показания прибора учета: METER_CONSUMPTION = 4986*100 = 498600 дм3 = 498.6 м3.

События

Все события в модуле записываются в архив событий. Емкость архива - не менее 256 событий и не более 512 событий. При этом в журнал событий записывается время события, код события и номер последовательности LAST_EVENT. Номер события инкрементируется с каждой записью. Этот номер передается на сервер командой LAST_EVENTS , которая добавляется к каждому UPLINK кадру, передаваемому без запроса. Приоритета сообщений в архиве нет. События записываются по циклу. Архивы можно запросить, как самые последние, так и самые старые и начиная с определенного времени.

Событие Код Описание
MAGNIT_ON0x01Фиксация воздействия магнитного поля на время более 20 секунд
MAGNIT_OFF0x02Снятие воздействия магнитного поля
ACTIVATE0x03Произошла активация модуля
DEACTIVATE0x04Деактивация модуля. Прекращение передачи кадров в эфир
INSERT0x07Фиксация установки модуля в счетчик газа
REMOVE0x08Фиксация снятия модуля со счетчика газа
COUNTER_OVER0x09Произошло переполнение счетчика импульсов. Количество импульсов превысило 4294967295
SET_TIME0x0AФиксация события установки времени модуля
DEPASS_DONE0x0EФиксация депассивации батарейки модуля

Команды

HARD_TYPE=1,2 HARD_TYPE=12
UPLINK без запроса
DATA_DAY = 0x20 Данные счетчика импульсов датчика на учетный час. DATA_DAY_MUL=0x16 Данные счетчиков импульсов многоканального датчика на учетный час.
DATA_HOUR_DIF = 0x40 Почасовые данные счетчика импульсов датчика с выдачей опорного счетчика и накопления счетчика в последовательных часах. DATA_HOUR_DIF_MUL=0x17 Данные счетчиков импульсов многоканального датчика на учетный час.
LAST_EVENTS = 0x60 Последнее непрочитанное событие. LAST_EVENTS = 0x60 Последнее непрочитанное событие.
GET_CURRENT=0x07 Команда выдачи текущих показаний счетчика импульсов датчика. GET_CURRENT_MUL=0x18 Команда выдачи текущих показаний счетчика импульсов ногоканального датчика.
ABS_HOUR_DIFF = 0xA0 Почасовые данные прибора учета с выдачей импульсного коэффициента и опорного значения потребленного ресурса и накопления счетчика в последовательных часах. EX_ABS_HOUR_MUL=0x1F-0x0A Команда получения абсолютных данных в формате многоканального счетчика импульсов.
ABS_DATA_DAY = 0xC0 Абсолютные данные прибора учета на учетный час. EX_ABS_DAY_MUL=0x1F-0x0B Команда получения абсолютных данных суточного потребления в формате многоканального счетчика импульсов.
TIME2000 = 0x09 Текущее время датчика TIME2000 = 0x09 Текущее время датчика
NEW_STATUS=0x14 Состояние датчика. NEW_STATUS=0x14 Состояние датчика.
NEW_EVENT=0x15 Произошло событие. NEW_EVENT=0x15 Произошло событие.
Команды, поступающие с сервера NS в DOWNLINK кадрах.
SET_TIME_2000 = 0x02 Корректировка времени в датчике. Четыре байта в параметрах команды знаковое число определяющее величину коррекции времени Time2000. SET_TIME_2000 = 0x02 Корректировка времени в датчике. Четыре байта в параметрах команды знаковое число определяющее величину коррекции времени Time2000.
CORRECT_TIME2000=0x0C Аналогична команде SET_TIME_2000. В данных команды номер последовательности корректировки и один знаковый байт величины коррекции. Команда применяется только если номер последовательности отличается от текущего в датчике. CORRECT_TIME2000=0x0C Аналогична команде SET_TIME_2000. В данных команды номер последовательности корректировки и один знаковый байт величины коррекции. Команда применяется только если номер последовательности отличается от текущего в датчике.
GET_CURRENT = 0x07 Запрос на чтение текущего значения счетчика импульсов. GET_CURRENT_MUL = 0x18 Запрос на чтение текущих значений многоканального счетчика импульсов.
SET_PARAMETERS = 0x03 Установка параметров в датчик. SET_PARAMETERS = 0x03 Установка параметров в датчик.
GET_PARAMETERS = 0x04 Запрос установленных параметров в датчике. GET_PARAMETERS = 0x04 Запрос установленных параметров в датчике.
GET_ARCHIVE_HOURS = 0x05 Запрос на чтение архива часовых выборок счетчика импульсов. GET_ARCHIVE_HOURS_MUL=0x1A Запрос на чтение архива часовых выборок многоканального счетчика импульсов.
GET_ARCHIVE_DAYS = 0x06 Запрос на чтение архива суточных (на 0 часов) выборок счетчика импульсов. GET_ARCHIVE_DAYS_MUL = 0x1B Запрос на чтение архива суточных (на учетный час) выборок многоканального счетчика импульсов.
GET_ARCHIVE_EVENTS=0x0B Запрос на чтение архива событий GET_ARCHIVE_EVENTS=0x0B Запрос на чтение архива событий
SOFT RESET = 0x19 Команда программного сброса. SOFT RESET = 0x19 Команда программного сброса.
GET_LMIC_VERSION=0x1F-0x02 Команда запроса версии LMIC . GET_LMIC_VERSION=0x1F-0x02 Команда запроса версии LMIC .
GET_ABS_ARCHIVE_HOURS=0x1F-0x03 Команда запроса архива данных почасового потребления прибора учета. EX_ABS_ARCH_HOUR_MUL=0x1F-0x0C Команда получения архива абсолютных данных почасового потребления в формате многоканального счетчика импульсов.
GET_ABS_ARCHIVE_DAYS=0x1F-0x04 Команда запроса архива данных суточного потребления прибора учета. EX_ABS_ARCH_DAY_MUL=0x1F-0x0D Команда получения архива абсолютных данных суточного потребления в формате многоканального счетчика импульсов.

Параметры

Тип/Значение
1 Задание временных параметров работы.
4 Задание расчетного часа.
5 Тип выдаваемых данных.
8 Способ доставки приоритетных данных.
9 Способ активации устройства в сети LoraWAN.
10 Параметры депассивации батарейки модуля.
11 BATTERY_ACTIVE_TIME Минимально необходимое время нагрузки батарейки в сутки предохраняющее пассивации.
18 RX2_CFG. Для всех типов модулей. Позволяет настроить параметры работы второго окна приема.
22 DELTA_TIME_EN.
23 METER_BASE_DATA.
24 ABSOLUTE_DATA_EN.
25 SERIAL_NUMBER.
26 GEOLOCATION.
28 TimeExtraFrame.