SAUK · Протокол Modbus

Протокол MODBUS RTU и TCP/IP для RFID-считывателей SAUK

Обмен данными с RFID-считывателем по протоколу Modbus: чтение обнаруженных меток (функции 03 и 04), управление сканированием (06) и запись данных в метку (16). Одинаково работает по сети (Modbus TCP/IP через Ethernet или Wi-Fi) и по проводным линиям (Modbus RTU через RS-485, RS-232).

Modbus RTU / TCP-IP Ethernet / Wi-Fi / RS-485 / RS-232 Holding Register 0x03 FC 03 / 04 / 06 / 16
Содержание
Ничего не найдено. Попробуйте другую формулировку — например, «1000», «RSSI», «WRITE» или «пароль».

1Общие сведения

Ниже описан протокол Modbus встраиваемого ПО RFID-считывателей SAUK (версия 5.03 от 30.09.2026 и новее; отличия от прежних версий — в разделе 7):

  • с сетевым интерфейсом Ethernet или Wi-Fi (Modbus TCP/IP);
  • с проводными интерфейсами RS-485, RS-232 (Modbus RTU).

По TCP и по RTU прибор работает одинаково: те же функции, те же адреса регистров, те же ответы с ошибкой. Данные в регистрах общие для обоих интерфейсов.

Описание приведено для 4-портового считывателя как общего случая. Для 1-портового считывателя или моноблока используется только часть, относящаяся к антенне №1. Данные от метки, идентифицированной соответствующей антенной, представлены в отдельных группах регистров.

Схема представления данных в Holding Register 0x03
Схема представления данных в Holding Register 0x03 (общий случай, 4 антенны).

1.1Интерфейсы и настройки

ИнтерфейсПараметрыКак включить
Modbus TCP/IPПорт 502, Wi-Fi или Ethernet. Одновременно обслуживается до 4 мастеров; пятое подключение закрывает то, по которому дольше всего не было запросов. Соединение без запросов 10 минут закрывается. Номер устройства (Unit ID) может быть любым — прибор возвращает его в ответе.Галочка «MODBUS TCP/IP» в разделе каналов уведомлений или /tagidentity?modbus_tcp=true. Применяется сразу, без перезагрузки. По умолчанию выключен.
Modbus RTUПорт UART прибора (RS-485 или RS-232), 8 бит, без чётности, 1 стоп-бит. Скорость — как у канала UART-уведомлений (по умолчанию 9600 бит/с). Адрес устройства 1…247; адрес 0 — широковещательный: команды записи выполняются, ответа нет. Опция «Ответ с отсрочкой» задерживает ответ на 100 мс — для преобразователей интерфейса, которые не успевают переключиться на приём.Галочка «MODBUS RTU», поле «Адрес устройства» или /tagidentity?modbus_rtu=true, modbus_rtu_addr=, modbus_rtu_delay=.

Порт UART — либо Modbus RTU, либо UART-протокол

Modbus RTU и UART-уведомления (Short Protocol, JSON) используют один и тот же порт и работают по очереди, а не одновременно: включение Modbus RTU выключает UART-уведомления, и наоборот. Modbus TCP от этого не зависит и может работать вместе с любым из них.

1.2Функции Modbus

КодФункцияАдресаНазначение
03 (0x03)Read Holding Registers1000–1077Чтение меток и результата записи (раздел 2). До 78 регистров за запрос.
04 (0x04)Read Input Registers1000–1077То же, что 03 — для мастеров, которые читают только Input Registers.
06 (0x06)Write Single Register1000Управление сканированием (раздел 6).
16 (0x10)Write Multiple Registers2000–2016Запись данных в память метки (раздел 5).

1.3Ответы с ошибкой (исключения)

На запрос, адресованный прибору, всегда приходит ответ: обычный или ответ с ошибкой — код функции с установленным старшим битом (например, 0x83 для функции 03) и код исключения. Прибор не отвечает только на кадр RTU с неверной контрольной суммой и на широковещательный адрес 0.

