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

Протокол Modbus

Введение

Modbus — это семейство протоколов обмена, используемых в системах промышленной автоматизации. Как правило, встречаются две его версии:

  • Modbus RTU, использующий физический интерфейс RS-485/232/422;
  • Modbus TCP, использующий физический интерфейс Ethernet.

Протокол Modbus основан на архитектуре master/slave:

  • master отправляет запрос на чтение или запись данных в slave-устройство;
  • slave ожидает запроса от мастера и, при получении, выполняет его и отправляет ответ.

Информация

Применительно к Modbus TCP эту архитектуру иногда называют client/server (где client — это master, а server — slave).

Модель данных

Обмен данными с устройствами происходит через регистры. В спецификации протокола определяется четыре типа регистров:

  • Coils (Регистры флагов) — чтение и запись (1 бит).
  • Discrete Inputs (Дискретные входы) — только чтение (1 бит).
  • Holding Registers (Регистры хранения) — чтение и запись (16-бит слово).
  • Input Registers (Регистры ввода) — только чтение (16-бит слово).

Coils хранят однобитные значения — то есть могут находиться в состоянии 0 или 1. Такие регистры могут обозначать текущее состояние выхода (включено реле). Название coil буквально означает обмотку электромеханического реле. Регистры флагов допускают как чтение, так и запись.

Discrete Inputs также являются однобитными регистрами, описывающими состояние входа устройства (например, подано напряжение — 1). Эти регистры поддерживают только чтение.

Holding Registers и Input Registers представлены двухбайтовым словом и могут хранить значения от 0 до 65535 (0x0000 — 0xFFFF в шестнадцатеричной системе счисления). Регистры ввода допускают только чтение (например, текущее значение температуры). Регистры хранения поддерживают как чтение, так и запись (для хранения настроек). В настоящее время во многих устройствах эти регистры не разделяются. Команды на чтение регистра хранения N и регистра ввода N обратятся к одному и тому же значению в адресном пространстве устройства.

Коды качества

Коды качества сигнала Modbus используются для диагностики ошибок при обмене данными между master и slave-устройством.

Если slave получил запрос, но не может его корректно обработать, он вместо обычного ответа отправляет обратно код функции запроса + один байт c кодом качества. Этот код объясняет причину отказа.

Код качества Описание
0x18
Нет связи
0x01
Неподдерживаемый код функции для данного устройства
0x02
Запрошенный адрес регистра вне допустимого диапазона
0x03
Некорректное значение в поле данных (не соответствует допустимому формату/диапазону)
0x04
Внутренняя неисправность устройства при обработке запроса
0x05
Запрос принят, выполняется длительная операция (требуется повторный опрос статуса)
0x06
Устройство занято, не может обработать запрос (повторить позже)
0x07
Операция не выполнена; функция отклонена (например, программная команда недопустима)
0x08
Ошибка четности памяти при чтении (аппаратная неисправность)
0x0A
Шлюз недоступен или не настроен для маршрутизации запроса
0x0B
Целевое устройство не отвечает через шлюз