Skip to content

Latest commit

 

History

History
164 lines (121 loc) · 5.13 KB

File metadata and controls

164 lines (121 loc) · 5.13 KB

mbscan — сканер шины Modbus RTU

Утилита командной строки для поиска устройств Modbus RTU на последовательных портах.
Отправляет запрос FC03 (Read Holding Registers) на каждый адрес и сообщает об ответивших устройствах.

Платформы: Linux, Windows
Зависимости: отсутствуют — чистый C, собственная реализация CRC16


Сборка

Linux:

gcc -O2 -Wall -o mbscan mbscan.c

Windows (MSVC):

cl mbscan.c /Fe:mbscan.exe

Windows (MinGW/MSYS2):

gcc -O2 -Wall -o mbscan.exe mbscan.c

Использование

mbscan [опции] ПОРТ [ПОРТ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 Показать справку

Скорости при -T / -B

9600, 19200, 38400, 115200

Форматы при -T / -D

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/ttyUSB0

Windows:

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