КодНазваниеКогда возвращается
01ILLEGAL FUNCTIONФункция не из таблицы 1.2 (например, 01, 02, 05, 15).
02ILLEGAL DATA ADDRESSЧтение выходит за пределы 1000–1077; функция 06 не в регистр 1000; функция 16 не с адреса 2000.
03ILLEGAL DATA VALUEЗапрошено 0 или больше 125 регистров; в регистр 1000 записывается не 0, 1 или 2; пакет записи в метку не из 17 регистров; номер антенны не 1…4.
06SERVER DEVICE BUSYПредыдущая команда записи в метку ещё не начала выполняться — повторите запрос позже.

Пример (RTU): запрос 01 03 03 E8 00 4F … (79 регистров с адреса 1000 — на один больше карты) → ответ 01 83 02 C0 F1.

2Чтение меток — Holding Register 0x03

Регистры читаются функцией 03 (или 04). Регистр по адресу 1000 содержит информацию об антеннах, в зоне действия которых находится RFID-метка. При наличии метки в поле антенны устанавливается флаг (значение полубайта 0x01); при пропадании метки флаг снимается.

2.1Таблица 1. Идентификация меток и результат записи (адреса 1000, 1001)

ПараметрАдресR/W, типОписание
Метка в поле антенн [4:3:2:1]1000R, [Byte:Byte]Примеры: 0x0100 — метка в поле антенны №3; 0x1111 — метка в поле всех 4 антенн. Запись в этот регистр функцией 06 — управление сканированием (раздел 6).
Результат записи и коды ошибок [4:3:2:1]1001R, [Byte, Byte]Запись выполняется командой Write Multiple Registers (0x10), а результат возвращается здесь — по 4 бита (полубайт) на каждую антенну. Коды см. ниже.

Коды результата записи (на каждую антенну):

КодЗначение
0Результата ещё нет — выставляется, когда команда записи принята
1SUCCESS — данные успешно записаны в память метки
2NO TAG ERROR — метки нет в зоне действия (или нет метки с указанным EPC)
3TAG WRITE ERROR — ошибка записи данных в метку
4ACCESS PASSWORD ERROR — неверный пароль
FUNKNOWN ERROR — неизвестная ошибка

Ошибки формирования пакета мастером. Прибор отвечает на такой пакет исключением (раздел 1.3) и, кроме того, записывает код ошибки во весь регистр 1001:

  • 0xCCCC — неверный номер антенны (должен быть 1…4), исключение 03;
  • 0xDDDD — неверная длина данных (строго 17 слов / 34 байта), исключение 03;
  • 0xEEEE — неверный адрес (должен быть 2000), исключение 02.

Примеры результата: 0x0001 — метка у антенны №1 закодирована успешно; 0x0030 — попытка кодирования у антенны №2, но данные не записаны (метка не поддерживает банк памяти либо смещение превышает размер памяти).

2.2Таблица 2. Данные метки по антеннам (адреса 1002–1077)

Данные каждой антенны располагаются в отдельной группе регистров. Ниже — секция антенны №1 (адреса 1002–1020); секции антенн №2, 3, 4 имеют идентичную структуру.

ПараметрАдресR/W, типОписание
Количество меток у антенны №11002R, [0x00, Byte]Число меток в таблице идентификации, обнаруженных антенной №1. Удерживается согласно времени удержания меток в таблице.
Timestamp1003, 1004R, wordСистемное время прибора на момент обнаружения метки — Unix-время, 32 бита: 1003 — старшее слово, 1004 — младшее. Пример: 0x6405 0xD4FA = 06.03.2023 11:56:42 (UTC). Если часы прибора не установлены (нет NTP и RTC), это секунды с момента включения.
Счётчик событий по метке1005R, wordИнкремент при каждом новом сканировании той же метки.
Уровень сигнала RSSI, dB1006R, int16Отрицательная величина, обычно от −90 (слабый) до −30 dB.
Банк памяти EPC и количество данных1007R, [0x01, Byte]Банк памяти константа 0x01 (EPC). Обычно 12 байт = EPC 96 бит.
Данные из EPC-памяти1008–1013R, массив 12 байт (6 слов)EPC-номер. Пример E280699500005010DE651922: 1008 = 0xE280 … 1013 = 0x1922. Если EPC короче 12 байт, оставшиеся регистры — нули.
Банк доп. данных и количество1014R, [Byte, Byte]Банк: EPC 0x01, TID 0x02, USER 0x03. Количество — не больше 12 байт.
Данные из доп. памяти (EPC/TID/USER)1015–1020R, массив 12 байт (6 слов)Например, TID-номер. Формат записи в регистры аналогичен EPC. Если прочитано больше 12 байт, в регистры попадают первые 12.

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

