Skip to main content

RS-485

Через порт RS-485 модемы OrionMeter LA-IP-RSP и LA-IP-RSP[A] опрашивают подключённые приборы с интерфейсом Modbus RTU. Устройство само читает регистры приборов по расписанию и передаёт их по LoRaWAN, а по команде с сервера выполняет разовое чтение или запись. Страница нужна тем, кто настраивает порт и опрос по эфиру и разбирает пакеты устройства на своём сервере. Здесь «устройство» — модем OrionMeter, «прибор» — то, что подключено к его порту RS-485. Описание соответствует прошивке METER_V3.1.5.84; что зависит от версии, собрано в разделе «Версии прошивки».

Что даёт интерфейс​

  • Порт RS-485 один, на нём до четырёх приборов — слоты 0–3. У каждого слота свой адрес прибора, свои группы регистров и своё расписание.
  • Протокол обмена с приборами задаёт драйвер. В прошивку при сборке входит ровно один драйвер, и все слоты порта работают через него.
  • Текущие сборки прошивки выпускаются для LA-IP-RSP[A] с драйвером Modbus RTU (DRV ID 14, 0x0E). Драйвер виден в имени файла прошивки: ..._DRV(MODBUS_UNI)_public.zip — Modbus RTU.
  • В таблице драйверов прошивки есть и другие, например драйвер «Пульсар» для счётчиков воды (DRV ID 33, 0x21): по описанию кодека, по нему работают модемы LA-IP-RSP на счётчиках воды. В текущие сборки эти драйверы не входят, поэтому на странице описан только Modbus RTU.
LA-IP-RSPLA-IP-RSP[A]
Питание модемаБатареяСеть переменного тока
Класс LoRaWANAA, C
Порт RS-4851 порт, 4 слота1 порт, 4 слота
Питание прибора от порта3,3 или 9 В на время опроса3,3 или 9 В на время опроса либо без отключения между опросами
Допустимый ток при DC 9 В (по спецификации)40 мА50 мА
Мониторинг регистровНетЕсть
Команда управления питанием 0xAAНетЕсть
Минимальная пауза между пробуждениями одного слота60 секунд2 секунды

Подключение и питание прибора​

Порт полудуплексный: направление приёмопередатчика — передача или приём — переключает прошивка.

Прибору без собственного питания интерфейса устройство может подать питание с порта. Источник задают биты 6–7 байта DEVCFG в конфигурации слота:

ЗначениеПитание прибора
0Выключено
13,3 В на время опроса
2«Без изменений», только LA-IP-RSP[A]: устройство не переключает питание ни перед опросом, ни после. Включают и выключают его командой 0xAA, см. «Управление питанием». На LA-IP-RSP значение 2 работает как 0
39 В на время опроса

При значениях 1 и 3 устройство перед опросом включает питание, ждёт задержку включения и выключает питание, когда опрос закончен. Задержку задают биты 0–3 DEVCFG с шагом 333 мс: от 0 до 15 шагов, то есть до 5 секунд. Допустимый ток нагрузки — по спецификации: до 40 мА у LA-IP-RSP и до 50 мА у LA-IP-RSP[A] при DC 9 В.

На LA-IP-RSP[A] после первого опроса с питанием 2 — по DEVCFG слота или по байту питания разовой команды — или после команды 0xAA устройство до перезагрузки не выключает питание после опросов слотов со значениями 1 и 3. Не смешивайте на одном порту слоты со значением 2 и со значениями 0, 1, 3.

Порядок настройки​

Порт и опрос настраивают downlink-пакетом Protocol 78 на fPort 2; настройку устройство принимает и на fPort 1. После заголовка — ID 0x78, SEQ, FLAGS — идут элементы: байт FORMAT, байт LEN с длиной тела элемента, затем тело. В кадре может быть несколько элементов, устройство обрабатывает их по порядку.

