ModBus Master (DIY) (обновлено: 08 Apr 2026, 14:09:34)

ModBus Master (DIY) — чтение Modbus RTU slave-устройств: подключение конвертера RS-485, настройка регистров, шаблоны данных, управление через HTTP/MQTT. Примеры: PZEM-014/016/017, Eastron SDM.


ModBus Master (DIY)

Опция ModBus Master позволяет контроллеру читать данные с ModBus RTU slave-устройств (счётчики электроэнергии, датчики, приводы) и передавать их в системы мониторинга через MQTT, HTTP и другие протоколы.

DIY-версия: для пользователей, которые самостоятельно собирают устройства и подключают конвертеры RS485. Требуется понимание протокола Modbus и схемотехники.

Кратко о протоколе Modbus RTU

Режим передачи Полудуплексный (поочерёдный)
Физический интерфейс RS-485
Формат данных Бинарный
Структура пакета Адрес устройства (1 байт) + Код функции (1 байт) + Данные + CRC (2 байта)
Скорость по умолчанию 9600 бод

Подключение конвертера RS-485

Для связи контроллера ESP32 с Modbus-устройствами нужен конвертер TTL ↔ RS-485 (на базе MAX485 или аналога).

Конвертер RS-485 Конвертер RS-485 — плата Конвертер RS-485 — подключение

ESP32: выводы UART и RTS настраиваются в веб-интерфейсе конструктора (гибкая привязка к GPIO).

Настройка аналоговых регистров

Основные параметры в веб-интерфейсе конструктора:

Параметр Описание
Скорость 9600 (стандартная для большинства устройств)
Тип регистров Read Input Registers (0x04) или Read Holding Registers (0x03)
Адрес устройства Адрес slave-устройства на шине (обычно 1)
Стартовый регистр Номер первого регистра для чтения
Количество регистров Сколько регистров читать (каждый = 2 байта / 16 бит)

Настройки Modbus в интерфейсе

Шаблоны (маски) данных

Шаблон задаёт формат разбора ответа от slave-устройства. Параметры через запятую:

Параметр Описание Пример
rX Количество регистров (Big Endian) r2 = 2 регистра (4 байта)
eX / gX Количество регистров (другой порядок байт) e2
sX Пропустить X регистров s4 = пропустить 4 регистра
dX Количество знаков после запятой d2 = два знака (245 → 2.45)
mX Умножить на 10^X m2 = ×100
i Число со знаком (signed) r1i
f / fa / fb Float (IEEE 754), разный порядок байт fb = float Big Endian

Цифровые регистры (Discrete Inputs / Coils)

Тип Описание Доступ
Discrete Inputs Однобитовые входы («сухие» контакты) Только чтение
Coils Однобитовые выходы (реле) Чтение и запись
Состояние цифровых регистров доступно через селекторы и Interpreter.

Управление через HTTP и MQTT

HTTP GET-запросы

Действие URL
Запись RAW данных http://IP/modbus&write=HEX_DATA (CRC добавляется автоматически)
Запись регистра http://IP/modbus?addr=X?reg=Y&data=Z
Запись метрики http://IP/modbus&dev=X&num=Y&data=Z (только Holding Registers)

MQTT-топики

login/hostname/mbraw Запись RAW данных
login/hostname/mbregX/Y Запись регистра (X = адрес, Y = номер)

Примеры подключения устройств

PZEM-014 / PZEM-016 (AC мониторинг)

Адрес: 1
Стартовый регистр: 0
Количество регистров: 9
Тип: Read Input Registers (0x04)
Маска: r1d1,r2d3,r2d1,r2,r1d1,rd2
Метрики: Напряжение, ток, мощность, энергия, частота, cosφ

Смена адреса: http://IP/modbus&write=010600020005
Сброс счётчика: http://IP/modbus&write=0142

Настройки PZEM в интерфейсе

PZEM-017 (DC мониторинг)

Адрес: 1
Стартовый регистр: 0
Количество регистров: 6
Тип: Read Input Registers (0x04)
Маска: r1d2,r1d2,r2d1,r2

Требуется включение 2 stop bits в настройках.

Eastron SDM220 / SDM120 / SDM630

Адрес: 1
Стартовый регистр: 0
Количество регистров: 14
Тип: Read Input Registers (0x04)
Маска (SDM220/120): fb,s4,fb,s4,fb
Маска (SDM630): fb,fb,fb,fb,fb,fb,fb,fb,fb

Скорость обязательно 9600.

Возникли проблемы? Нажмите кнопку Обратная связь вверху страницы — создайте тикет через FixFlow, опишите проблему и приложите скриншот настроек.