Работа по протоколу Modbus TCP

Чтение и запись параметров по протоколу Modbus TCP
ОперацияФункция
Чтение3 (0х03) или 4 (0х04)
Запись6 (0х06) или 16 (0х10)

Список регистров Modbus (см. таблицу и Приложение А) считывается с прибора с помощью Owen Configurator во вкладке «Параметры устройства».

Общие регистры оперативного обмена по протоколу Modbus
НазваниеРегистрРазмер/тип/описание
Название (имя) прибора для пользователя (DEV)0xF000Символьная строка до 32 байт, кодировка Win1251
Версия встроенного ПО прибора для пользователя (VER)0xF010Символьная строка до 32 байт, кодировка Win1251
Заводской номер прибора0xF084Символьная строка 32 байта, кодировка Win1251, используется 17 символов

Во время работы прибора по протоколу Modbus могут возникать ошибки (см. таблицу). Прибор отправляет Мастеру сети ответ с кодом ошибки.

Список возможных ошибок
Название ошибкиВозвращаемый кодОписание ошибки
MODBUS_ILLEGAL_FUNCTION01 (0x01)Недопустимый код функции – ошибка возникает, если прибор не поддерживает функцию Modbus, указанную в запросе
MODBUS_ILLEGAL_DATA_ADDRESS02 (0x02)Недопустимый адрес регистра – ошибка возникает, если в запросе указаны адреса регистров, отсутствующие в приборе
MODBUS_ILLEGAL_DATA_VALUE03 (0x03)Недопустимое значение данных – ошибка возникает, если запрос содержит недопустимое значение для записи в регистр
MODBUS_SLAVE_DEVICE_FAILURE04 (0x04)Ошибка возникает, если запрошенное действие не может быть завершено

Во время обмена по протоколу Modbus прибор проверяет соответствие запросов спецификации Modbus. Не прошедшие проверку запросы игнорируются прибором. Запросы, в которых указан адрес, не соответствующий адресу прибора, также игнорируются.

Далее проверяется код функции. Если приходит запрос с кодом функции, не указанной в таблице, возникает ошибка MODBUS_ILLEGAL_FUNCTION.

Список поддерживаемых функций
Название функцииКод функцииОписание функции
MODBUS_READ_HOLDING_REGISTERS3 (0x03)Чтение значений из одного или нескольких регистров хранения
MODBUS_READ_INPUT_REGISTERS4 (0x04)Чтение значений из одного или нескольких регистров ввода
MODBUS_WRITE_SINGLE_REGISTER6 (0x06)Запись значения в один регистр
MODBUS_WRITE_MULTIPLE_REGISTERS16 (0x10)Запись значений в несколько регистров

Ситуации, приводящие к возникновению ошибок во время работы с регистрами, описаны в таблице.

Ошибки во время работы с регистрами
Используемая функцияНаименование ошибкиВозможные ситуации, приводящие к ошибке

MODBUS_READ_HOLDING_REGISTERS

MODBUS_ILLEGAL_DATA_ADDRESS

Количество запрашиваемых регистров больше максимального возможного числа (125)

Запрос несуществующего параметра

MODBUS_READ_INPUT_REGISTERS

MODBUS_ILLEGAL_DATA_ADDRESS

Количество запрашиваемых регистров больше максимального возможного числа (125)

Запрос несуществующего параметра

MODBUS_WRITE_SINGLE_REGISTER

MODBUS_ILLEGAL_DATA_ADDRESS

Попытка записи параметра, размер которого превышает 2 байта

Попытка записи параметра, доступ на запись к которому запрещен

Попытка записи параметра такого типа, запись в который не может быть осуществлена данной функцией. Поддерживаемые типы:

  • знаковые и беззнаковые целые (размер не более 2 байт);

  • перечисляемые;

  • float16 (на данный момент в приборе такой тип не используется)

Запрос несуществующего параметра

MODBUS_ILLEGAL_DATA_VALUE

Выход за пределы максимального или минимального ограничений для параметра

MODBUS_WRITE_MULTIPLE_REGISTERS

MODBUS_ILLEGAL_DATA_ADDRESS

Запись несуществующего параметра

Попытка записи параметра, доступ на запись к которому запрещен

Количество записываемых регистров больше максимального возможного числа (123)

MODBUS_ILLEGAL_DATA_VALUE

Не найден терминирующий символ (\0) в строковом параметре

Размер запрашиваемых данных меньше размера первого или последнего в запросе параметра

Выход за пределы максимального или минимального ограничений для параметра