FORMATЭлемент
0x06Конфигурация слота или разовая команда
0x07Параметры порта
0x16Часть конфигурации слота, когда она не помещается в один кадр
  1. Отправьте конфигурацию слота — элемент 0x06. Если драйвер Modbus RTU на порту ещё ни разу не загружался, устройство загружает его и записывает параметры порта по умолчанию: 9600 бит/с, 8N1. Сохранённые ранее параметры при повторной загрузке драйвера не сбрасываются.
  2. Если прибору нужны другие параметры порта, отправьте элемент 0x07. До первой загрузки драйвера устройство этот элемент отклоняет. Оба элемента можно передать в одном кадре — 0x06 первым.
  3. Проверьте ответ устройства: на каждый элемент придёт CFG_ID, а бит в CFG_RESULT покажет, применён ли элемент, см. «Подтверждение настройки».

Через ONS кадр отправляют командой downlink_data_req: data — кадр в hex, fport — 2.

Параметры порта (FORMAT 0x07)​

Элемент: 07 04, затем 4 байта тела.

Байты телаЗначение
0–1В кодеке — номер порта (PORT, uint16). Прошивка эти байты пропускает и всегда настраивает порт 0. Передавайте 00 00
2–3SERIAL_CFG, uint16, младший байт первым
Биты SERIAL_CFGПараметрЗначения
0–3СкоростьНомер в списке ниже
4–5Чётность0 — нет, 1 — чётная (even), 2 — нечётная (odd)
6–7Стоп-биты0 — 1, 1 — 0,5, 2 — 2, 3 — 1,5
8–9Длина слова0 — 7 бит, 1 — 8 бит, 2 — 9 бит
10–15Резерв0

Скорость, бит/с: 0 — 300, 1 — 600, 2 — 1200, 3 — 2400, 4 — 4800, 5 — 9600, 6 — 14 400, 7 — 19 200, 8 — 38 400, 9 — 57 600, 10 — 115 200, 11 — 128 000, 12 — 230 400, 13 — 256 000.

Длина слова включает бит чётности: прошивка передаёт значение в UART как есть, и 9-битное слово — это 8 бит данных и бит чётности. Поэтому при чётности even или odd указывайте длину на 1 больше: для 8E1 — 2 (9 бит).

Пример: 9600 бит/с, 8E1.

78 00 00 07 04 00 00 15 02
БайтыЗначение
78 00 00Заголовок Protocol 78: ID, SEQ, FLAGS
07FORMAT 0x07 — параметры порта
04LEN: 4 байта тела
00 00Номер порта, прошивка пропускает
15 02SERIAL_CFG = 0x0215: скорость 5 (9600), чётность 1 (even), стоп-биты 0 (1), длина слова 2 (9 бит)

На этот элемент устройство ответит CFG_ID 08 03 07 8F.

Параметры принадлежат порту, поэтому общие для всех четырёх слотов. Значения устройство при приёме не проверяет и сохраняет как есть. Если номер вне списка — скорость 14–15, чётность 3, длина слова 3, — при следующем опросе порт не откроется, и опрос закончится событием ошибки с кодом 7.

Конфигурация опроса Modbus RTU (FORMAT 0x06)​

Заголовок элемента​

Элемент: 06 <LEN> <DRV_HDR, 2 байта> <LEN_TYPE> <данные>.

Биты DRV_HDR (uint16, младший байт первым)Значение
0–11DRV ID: 14 (0x00E) — Modbus RTU
12–13Слот, 0–3
14Прошивка не читает; в кодеке — TRIGGER/FORCED. Передавайте 0
15ENABLED: 1 — слот включён, 0 — выключить слот
Биты LEN_TYPEЗначение
0–5Длина данных минус 1
6–7Тип: 0 — EMPTY (без конфигурации), 1 — CONFIG (конфигурация опроса), 3 — COMMAND (разовая команда, см. «Разовые команды»). Тип 2 устройство отклоняет

Данные конфигурации​

БайтыЗначение
0Адрес прибора (slave)
1DEVCFG: задержка включения, число попыток, питание прибора
2Резерв, 0
3–13Группа 1
14–24Группа 2
25–35Группа 3
36–46Группа 4

Полная конфигурация — 47 байт. Кодек передаёт только заданные группы: в примере ниже одна группа, 14 байт данных.

Биты DEVCFGЗначение
0–3Задержка после включения питания прибора, шаг 333 мс: 0–15
4–5Число попыток опроса блока по расписанию: 0 и 1 — одна, 2 — две, 3 — три
6–7Питание прибора: 0 — выключено, 1 — 3,3 В, 2 — без изменений, 3 — 9 В, см. «Подключение и питание прибора»