СекцияДиапазон адресов
Антенна №11002–1020
Антенна №21021–1039
Антенна №31040–1058
Антенна №41059–1077
Веб-интерфейс SAUK: таблица идентифицированных меток
Веб-интерфейс встраиваемого ПО SAUK: четыре идентифицированные RFID-метки (EPC + DATA/TID).

3Алгоритм трансляции нескольких меток

Регистры каждой антенны предоставляют данные обо всех метках, обнаруженных этой антенной, — просматривается вся таблица идентификации прибора. При первом опросе группы регистров считыватель возвращает данные первой метки из таблицы идентификации, при втором — второй, и так далее; после последней метки опрос идёт по кругу, начиная снова с первой.

  • В регистры попадают только подтверждённые метки: прошедшие фильтры и с прочитанной дополнительной памятью (если её чтение включено).
  • Если в поле действия одна метка, она транслируется в Modbus при каждом запросе мастера.
  • Если меток несколько, после трансляции метки на мастер выставляется флаг «больше не транслировать эту метку».
  • Флаг сбрасывается, когда метка пропадает из таблицы (по таймауту удержания) или когда мастер опросил все метки по кругу.
  • Так метки транслируются поочерёдно — «эстафета» передаётся от метки к метке.

Читайте секцию антенны одним запросом

Каждый запрос, который затрагивает секцию антенны, передаёт эстафету следующей метке. Поэтому секцию читают целиком одним запросом (19 регистров) или всю карту сразу (78 регистров с адреса 1000), а не по частям — иначе части окажутся от разных меток. Эстафета общая для всех мастеров, в том числе для TCP и RTU одновременно.

4Интерфейсы и примеры опроса

Ниже — веб-интерфейс встраиваемого ПО SAUK (доступен через браузер): таблица с четырьмя идентифицированными и отфильтрованными метками, прочитаны все необходимые данные — EPC 12 байт и DATA 12 байт (в частности, блок TID).

Структура групп регистров по антеннам
Структура групп регистров: секции данных по каждой из четырёх антенн.

Ниже — программа Modbus Poll, опрашивающая Holding Register 0x03 считывателя. Общий объём данных составляет 78 слов.

Modbus Poll: опрос Holding Register 0x03
Modbus Poll: опрос Holding Register 0x03 (78 слов данных).

Кадр запроса Modbus RTU (адрес 1, чтение 78 регистров с адреса 1000):

АдресФункцияНачальный регистрКоличествоCRC16
010303 E8 (1000)00 4E (78)45 8E

В Modbus TCP то же самое передаётся после 7-байтового заголовка MBAP: 00 01 00 00 00 06 01 03 03 E8 00 4E (номер транзакции, протокол 0, длина 6, номер устройства, функция, адрес, количество).

5Запись в метку — Write Multiple Registers (0x10)

Запись данных в память RFID-метки выполняется командой Write Multiple Registers 16 (0x10) — по TCP и по RTU одинаково. Посылка должна иметь фиксированную длину 17 слов (34 байта) с адреса 2000; на посылку иной длины или с другого адреса прибор отвечает исключением (раздел 1.3).

Обычный ответ на команду означает, что она принята; результат записи появляется в регистре 1001 (раздел 2.1): сразу после приёма в полубайте антенны 0, после выполнения — код результата. Пока принятая команда не начала выполняться, следующая команда записи получает исключение 06.

5.1Таблица 3. Формат записи (адреса 2000–2016)

