Типы MODBUS адресов в EasyBuilder Pro

28 февраля 2024 г.

Протокол MODBUS определяет четыре типа объектов для доступа к данным.

Тип объекта Тип элемента условный Тип доступа Диапазон регистров Код функции MODBUS (Десятичный + (HEX))
Чтение Запись одного регистра Запись группы регистров
Регистры флагов (Coils) DO
(бит)
Чтение и запись 00001-09999 (0x) 01 (0x01) 05 (0x05) 15 (0x0F)
Дискретные входы (Discrete Inputs) DI
(бит)
Чтение 10001-19999 (1x) 02 (0x02) Только чтение Только чтение
Регистры ввода (Input Registers) AI
(16-бит слово)
Чтение 30001-39999 (3x) 04 (0x04) Только чтение Только чтение
Регистры хранения (Holding Registers) AO
(16-бит слово)
Чтение и запись 40001-49999 (4x) 03 (0x03) 06 (0x06) 16 (0x10)

Устройства с протоколом MODBUS имеют собственную таблицу/карту адресов. Эта карта предоставляет информацию, необходимую для доступа к данным. Большинство устройств с протоколом MODBUS имеют заранее определенную карту, которую задает производитель. Однако некоторые устройства MODBUS, например, программируемые логические контроллеры или операторские панели, позволяют создавать свои собственные карты.

Для работы с устройствами по протоколу MODBUS необходимо знать следующую информацию:

  • Где хранятся данные? (какие типы объектов и адреса/диапазоны адресов);
  • Как хранятся данные? (типы данных и порядок байтов, слов).

Поскольку протокол MODBUS не определяет точно, как данные должны храниться в регистрах, то необходимо узнать их формат хранения на подчиненном устройстве. По умолчанию драйвер MODBUS в WEINTEK в качестве порядка сначала использует младший байт/слово/двойное слово.

16-битные данные в формате HEX (0x4E20)
Младший байт (0x20) Старший байт (0x4E)

Младший байт первый

32- битные данные в формате HEX (0xAE41,5652)
Младшее слово (0x5652) Старшее слово (0xAE41)

Младшее слово первое

64- битные данные в формате HEX (0x7048,860F,9180)
Младшее двойное слово (0x860F,9180) Старшее двойное слово (0x7048)

Младшее двойное слово первое

Ниже предоставлена таблица основных существующих адресов в EasyBuilder Pro, которые можно встретить в драйверах MODBUS. Указана возможность чтения или записи, предоставлен соответствующий код функции и его описание.

Адрес Тип доступа
Чтение(Ч)/
Запись(З)
Код функции MODBUS (Десятичный) Описание функции
0x *1 Ч 01 Чтение значений из группы регистров флагов
З 05 Запись значения одного регистра флага
0x_multi_coil *2 Ч 01 Чтение значений из группы регистров флагов
З 15 Запись значений в группы регистров флагов
1x *1 Ч 02 Чтение значений из группы дискретных выходов
3x_Bit *1 Ч 04 Чтение бита из регистров ввода
4x_Bit *1 Ч 03 Чтение бита из регистров хранения
З 16 Запись бита в регистры хранения
6x_Bit *1 Ч 03 Чтение бита из регистров хранения
З 06 Запись бита в регистры хранения
3x Ч 04 Чтение значений из группы регистров ввода
3x_Double Ч 04 Чтение значений из группы регистров ввода (32-битные данные)
3x_QWord *3 Ч 04 Чтение значений из группы регистров ввода (64-битные данные)
4x Ч 03 Чтение значений из группы регистров хранения
З 16 Запись значений в группы регистров хранения
4x_Double Ч 03 Чтение значений из группы регистров хранения (32-битные данные)
З 16 Запись значений в группы регистров хранения (32-битные данные)
4x_Qword *3 Ч 03 Чтение значений из группы регистров хранения (64-битные данные)
З 16 Запись значений в группы регистров хранения (64-битные данные)
5x *4 Ч 03 Чтение значений из группы регистров хранения
З 16 Запись значений в группы регистров хранения
6x *5 Ч 03 Чтение значений из группы регистров хранения
З 06 Запись значения в один регистр хранения

*1. Драйвер MODBUS считывает группу из 16 бит за один раз. Группы битов: 0–15, 16–31, 32–47, 48–63 и т. д. Все биты в группе должны быть доступны в устройстве для чтения через ЧМИ. В противном случае возникнут ошибки.

Во избежание возможных ошибок используются специальные типы адресов:

Адрес Чтение(Ч)/
Запись(З)
Описание
0x_single_bit Ч/З Чтение за раз одного 0x бита вместо группы из 16 последовательных битов.
1x_single_bit Ч Чтение за раз одного 1x бита вместо группы из 16 последовательных битов.
0x_single_coil Ч/З Чтение/запись группы битов (Доступ к битам 0x на уровне слова). Например, если значение регистра с первым адресом 0x_single_coil-1 равно 15, то значения будут прочтены/записаны для битов от 0x-0 до 0x-3.

*2. Адрес 0x_multi_coil использует для записи значений в группы регистров флагов, что соответствует 15 коду функции MODBUS. По умолчанию драйвер WEINTEK (адрес 0x) использует код функции 05 для записи значения в один регистр флага.

*3. Адреса 3x_QWord и 4x_QWord поддерживаются только устройствами серии cMT/cMT X.

*4. Адрес 5x использует тот же код функции, что и 4x. Разница заключается в том, что при чтении/записи значений в 32-битные регистры (двойное слово) происходит замена старшего/младшего слова. Например,

Регистр 4x содержит следующие данные:

Адрес 1 2
Данные (16-бит слово) 0x5678 0x1234
Данные (двойное 32-бит слово) 0x12345678

Тогда 5x будет содержать:

Адрес 1 2
Данные (16-бит слово) 0x5678 0x1234
Данные (двойное 32-бит слово) 0x56781234

*5. Адрес 6x использует для записи значения в один регистр хранения, что соответствует 06 коду функции Modbus. По умолчанию драйвер Weintek (адрес 4x) использует код функции 16 для записи значений в группу регистров хранения, даже если запись выполняется только в один регистр.