Соединение: Две линии 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), чтобы увидеть, уходит ли запрос из компа и приходит ли ответ.