Найти в Дзене
NapiLab

🔥 mbscan — ищем Modbus-устройства на линии за секунды

Рассказываем, зачем мы написали свой сканер Modbus-шины, и как он работает. Кто работал с Modbus RTU по RS-485, знает эту боль: подключаешься к шине, а там «чёрный ящик». Неизвестно, какие адреса у устройств, живы ли они вообще и на какой скорости работают. Ручной перебор 247 адресов стандартными утилитами - занятие для терпеливых. Знакомьтесь, mbscan — консольная утилита, которая решает эту проблему мгновенно. 🚀 В чём фишка? - Скорость: сканирует все 247 адресов за 2.5 секунды (при таймауте 10 мс). Никакого томительного ожидания. - Простота: один .c файл, никаких зависимостей. Скомпилировал и запустил где угодно: на Linux x86_64, Raspberry Pi, OpenWrt, встроенных системах. -Наглядность: не просто показывает, есть ли устройство, но и читает содержимое его регистров (по умолчанию 4 регистра на адрес). 🛠 Как это работает глазами инженера Утилита открывает последовательный порт, настраивает его через termios, и для каждого адреса в диапазоне (1-247) формирует запрос Modbus RTU с ф

🔥 mbscan — ищем Modbus-устройства на линии за секунды

Рассказываем, зачем мы написали свой сканер Modbus-шины, и как он работает.

Кто работал с Modbus RTU по RS-485, знает эту боль: подключаешься к шине, а там «чёрный ящик». Неизвестно, какие адреса у устройств, живы ли они вообще и на какой скорости работают. Ручной перебор 247 адресов стандартными утилитами - занятие для терпеливых.

Знакомьтесь, mbscan — консольная утилита, которая решает эту проблему мгновенно.

🚀 В чём фишка?

- Скорость: сканирует все 247 адресов за 2.5 секунды (при таймауте 10 мс). Никакого томительного ожидания.

- Простота: один .c файл, никаких зависимостей. Скомпилировал и запустил где угодно: на Linux x86_64, Raspberry Pi, OpenWrt, встроенных системах.

-Наглядность: не просто показывает, есть ли устройство, но и читает содержимое его регистров (по умолчанию 4 регистра на адрес).

🛠 Как это работает глазами инженера

Утилита открывает последовательный порт, настраивает его через termios, и для каждого адреса в диапазоне (1-247) формирует запрос Modbus RTU с функцией FC03 (Read Holding Registers). Ждёт ответ с заданным таймаутом, проверяет CRC16 (реализована внутри, без libmodbus) и выводит результат. Между запросами соблюдается необходимая межкадровая пауза в 3.5 символа.

📦 Где брать?

Исходники и готовые бинарники (x86_64, aarch64) доступны в репозитории проекта. Сборка стандартная — gcc -O2 -Wall -o mbscan mbscan.c. Есть даже готовый Makefile для интеграции в пакет OpenWrt.

💡 Кстати

Утилита создана для промышленных шлюзов, но отлично работает и с обычными USB-RS485 адаптерами (CH341, FTDI) на любом Linux-хосте.

🔗 Подробности и исходники

🔗Репозиторий