Ответ прибора устройство ждёт до 2 секунд. Между попытками — паузы 300, 600 и 1200 мс.

Группы и блоки регистров​

Группа — 11 байт: PARAM CFG (3 байта) и два блока регистров (по 4 байта). Все числа — младшим байтом вперёд.

Биты PARAM CFG (uint24)Значение
0–12Интервал опроса: (значение + 1) × 10 минут
13–17Час начала по UTC, 0–23; 31 — случайный час
18–19Резерв
20–21Цифровой вход: 0 — без привязки, 1–3 — вход 1–3, см. «Привязка группы к цифровому входу»
22Ожидаемое состояние входа: 0 — разомкнут, 1 — замкнут
23Группа активна
Биты блока (uint32)Значение
0–1Функция: 0 — FC01 (coils), 1 — FC02 (discrete inputs), 2 — FC03 (holding registers), 3 — FC04 (input registers)
2–4Делитель мониторинга, 0 — выключен. Только LA-IP-RSP[A], см. «Мониторинг регистров»
5Мониторинг: критичное значение — отправить сразу
6Мониторинг: отправить с подтверждением LoRaWAN
7Резерв
8–15Количество регистров или битов; 0 — блок выключен
16–31Адрес первого регистра

Что устройство отклоняет​

Драйвер отклоняет конфигурацию целиком, если:

  • в активной группе у обоих блоков количество 0;
  • оба блока группы включены и совпадают по функции и адресу;
  • в блоке FC03 или FC04 больше 125 регистров;
  • нет ни одной активной группы.

Отклонённая конфигурация не меняет работу слота: он продолжает опрос по прежней рабочей конфигурации.

Пример: опрос 10 регистров раз в час​

Прибор с адресом 1, две попытки, питание 9 В, задержка включения 3 × 333 мс. Одна группа: раз в 60 минут, начиная с 00:00 UTC, читать 10 holding-регистров с адреса 0.

78 00 00 06 11 0E 80 4D 01 E3 00 05 00 80 02 0A 00 00 00 00 00 00
БайтыЗначение
78 00 00Заголовок Protocol 78
06 11FORMAT 0x06, LEN 17
0E 80DRV_HDR 0x800E: DRV ID 14, слот 0, ENABLED
4DLEN_TYPE: CONFIG, 14 байт данных
01Адрес прибора 1
E3DEVCFG: задержка 3, попыток 2, питание 3 (9 В)
00Резерв
05 00 80PARAM CFG 0x800005: интервал (5 + 1) × 10 = 60 минут, час начала 0, группа активна
02 0A 00 00Блок 1: FC03, 10 регистров с адреса 0
00 00 00 00Блок 2 выключен

Устройство ответит CFG_ID 08 03 06 60 и, если конфигурация применена, CFG_RESULT 08 02 01 00.

Расписание и первый опрос​

Каждая активная группа опрашивается раз в (значение + 1) × 10 минут — от 10 до 81 920 минут. Опросы привязаны к часу начала: час начала + k × интервал. Часы устройства идут по UTC, поэтому час начала — тоже по UTC. Например, интервал 6 часов (значение 35) и час начала 3 дают опросы в 03:00, 09:00, 15:00 и 21:00 UTC.

  • Час начала 31 — случайный: устройство выбирает его один раз при запуске.
  • Час начала 24–30 — группа по расписанию не опрашивается.

Первый опрос после применения конфигурации:

  1. Слот просыпается через 60 секунд в классе A или через 10 секунд в классе C. Разовая команда в классе A выполняется через 3 секунды.
  2. Устройство сразу делает полный опрос с соблюдением минимальной паузы между пробуждениями слота: 60 секунд на LA-IP-RSP, 2 секунды на LA-IP-RSP[A].
  3. Если до ближайшего опроса по расписанию меньше половины интервала, устройство не опрашивает сразу, а ждёт этого опроса.

На LA-IP-RSP опрос откладывается на 90 секунд, пока менеджер питания не разрешает дополнительную нагрузку на батарею.

Привязка группы к цифровому входу​

