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

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

LoRaWan sensor commands

LoRaWan sensor commands. Version 4.6 (Rev.2.22)

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

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

Способ активации модуля в сети LoraWAN - ABP (Activation by personalisation) или OTAA (Over the Air Activation)

Ключи (APPSKEY[16], NETSKEY[16] - ABP) или (APPKEY[16] - OTAA).

Индикация

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

Короткая вспышка светодиода (20 мс) индицирует нажатие,отпускание кнопки.

Увеличение счетчика импульсов также сопровождается короткой (20 мс) вспышкой светодиода.

Активация модуля в сети LoraWAN подтверждается серией из 7 вспышек светодиода.

Время, дата

Время модуля и сервера необходимо синхронизировать. В процессе работы необходимо корректировать время модуля при его расхождении с сервером. Допустимое отклонение не более 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. А также текущее значение счетчика импульсов. Значение счетчиков импульса можно получить в момент активации или инициировать передачу текущих данных с помощью слайдера, магнита, нажатии кнопки, установки разъема (замыкание тампера). При необходимости эти операции можно повторить.

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

IPK (импульсный коэффициент) = 100 литров на 1 импульс;

Начальные показания INITIAL_CONSUMPTION = 12.5 м3;

Текущее значение счетчика импульсов START_COUNTER = 0x5033.

При таких исходных данных необходимо установить 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

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

INITIAL_CONSUMPTION - начальные показания прибора учета, на момент активации.

IPK - импульсный коэффициент устройства, определяющий соответствие потребленного ресурса на 1 импульс.

INITIAL_METER_DATA = INITIAL_CONSUMPTION/IPK

START_COUNTER - показания счетчика импульсов в момент активации, из сообщения об активации

CURRENT_COUNTER - текущие показания счетчиков импульсов в устройстве

METER_CONSUMPTION - текущие показания прибора учета METER_CONSUMPTION = METER_DATA*IPK

Устройство передает в сообщения данные 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_ON	0x01	Фиксация воздействия магнитного поля на время более 20 секунд
MAGNIT_OFF	0x02	Снятие воздействия магнитного поля
ACTIVATE	0x03	Произошла активация модуля
DEACTIVATE	0x04	Деактивация модуля. Прекращение передачи кадров в эфир
INSERT	0x07	Фиксация установки модуля в счетчик газа
REMOVE	0x08	Фиксация снятия модуля со счетчика газа
COUNTER_OVER	0x09	Произошло переполнение счетчика импульсов. Количество импульсов превысило 4294967295
SET_TIME	0x0A	Фиксация события установки времени модуля
DEPASS_DONE	0x0E	Фиксация депассивации батарейки модуля

Команды

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.