ПараметрАдресR/W, типОписание
Антенна, банк памяти метки2000W, [Byte:Byte]ANT — номер антенны 1…4 (обязателен). BANK — банк памяти: EPC 0x01, TID 0x02, USER 0x03.
EPC метки для записи2001–2006W, массив 12 байт (6 слов)Если массив заполнен нулями, запись выполняется в любую метку в поле действия антенны.
Access Password2007–2008W, массив 4 байта (2 слова)Нули — пароль не используется. Если память метки закрыта паролем, его необходимо указать.
Смещение и длина данных (в словах)2009W, [Byte:Byte]USER — смещение может быть с 0x00. EPC — минимальное смещение 0x02 (первые секторы служебные). Длина — не больше 6 слов. Максимум смещения зависит от чипа метки.
Данные для записи в память метки2010–2015W, массив 12 байт (6 слов)Фиксированная длина 12 байт (6 слов).
Подтверждение звуковым сигналом2016W, [Byte:0x00]0x00 — тишина, 0x01 — подтверждение успешной записи бузером.

5.2Пример записи в память USER

Запись в пользовательскую память (USER) антенной №1:

АдресЗначениеСмысл
20000x0103Антенна №1, банк USER (0x03)
2001–20060101010305441FFFFF003448EPC метки, в которую пишем (12 байт)
2007–200800000000Access Password не используется
20090x0001Смещение 0x00, длина 1 слово (2 байта)
20100xABCDЗаписываемые данные
20160x0100Подтвердить запись звуковым сигналом
Modbus Poll: запись данных в RFID-метку
Modbus Poll: запись данных в RFID-метку через Write Multiple Registers (0x10).

6Управление сканированием — Write Single Register (0x06)

Запись в регистр 1000 функцией 06 включает и выключает сканирование меток. Ответ — эхо запроса. Любое другое значение — исключение 03, другой регистр — исключение 02.

ЗначениеДействиеКадр RTU (адрес 1)
0Выключить непрерывное сканирование01 06 03 E8 00 00 09 BA
1Включить непрерывное сканирование01 06 03 E8 00 01 C8 7A
2Выполнить один цикл опроса меток (непрерывное сканирование при этом выключается)01 06 03 E8 00 02 88 7B

7Файлы конфигурации и примечания

Готовые файлы конфигурации Modbus Poll

Для упрощения тестирования и настройки считывателя при первом знакомстве с устройством доступны готовые файлы конфигурации Modbus Poll — для опроса Holding Register 0x03 и для записи данных в метку через Write Multiple Registers (0x10). Ссылки на скачивание — на странице этого раздела сайта.

Версии встроенного ПО

Чтение (Holding Register 0x03) описано для версии ПО 4.15 и выше, запись (Write Multiple Registers 0x10) — для версии 3.26 и выше. В версии 5.03 от 30.09.2026:

  • на ошибочные запросы прибор отвечает исключениями Modbus, а не молчит;
  • функция 04 и управление сканированием (06) работают по TCP и по RTU, запись в метку (16) — тоже по обоим интерфейсам (раньше 06 была только в RTU, 16 — только в TCP);
  • Modbus TCP обслуживает до 4 мастеров одновременно;
  • адрес Modbus RTU — 1…247 (раньше до 127), адрес 0 — широковещательный;
  • эстафета меток охватывает всю таблицу идентификации (раньше — первые 40 записей);
  • секция антенны без меток обнуляется, короткий EPC дополняется нулями.

Ограничения записи

Посылка записи должна строго содержать 17 слов (34 байта). Для банка EPC запись возможна только со смещения 0x02. Банк TID у выпускаемых меток, как правило, закрыт на перезапись. Максимальные смещение и длина данных зависят от модели чипа метки.

SAUK · Modbus RTU / TCP-IP sauk.ru
Россия, г. Москва, 
г. Зеленоград, проезд 4922, дом 4, строение 2. Технопарк "ЭЛМА". 
Подробнее...
SAUK© 2020 – 2026. Все тексты и изображения, представленные на сайте, являются интеллектуальной собственностью SAUK. Могут быть использованы только по письменному согласию SAUK. SAUK® является зарегистрированным торговым знаком. Заказы принимаются только от юридических лиц.

Товары

Корзина пуста

Итого

Заказ

Заказы принимаются только от юридических лиц