Группу можно привязать к одному из трёх цифровых входов: биты 20–21 PARAM CFG — номер входа, бит 22 — ожидаемое состояние. Опрос группы по расписанию выполняется, только если вход включён в режиме «Цифровой» и находится в ожидаемом состоянии. В остальных случаях этот опрос пропускается.

Если вход выключен или работает в счётном режиме, его состояние не определено, и группа опрашивается без условия.

Мониторинг регистров​

Мониторинг работает только на LA-IP-RSP[A]. Блок с ненулевым делителем устройство читает N раз за интервал группы, с шагом интервал / N: один полный опрос и N − 1 чтений мониторинга между полными опросами. Шаг не короче минимальной паузы между пробуждениями слота (2 секунды).

Делитель (биты 2–4 блока)1234567
N — чтений за интервал30020010050403020
  • Данные мониторинга устройство отправляет, только если они изменились, — с причиной 7 в записи 0x20.
  • Биты 5 (критичное значение — отправить сразу) и 6 (с подтверждением LoRaWAN) действуют только на чтения мониторинга.
  • События ошибок мониторинга ограничены: не больше одного за 600 секунд на слот. Младшая половина байта subCode в таком событии — число неудач.

На LA-IP-RSP мониторинга в прошивке нет, и делитель не действует.

Разовые команды​

Разовая команда — элемент 0x06 с типом COMMAND (биты 6–7 LEN_TYPE = 3). Команда адресуется включённому слоту: команду выключенному слоту или для драйвера, который не загружен на порту, устройство отклоняет. Команду, пришедшую, пока драйвер занят опросом, устройство тоже отклоняет — событием с кодом 19, точка отказа 1.

Чтение и запись​

ПолеРазмерЗначение
Тип1 байт0x01 — чтение, 0x02 — запись, 0xAA — управление питанием
Функция1 байтКод функции Modbus: 01–04 — чтение; 05, 06, 0F, 10 — запись
Первый регистр2 байта, младший первым
Количество1 байтРегистров или битов. Для FC05 и FC06 не используется
Флаги2 байта, младший первымСм. таблицу ниже
Адрес прибора1 байтТолько с битом 3. Без него — адрес из конфигурации слота
Питание1 байтТолько с битом 4: биты 0–3 — задержка, шаг 333 мс; биты 4–5 — питание прибора: 0 — выключено, 1 — 3,3 В, 2 — без изменений, 3 — 9 В
Параметры порта2 байтаТолько с битом 5: SERIAL_CFG, как в FORMAT 0x07
Задержка после записи2 байта, мсТолько запись с битом 7
Число байт данных1 байтТолько запись: 1–32. Иначе устройство ответит событием с кодом 7
Данные1–32 байтаТолько запись. Для FC05 и FC06 значение — первые два байта, старший первым
Биты флаговЗначение
0–2Приоритет результата: 1 — низкий, 2 — обычный, 3 — высокий, 4 — критичный, uplink уходит сразу. 0 — для записи без бита 6 данных не будет: придёт запись 0x20 с причиной 4; результат чтения придёт с низким приоритетом
3Свой адрес прибора
4Свой байт питания
5Свои параметры порта
6Прочитать после записи
7Задержка после записи
14–15Число попыток минус 1: 0–3 — от 1 до 4 попыток

Вся команда — от байта типа до последнего байта данных — не длиннее 41 байта; длиннее устройство отклоняет событием с кодом 19, точка отказа 8. Поэтому с необязательными полями данных помещается меньше 32 байт: с задержкой после записи — до 31, со всеми полями — до 27.

Пример: прочитать 4 holding-регистра с адреса 0x0100 у прибора с адресом 17 на слоте 1.

78 00 00 06 0B 0E 90 C7 01 03 00 01 04 0A 00 11
БайтыЗначение
06 0BFORMAT 0x06, LEN 11
0E 90DRV_HDR 0x900E: DRV ID 14, слот 1, ENABLED
C7LEN_TYPE: COMMAND, 8 байт данных
01Чтение
03FC03
00 01Первый регистр 0x0100
044 регистра
0A 00Флаги 0x000A: приоритет 2, свой адрес прибора, одна попытка
11Адрес прибора 17

Пример: записать функцией FC16 (0x10) два регистра с адреса 0x0010, через 500 мс прочитать их обратно.

