Утилита командной строки для поиска устройств Modbus RTU на последовательных портах.
Отправляет запрос FC03 (Read Holding Registers) на каждый адрес и сообщает об ответивших устройствах.
Платформы: Linux, Windows
Зависимости: отсутствуют — чистый C, собственная реализация CRC16
Linux:
gcc -O2 -Wall -o mbscan mbscan.cWindows (MSVC):
cl mbscan.c /Fe:mbscan.exeWindows (MinGW/MSYS2):
gcc -O2 -Wall -o mbscan.exe mbscan.cmbscan [опции] ПОРТ [ПОРТ2 ...]
mbscan -p ПОРТ[,ПОРТ2,...] [опции]
Важно: используйте только на портах, где ожидаются датчики Modbus.
На портах с другими устройствами (GPS, LTE-модем, консоль) результаты непредсказуемы.
| Опция | Описание | По умолчанию |
|---|---|---|
-p ПОРТ |
Последовательный порт (или через запятую несколько) | — |
-b BAUD |
Скорость передачи | 115200 |
-d ФОРМАТ |
Формат данных: 8N1, 8E1, 8O1, 7E1 и т.д. | 8N1 |
-f FROM |
Начальный адрес slave | 1 |
-t TO |
Конечный адрес slave | 247 |
-o MS |
Таймаут ожидания ответа, мс | 100 |
-r REG |
Начальный регистр (0-based) | 0 |
-c COUNT |
Количество читаемых регистров | 1 |
-T |
Полный перебор: все скорости × все форматы | — |
-B |
Перебор скоростей (9600–115200), формат из -d |
— |
-D |
Перебор форматов (8N1, 8E1), скорость из -b |
— |
-S |
Остановиться после первого найденного устройства | — |
-R |
Вывести итоговый отчёт в конце | — |
-v |
Подробный вывод | — |
-h |
Показать справку | — |
9600, 19200, 38400, 115200
8N1, 8E1
Простой скан на известной скорости:
mbscan /dev/ttyUSB0
mbscan -b 9600 -d 8E1 /dev/ttyUSB0Сканировать только адреса 1–32, читать 4 регистра начиная с 100:
mbscan -b 9600 -f 1 -t 32 -r 100 -c 4 /dev/ttyUSB0Полный перебор скоростей и форматов (неизвестные настройства):
mbscan -T /dev/ttyUSB0
mbscan -T -S /dev/ttyUSB0 # остановиться на первом найденномПеребор только скоростей:
mbscan -B -d 8E1 /dev/ttyUSB0Несколько портов одновременно:
mbscan /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
mbscan /dev/ttyUSB*
mbscan -p /dev/ttyUSB0,/dev/ttyUSB1Итоговый отчёт:
mbscan -T -R /dev/ttyUSB0Windows:
mbscan.exe COM3
mbscan.exe -T -S COM3
mbscan.exe -p COM3,COM4,COM5Найденные устройства печатаются в stdout, диагностика — в stderr.
Found slave 3 at 9600-8E1: [0]=100 [1]=200
Found slave 17 at 9600-8E1: [0]=50
При -R или при переборе (-T/-B/-D) или нескольких портах — итоговый отчёт:
=== Scan results ===
/dev/ttyUSB0 Slave 3 at 9600-8E1: [0]=100 [1]=200
/dev/ttyUSB0 Slave 17 at 9600-8E1: [0]=50
/dev/ttyUSB1 Slave 125 at 115200-8N1: [0]=125 [1]=1
mbscan: done in 01:47. Found 3 device(s).
Если порт открылся, но запись невозможна (например, на порту висит другое устройство), после 3 ошибок подряд mbscan прекращает скан этого порта и пытается определить что там:
mbscan: 3 consecutive write errors on /dev/ttyUSB0 at 9600-8N1
mbscan: port may be occupied by another device.
mbscan: listening for incoming data (500ms)...
mbscan: detected: GPS/NMEA stream
mbscan: skipping port /dev/ttyUSB0.
Возможные варианты определения: GPS/NMEA, AT/LTE-модем, ESP8266/ESP32 boot log, Modbus master, неизвестный текстовый или бинарный протокол.
| Код | Значение |
|---|---|
0 |
Найдено хотя бы одно устройство |
1 |
Устройства не найдены или ошибка |
GPL-2.0 © 2025 NapiLab