Регистр Modbus
Регистр Modbus — 16-битная ячейка в модели данных устройства, которую ведущий читает или записывает по протоколу Modbus. Путаница между номером регистра в документации и адресом в кадре — самая частая ошибка при настройке обмена.
Обновлено Редакция GAW
Регистр Modbus — 16-битный элемент данных устройства, к которому ведущий обращается по протоколу Modbus. Протокол описывает устройство как четыре таблицы данных; какие значения в них лежат и как они связаны с памятью прибора, решает производитель и описывает в карте регистров.
Четыре таблицы
| Таблица | Элемент | Доступ | Функции |
|---|---|---|---|
| Coils — катушки | 1 бит | чтение и запись | 01, 05, 15 |
| Discrete Inputs — дискретные входы | 1 бит | только чтение | 02 |
| Input Registers — входные регистры | 16 бит | только чтение | 04 |
| Holding Registers — регистры хранения | 16 бит | чтение и запись | 03, 06, 16 |
Названия пришли из контроллеров Modicon: катушкой (coil) там назывался дискретный выход. В каждой таблице можно адресовать 65 536 элементов.
Номер и адрес
В модели данных элементы нумеруются с единицы, а в кадре адресуются с нуля. В документации часто используется запись Modicon с цифрой таблицы впереди:
| Запись | Таблица | Функция чтения | Адрес в кадре |
|---|---|---|---|
| 0xxxx | катушки | 01 | номер − 1 |
| 1xxxx | дискретные входы | 02 | номер − 10001 |
| 3xxxx | входные регистры | 04 | номер − 30001 |
| 4xxxx | регистры хранения | 03 | номер − 40001 |
Регистр 40108 — это функция 03 и адрес 107 = 0x006B. Запрос к адресу 40108 вместо 107 обращается к совсем другому регистру. Значения в регистрах передаются старшим байтом вперёд — подробнее о порядке байтов. Модель данных, функции и ошибки разобраны в статье о Modbus RTU, а собрать запрос с CRC и разобрать ответ поможет конструктор кадра Modbus RTU.
Частые вопросы
Чем регистры хранения отличаются от входных регистров?
Это две разные таблицы 16-битных слов. Входные регистры (input registers, запись 3xxxx) доступны только для чтения функцией 04. Регистры хранения (holding registers, запись 4xxxx) читают функцией 03 и записывают функциями 06 и 16. Адреса в каждой таблице считаются отдельно, с нуля.
Регистр 40001 — это какой адрес в запросе?
0x0000. Первая цифра 4 обозначает таблицу регистров хранения и в кадр не попадает — таблицу выбирает код функции 03. Остаток нумеруется с единицы, а в кадре адресуется с нуля: регистр 40108 — это функция 03 и адрес 107 = 0x006B.
Как передать по Modbus число float или 32-битное целое?
В двух соседних 16-битных регистрах — в протоколе других типов, кроме бита и 16-битного слова, нет. Каждый регистр передаётся старшим байтом вперёд, а порядок регистров и байтов внутри 32-битного числа приборы выбирают по-разному: ABCD, CDAB, BADC или DCBA. Его узнают в документации прибора.
Источники
- Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 26.04.2012 — разд. 4 — модель данных: четыре таблицы, адресация с нуля, порядок байтов; разд. 5 и 6 — коды функций 01–06, 15, 16
- Modbus Organization. MODBUS over Serial Line Specification and Implementation Guide V1.02 — кадр RTU: адрес, код функции, данные, CRC
Нашли ошибку?