78 00 00 06 11 0E 80 CD 02 10 10 00 02 C2 00 F4 01 04 00 01 00 02
БайтыЗначение
06 11FORMAT 0x06, LEN 17
0E 80DRV ID 14, слот 0, ENABLED
CDLEN_TYPE: COMMAND, 14 байт данных
02Запись
10FC16
10 00Первый регистр 0x0010
022 регистра
C2 00Флаги 0x00C2: приоритет 2, прочитать после записи, задержка после записи; адрес прибора — из конфигурации слота
F4 01Задержка 500 мс
044 байта данных
00 01 00 02Данные

Результат команды приходит в записи 0x20 с причиной 1 (чтение), 4, 5 или 6 (запись), см. «Данные от устройства».

Управление питанием​

Команда 0xAA: AA <состояние> <отчёт>. Состояние: 0 — выключить, 1 — 3,3 В, 2 — не менять, 3 — 9 В. Отчёт не 0 — устройство пришлёт событие с кодом 0.

Команда работает только на LA-IP-RSP[A] и только если у слота питание прибора «без изменений» (значение 2 в DEVCFG). Иначе устройство ответит событием с кодом 5, а LA-IP-RSP — с кодом 9. Питание остаётся в заданном состоянии, пока его не изменит следующая команда 0xAA или опрос другого слота с питанием 0, 1 или 3: питание у порта общее, и такой опрос его включает или выключает.

Пример: включить 9 В и прислать отчёт.

78 00 00 06 06 0E 80 C2 AA 03 FF
БайтыЗначение
06 06FORMAT 0x06, LEN 6
0E 80DRV ID 14, слот 0, ENABLED
C2LEN_TYPE: COMMAND, 3 байта данных
AAУправление питанием
039 В
FFПрислать отчёт

Данные от устройства (запись 0x20)​

Прочитанные регистры устройство передаёт в uplink записью 0x20 — FORMAT MODBUS из формата пакета Protocol 78.

ПолеРазмерЗначение
FORMAT1 байт0x20
TIMESTAMP4 байта, младший первымВремя ответа прибора: секунды с 01.01.2000 UTC. UNIX-время = значение + 946684800
FLAGS1 байтБиты 0–1 — слот; биты 2–6 — сколько блоков идёт после первого; бит 7 — есть EXT_FLAGS
EXT_FLAGS2 байта, младший первымБиты 0–2 — причина; бит 5 — блок разбит на части
БлокФункция (1 байт: 0–3 — FC01–FC04), количество (1 байт), начальный адрес (2 байта, младший первым), данные

Данные блока — байты из ответа прибора после поля с числом байт: для FC03 и FC04 — регистры старшим байтом вперёд, по 2 байта на регистр; для FC01 и FC02 — биты, по 8 в байте, (количество + 7) / 8 байт. Блоки с одинаковыми меткой времени, слотом и флагами устройство объединяет в одну запись.

ПричинаЧто прочитано
0Опрос по расписанию
1Разовая команда чтения
4Запись выполнена, данных нет
5Записанные данные
6Чтение после записи
7Мониторинг

Причины 2 и 3 относятся к опросу по событию, который в текущей прошивке выключен.

Пример: опрос по расписанию, слот 0, регистры 0 и 1.

78 02 00 20 40 42 5A 32 80 00 00 02 02 00 00 00 0A 00 14
БайтыЗначение
78 02 00Заголовок Protocol 78
20Запись Modbus
40 42 5A 320x325A4240 = 844776000; 844776000 + 946684800 = 1791460800 — 08.10.2026 12:00:00 UTC
80FLAGS: слот 0, один блок, есть EXT_FLAGS
00 00EXT_FLAGS: причина 0 — расписание
02FC03
022 регистра
00 00Начальный адрес 0
00 0A 00 14Регистр 0 = 0x000A, регистр 1 = 0x0014

Фрагмент вывода кодека для этого пакета (служебные поля опущены). Слот 0 кодек называет bus1, функцию выводит настоящим кодом Modbus — 3:

"serial": {
"bus1": {
"utctimestamp": "2026-10-08T12:00:00.000Z",
"trigger": { "type": { "value": 0, "description": "Scheduled reading" } },
"modbus1": {
"function": 3,
"count": 2,
"start_address": 0,
"data": { "0": { "value": "000A" }, "1": { "value": "0014" } }
}
}
}

