Как узнать модель устройства, если известен только адрес?

Добрый день.

Каким образом можно понять, что за устройство находится по определенному адресу? Просканировал шину modbus, большинство устройств мне известно, но есть 3 устройства, тип которых мне неизвестен и где они находятся тоже. Как-то можно понять по ответу от устройства, какая это модель?

Опрашиваю устройства следующим образом (периодически возникают ошибки контрольных сумм во время опроса):

modbus_client -mrtu /dev/ttyRS485-1 --debug -a162 -t3 -r0x80 -s2 -pnone

Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[A2][03][00][80][00][01][9D][71]
Waiting for a confirmation…
<03><02><00>
SUCCESS: read 1 of elements:
Data: 0x00a2

modbus_client -mrtu /dev/ttyRS485-1 --debug -a148 -t3 -r0x80 -s2 -pnone

Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[94][03][00][80][00][01][98][E7]
Waiting for a confirmation…
<03><00><00><6B><13>
ERROR CRC received 6B13 != CRC calculated 81C0
ERROR occured!

modbus_client -mrtu /dev/ttyRS485-1 --debug -a122 -t3 -r0x80 -s2 -pnone

Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[7A][03][00][80][00][01][8F][A9]
Waiting for a confirmation…
<03><00><00><31><34>
ERROR CRC received 3134 != CRC calculated 81C0
ERROR occured!

https://wirenboard.com/wiki/index.php/Relay_Module_Modbus_Management
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:

Модуль Сигнатура
WB-MRPS6 MRPS6
WB-MR6C WBMR6
WB-MR3xV WBMR3
WB-MR6xV WBMR6
WB-MR14 WBMR14
WB-MR11 WBMR11
WB-MRM2 WBMR2

WBMR2m|

Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00. Начиная с регистра 220 записана дата сборки прошивки, в формате "число x00 время x00 " в виде строки (пример: ‘Jan 27 2017 17:01:13’). Длина записи — 21 регистр.

1 лайк

Спасибо, помогло :slight_smile:
Добавлю, полученные шестнадцеричные значения нужно еще будет декодировать из hex в текст. В инете подобные сервисы ищутся за пару минут.