docs:modbus


  • Тип: Ведущий-Ведомый (Master-Slave / Client-Server).
  • Назначение: Промышленная автоматизация, SCADA, управление приводами и сбор данных с датчиков.
  • Физический уровень: RS-485 (чаще всего), RS-232, TCP/IP.
  • Топология: Шина (линия) или звезда (при использовании повторителей).
  • Макс. устройств: до 247 ведомых (Slave) на один Master.

1. Физический уровень (RS-485)

  • Кабель: Витая пара с экраном (например, КВВГЭ, Belden).
  • Длина линии: до 1200 м (без повторителя).
  • Скорость: 9600, 19200, 38400, 115200 бит/с (самые частые).
  • Соединение: Две линии A (инвертирующий, -) и B (неинвертирующий, +).
Критично: Соблюдай полярность! A ко всем A, B ко всем B. Перепутав полярность на одном устройстве, ты завалишь весь сегмент сети.
Критично: На концах линии (физически самых дальних устройствах) установи терминаторы сопротивлением 120 Ом между A и B. Без них будут ошибки CRC.

2. Модель данных (4 типа регистров)


Тип данных Доступ Размер Функции (Hex) Логический адрес
Coil (Флаг/Катушка) Чтение/Запись 1 бит 0x01, 0x05, 0x0F 0xxxx (00001)
Discrete Input (Дискр. вход) Только чтение 1 бит 0x02 1xxxx (10001)
Input Register (Регистр ввода) Только чтение 16 бит 0x04 3xxxx (30001)
Holding Register (Регистр хранения) Чтение/Запись 16 бит 0x03, 0x06, 0x10 4xxxx (40001)

3. Адресация (Важнейший нюанс!)


  • Логический адрес (из документации): 40001.
  • Физический адрес (PDU, то что посылаем в запросе): 0.
Правило перевода: Физический адрес = Логический адрес - 40001 (для Holding Register).
* 40001 → отправляй 0.
* 40010 → отправляй 9.
* 40099 → отправляй 98.

4. Форматы передачи


Тип Среда Особенность
Modbus RTU RS-485 / RS-232 Самый популярный. Компактные двоичные данные. Контрольная сумма CRC-16.
Modbus ASCII RS-485 / RS-232 Данные в текстовом виде. Контрольная сумма LRC. Медленнее RTU.
Modbus TCP/IP Ethernet (порт 502) Обертка RTU в TCP-пакет. Без CRC (проверка на уровне TCP).

5. Код функции = Команда


  • 0x01 (01) — Чтение нескольких Coil (битов).
  • 0x02 (02) — Чтение Discrete Inputs (битов).
  • 0x03 (03) — Чтение Holding Registers (слов).
  • 0x04 (04) — Чтение Input Registers (слов).
  • 0x06 (06) — Запись одного Holding Register.
  • 0x10 (16) — Запись нескольких Holding Register (мультизапись).
Если получил код ошибки: Ведомый вернет тот же код функции, но со старшим битом = 1 (например, 0x80 для 0x00). Код ошибки 0x01 = неверная функция, 0x02 = неверный адрес, 0x03 = неверные данные.

6. Чек-лист «Нет связи»


  • [ ] Совпадают ли скорость (Baud Rate) и чётность (Parity) на всех устройствах? (Частая ошибка: 9600 vs 19200).
  • [ ] Не перепутана ли полярность A и B?
  • [ ] Стоят ли терминаторы (120 Ом) на двух концах линии?
  • [ ] Не превышена ли длина кабеля 1200 м?
  • [ ] В том ли порту COM сидит конвертер?
  • [ ] Не занят ли порт COM другой программой?
  • [ ] Правильно ли переведён адрес? (40001 → 0?)

Совет: Начинай отладку с опроса всего одного ведомого напрямую (без длинных линий). При подключении реального оборудования используй сниффер провода (анализатор трафика USB-to-RS485), чтобы увидеть, уходит ли запрос из компа и приходит ли ответ.

Antistatus 13.05.2026 09:42

  • docs/modbus.txt
  • Последнее изменение: 2 ч. назад
  • admin