Длинные блоки​

Блок FC03 или FC04, который не помещается в кадр uplink, устройство делит на части. В каждой части бит 5 EXT_FLAGS = 1, а между EXT_FLAGS и заголовком блока идут 3 байта:

БайтЗначение
0Биты 0–2 — номер пакета, 0–7; биты 3–7 — номер части
1Сколько регистров в блоке всего
2Биты 0–6 — сколько регистров в этой части; бит 7 — последняя часть

Блоки FC01 и FC02 на части не делятся.

Отправка с подтверждением LoRaWAN​

Данные слота можно отправлять с подтверждением LoRaWAN — системной командой 0x15 (FORMAT 0x00): 00 03 15 <слот> <группы>, где биты 0–3 последнего байта — группы 1–4. В текущей прошивке бит выбирается по положению блока в прогоне, а не строго по номеру группы, поэтому для подтверждённой доставки включайте все группы:

78 00 00 00 03 15 00 0F

Ошибки обмена (запись 0x08, подтип 0x07)​

Ошибки обмена с прибором устройство передаёт служебной записью 0x08 с подтипом 0x07: 08 07 <TIMESTAMP, 4 байта> <2 байта: биты 0–11 — DRV ID, 12–13 — слот, 14 — порт> <код> <subCode>.

КодЗначениеsubCode
0Нет ошибки — отчёт о выполнении
1Прибор не ответилПозиция блока
2Не сошлась контрольная сумма ответаПозиция блока
5Сбой обмена
7Ошибка конфигурации
8Нарушение протоколаАдрес прибора или код функции из чужого ответа; 0 — неверная длина данных; позиция блока — если число байт в ответе не совпало с запросом (с METER_V3.1.5.62)
9Внутренняя ошибка драйвера0xF0 — прогон прерван по таймеру порта (60 секунд); 0–4 — внутреннее состояние драйвера; 0 — также ответ LA-IP-RSP на команду 0xAA
10Исключение ModbusКод исключения от прибора
11Переполнение приёмника UARTПозиция блока
12Ошибка кадра на линииПозиция блока
13Шум на линииПозиция блока
14Аппаратный сбой UART
15Ошибка чётности
16Переполнение, ошибка кадра и шум одновременноПозиция блока
17Очередь uplink переполнена, данные потеряныПозиция блока
18Ответ короче 5 байтПозиция блока
19Конфигурация или команда из downlink не примененаСтаршая половина байта — точка отказа 1–12, младшая — слот
255Ошибка не распознанаПозиция блока

Позиция блока: старшая половина байта — номер блока в конфигурации, 0–7 (группа × 2 + блок, с нуля); младшая — сколько блоков прогона оставалось, включая этот. У блоков с мониторингом младшая половина — число неудач.

Точка отказа (код 19)Где
1Драйвер занят — команда отклонена
2Неверный номер слота
3Команда выключенному слоту
4Выключение слота
5Загрузка драйвера, в том числе драйвера нет в сборке
6Запуск драйвера
7У драйвера нет обработчиков
8Драйвер отклонил конфигурацию
9Запись конфигурации в память
10Нет сохранённой конфигурации для включения слота
11Включение слота
12Команда для драйвера, который не загружен на порту

Пример: таймаут на слоте 1.

78 01 00 08 07 40 42 5A 32 0E 10 01 13

0E 10 — DRV ID 14, слот 1; 01 — прибор не ответил; 13 — блок 1 (группа 1, второй блок), оставалось 3 блока. Фрагмент вывода кодека:

"serial": {
"bus2": {
"error": {
"utctimestamp": "2026-10-08T12:00:00.000Z",
"drvId": 14,
"code": 1,
"codeDescription": "Timeout",
"subCode": 19
}
}
}

Когда прогон прерывается​

Прогон — опрос всех блоков слота за одно пробуждение. Если блок не прочитан за все попытки, устройство сообщает об ошибке и переходит к следующему блоку. Прогон прерывается целиком, если:

  • прибор не ответил на первый блок;
  • прибор ответил исключением Modbus;
  • пришёл ответ с чужим адресом прибора или с неизвестной функцией;
  • не прочитан блок разовой команды.

