Зачем
Протокол Modbus: четыре типа регистров, адресация и ловушка «номер минус один». Must для инженера АСУ ТП — его понимают почти все приборы.
Modbus — это «язык» поверх проводов
Вспомни прошлый урок: RS-485 — дорога, Modbus — язык. Modbus задаёт, как именно master формирует запрос, а slave отвечает: какие байты, в каком порядке, что они значат. Он простой, открытый и потому победил и он один из самых популярных и еще долго им останется.
Четыре типа данных
Всё в Modbus сведено к четырём «полкам». Две хранят биты (вкл/выкл), две — 16-битные числа (регистры); по одной на чтение и на чтение-запись.
| Тип | Размер | Доступ | Что хранит | Аналог в ПЛК |
|---|---|---|---|---|
| Coils | 1 бит | чтение/запись | дискретные выходы | DO |
| Discrete Inputs | 1 бит | только чтение | дискретные входы | DI |
| Input Registers | 16 бит | только чтение | аналоговые входы, измерения | AI |
| Holding Registers | 16 бит | чтение/запись | уставки, параметры, универсальное | AO, настройки |
Совет
Заметил параллель с AI/AO/DI/DO из раздела про ПЛК? Это не случайно: Modbus просто «выставляет наружу» те же четыре типа сигналов. Coils = DO, Discrete Inputs = DI, Input Registers = AI, Holding Registers = AO/настройки. Если ты понял ввод-вывод ПЛК — половину Modbus ты уже знаешь.
Классическая ловушка: «номер − 1»
На этом спотыкаются все новички, и это причина бесконечных «почему не читается».
Важно
В документации регистры часто нумеруют с единицы (Holding Register №1, №2…), а в кадре запроса адрес идёт с нуля. То есть регистр «номер 1» лежит по адресу 0, «номер 40001» — по адресу 0, регистр №100 — по адресу 99. Всегда уточняй, что дал тебе производитель: «номер» (с 1) или «адрес» (с 0). Несовпадение на единицу — причина 90% проблем «читаю не тот регистр». Сверяйся с картой регистров (Modbus map) прибора.
Разобранный пример
Частотник в паспорте: «текущая частота — регистр 40020, заводская скорость — регистр 40021». Это номера Holding-регистров (с 1). В запросе Modbus ты обратишься к адресам 19 и 20 (вычитаешь 40001). Прочитал по адресу 20 вместо 19 — получишь скорость вместо частоты и будешь долго гадать, почему «датчик врёт». Карта регистров прибора — твой главный документ при работе с Modbus.
RTU и TCP — один протокол, разные «конверты»
| Вариант | Физика | Где |
|---|---|---|
| Modbus RTU | поверх RS-485 (последовательный) | датчики, частотники, легаси-оборудование |
| Modbus TCP | поверх Ethernet/TCP-IP | связь с ПЛК, SCADA, современные стенды |
Логика регистров одна и та же — меняется только «транспорт». Научился RTU — TCP освоишь за вечер.
Чем читают Modbus на практике
Совет
Без инструмента Modbus не освоить, и тут есть свои стандарты де-факто. Для опроса и отладки используют Modbus Poll (платный, но есть демо) в роли «мастера» и бесплатный qModMaster. Принцип один: задаёшь адрес устройства, тип и номер регистра — и сразу видишь значение, можешь записать уставку. На объекте это первое, чем проверяют связь с прибором: «отвечает ли он вообще и что лежит в его регистрах». Освой один такой опросчик — это твой тестер для любого Modbus-устройства.
Проверь себя
- В каком типе данных Modbus лежит измерение датчика 4–20 мА — и почему «только чтение»?
- Производитель пишет «регистр 40005». По какому адресу ты к нему обратишься?
- Чем Modbus RTU отличается от Modbus TCP?
Документы и ресурсы
Обязательные
- Книга Modbus.org — официальная спецификация протокола (первоисточник, англ.) нужна часть про function codes — какие функции читают и пишут каждый тип данных (пригодится в задании)
Рекомендуемые
- Инструмент Modbus Poll — программа-опросчик Modbus (де-факто стандарт для чтения и отладки регистров; есть демо)
- Инструмент qModMaster — бесплатный опросчик Modbus RTU/TCP с открытым исходным кодом
- Статья Просто о Modbus RTU — подробное описание протокола с примерами (регистры, функции, адресация), рус.
Практическое задание
Скачай бесплатный Modbus-симулятор/мастер (например, программу-опросчик Modbus Poll в демо-режиме или аналог) и потренируйся читать карту регистров:
- найди в интернете реальную карту регистров Modbus любого прибора (частотник, счётчик, датчик ОВЕН);
- выпиши 5 параметров: их номера из паспорта, тип (coil / input register / holding register) и пересчитай в адреса (с нуля);
- определи, какие из них только для чтения, а какие можно записывать (уставки).
Для углубления зайди на SimplyModbus или спецификацию modbus.org и разберись, какие функции (function codes) читают/пишут каждый тип данных (например, 0x03 — чтение Holding-регистров). Выпиши код функции для чтения измерения с датчика.
Отмечайте прогресс — заведите бесплатный аккаунт. Уже есть? Войти.