Прогон дольше 60 секунд прерывает таймер порта (код 9, subCode 0xF0); дальше слот работает по расписанию.

Подтверждение настройки​

  • На каждый элемент 0x06 и 0x16 устройство отвечает записью CFG_ID 08 03 06 <cfg_id>: cfg_id = (tag6 << 2) | слот, где tag6 — младшие 6 бит CRC-16/MODBUS по байтам элемента после FORMAT и LEN. Сервер считает tag6 по отправленным байтам и сверяет с ответом.
  • На элемент 0x07 — 08 03 07 <tag8>, где tag8 — младший байт той же CRC. Для примера 9600 8E1 — 0x8F.
  • Применён ли элемент, показывает CFG_RESULT 08 02 <uint16, младший байт первым>: бит с порядковым номером элемента среди элементов настройки кадра равен 1, если элемент применён. В счёт идут только элементы, на которые устройство отвечает CFG_ID: запросы 0x11 и элементы, которые устройство пропускает (например, 0x05), номера не получают.
  • CFG_ID подтверждает только, что элемент обработан, — успех показывает бит в CFG_RESULT.

Кодек разбирает 08 03 06 B6 как слот 2, tag6 = 45.

Если конфигурация пришла, пока драйвер занят опросом, устройство ставит её в очередь и применяет, когда драйвер освободится. CFG_ID в этом случае придёт в одном из следующих uplink записью 08 0D <блок> <cfg_id> <номер элемента>; номер элемента — это номер бита в CFG_RESULT того же uplink. На каждый слот в очереди одно место: следующий элемент для того же слота, пока первый ждёт, устройство отклоняет — бит в CFG_RESULT равен 0, события с кодом 19 нет.

Выключить и снова включить слот​

  • Выключить слот — элемент 0x06 с ENABLED = 0.
  • Включить снова с сохранённой конфигурацией — элемент 0x06 типа EMPTY с ENABLED = 1. Сохранённая конфигурация должна быть для того же драйвера, иначе устройство ответит событием с кодом 19, точка отказа 10.

После LEN_TYPE нужен хотя бы один байт данных и для EMPTY: поле длины хранит длину минус 1. Для слота 0:

78 00 00 06 04 0E 00 00 00 — выключить
78 00 00 06 04 0E 80 00 00 — включить с сохранённой конфигурацией

Прочитать настройки из устройства​

Текущую конфигурацию слота и параметры порта можно прочитать служебным запросом 0x11 с типом 0x04:

78 00 00 11 03 04 06 00 — конфигурация слота 0 (последний байт — слот)
78 00 00 11 03 04 07 00 — параметры порта

Ответ приходит записью 08 0B, а если не помещается в кадр — частями 08 0C. Кодек строит эти запросы и разбирает ответы.

Большие конфигурации​

На скоростях DR0–DR2 в частотных планах EU868 и KZ865 кадр downlink — не больше 51 байта. Заголовок, FORMAT, LEN, DRV_HDR и LEN_TYPE занимают 8 байт, на данные драйвера остаётся 43 байта. Конфигурация из трёх групп (36 байт) помещается, из четырёх (47 байт) — нет: такой кадр занимает 55 байт, и кодек об этом предупреждает. ONS отклоняет downlink_data_req с данными больше предела ошибкой 4. Предел считается для скорости из поля dr, а без него — для скорости последнего uplink, см. max_dl_data_req.

Конфигурацию, которая не помещается в кадр, передают частями — элементами 0x16: 16 <LEN> <DRV_HDR> <FRAG> <часть данных>. Байта LEN_TYPE в элементе нет.

Биты FRAGЗначение
0–5Смещение части в данных конфигурации
6Резерв, 0
7LAST — последняя часть
  • Устройство собирает части в памяти и применяет конфигурацию целиком, только после части с LAST.
  • Часть со смещением 0 начинает сборку заново. Часть с пропуском или часть другого слота устройство отклоняет.
  • В частях должно быть ENABLED = 1. Выключают слот обычным элементом 0x06.
  • На каждую часть приходит свой CFG_ID.

Кодек сам делит конфигурацию на кадры. Пример: слот 0, четыре группы — 10 holding-регистров с адреса 0 и 10 с адреса 100 раз в час, 4 input-регистра с адреса 0 раз в час, 16 coils с адреса 0 раз в сутки с 03:00 UTC.

78 00 00 16 2E 0E 80 00 01 E3 00 05 00 80 02 0A 00 00 00 00 00 00 05 00 80 02 0A 64 00 00 00 00 00 05 00 80 03 04 00 00 00 00 00 00 8F 60 80 00 10 00 00
78 01 00 16 07 0E 80 AB 00 00 00 00

Первый кадр — 51 байт: FRAG 0x00 — смещение 0, не последняя часть, 43 байта данных; ожидаемый CFG_ID 08 03 06 44. Второй — 12 байт: FRAG 0xAB — смещение 43, LAST, оставшиеся 4 байта; ожидаемый CFG_ID 08 03 06 38.

Отправляйте кадры строго по порядку и ставьте следующий в очередь только после того, как ушёл предыдущий: из очереди ONS первым уходит последний поставленный кадр, см. downlink_data_req.

Версии прошивки​

Номера версий не растут по дате: METER_V3.0.4.7 собрана в августе 2026, METER_V3.0.4.137 — в мае 2026, а METER_V3.1.5.0–3.1.5.12 — в июне 2026, раньше обеих. Поэтому сверяйте возможность по таблице, где для линии 3.1.5 номер указан отдельно.

ВозможностьПервая версия
Части конфигурации, FORMAT 0x16METER_V3.0.4.7; в линии 3.1.5 — METER_V3.1.5.13. Более старая прошивка элемент 0x16 пропускает
CFG_ID на элементы 0x06METER_V3.0.4.137
CFG_ID на каждый элемент кадраMETER_V3.0.5.4; в линии 3.1.5 — METER_V3.1.5.13
Продолжение прогона после потерянного блока; паузы 300, 600 и 1200 мс между попыткамиMETER_V3.1.5.34
Код ошибки 18METER_V3.1.5.49
Код ошибки 19METER_V3.1.5.55
Отказ на тип 2 в LEN_TYPEMETER_V3.1.5.60
Отложенный CFG_ID 08 0DMETER_V3.1.5.73
Биты 6 и 7 флагов команды записиMETER_V3.1.5.77. В более старых прошивках бит 6 не действует (запись выполняется без чтения после неё), а с битом 7 команда разбирается со сдвигом: младший байт задержки принимается за число байт данных. Если он равен 0 или больше 32, команда отклоняется с кодом 7, иначе прибору уходит запись с неверными данными. Не задавайте эти биты в более старых прошивках

В текущей прошивке, кроме того:

  • элемент 0x06 для драйвера, которого нет в сборке, отклоняется без последствий для рабочих слотов; в более ранних прошивках такой элемент мог отключить слоты Modbus;
  • конфигурация, которую отклонил драйвер, оставляет слот работать по прежней конфигурации.

Одинаковы в METER_V3.0.4.132 и в текущей прошивке: раскладка параметров порта и список скоростей, правило «сначала драйвер, потом 0x07», раскладка конфигурации Modbus, число попыток и отсутствие мониторинга на LA-IP-RSP.

Что важно знать​

  • Порт 1 не поддерживается. Кодек умеет строить элементы 0x05 и 0x15 для порта 1, но LA-IP-RSP их пропускает: без бита в CFG_RESULT и без CFG_ID. Используйте 0x06 и 0x16.
  • Сначала драйвер, потом порт. Элемент 0x07 до первой конфигурации слота отклоняется. Параметры порта общие для всех слотов.
  • Значения 0x07 не проверяются при приёме. Ошибка в номере скорости, чётности или длины слова проявится при следующем опросе событием с кодом 7.
  • Час начала — по UTC. Часовой пояс при расчёте расписания не учитывается.
  • CFG_ID — не признак успеха. Успех показывает бит в CFG_RESULT.
  • Прозрачного канала нет. Передать произвольные байты в RS-485 через LoRaWAN нельзя.
  • Опроса по событию нет. Опрос по цифровому входу или магниту (системная команда 0x11, причины 2 и 3 в записи 0x20) в линии 3.1.5 выключен. Привязка группы к цифровому входу — другая возможность, она работает.

См. также​