Нет связи с WB-MSW v.3 по Modbus

День добрый! Пару лет назад был куплен датчик WB-MSW v.3, HW 4.9.1, FW 4.16.17. Сейчас точно не помню, но тогда, кажется, я связался с ним по стандартным настройкам Modbus, тестировал, и менял параметры связи и скорее всего modbus-адрес. Сейчас пришло время использовать датчик, однако связи с ним нет. Пробовал разные варианты: стандартные настройки (9600, 8N2, адр. 1), пробовал заводской адрес этого датчика (150), пробовал с помощью программы Modbus RTU Scanner перебирать все варианты параметров связи и адресов (1-247), пробовал связываться с помощью OPC-сервера (MasterOPC universal modbus server) - связи с датчиком нет. Использую Windows 7, адаптер USB-RS485 Delta (адаптер и драйвера в порядке - проверено на другом приборе). Питание на датчик - 24 В. Во включенном состоянии у него горит светодиод Status, помаргивая примерно 2 раза в секунду. Пытался сбросить параметры связи на заводские - с помощью утилиты wb-mcu-fw-flasher_1.2.1.exe командой “wb-mcu-fw-flasher_1.2.1.exe -d COM4 -a0 -u” - датчик откликается на эту команду примерно один раз из десяти, иногда отвечая “OK”, иногда - “Invalid CRC”, но чаще “Error: Unknown error”. Однако после этих манипуляций связи с датчиком не появляется ни с какими параметрами ни с какими программами. Также пробовал пытаться перепрошить датчик. Так как сигнатуру его считать невозможно, я скачал все прошивки, начинающиеся на “msw3” и методом проб и ошибок отсеял все, на которые выдавался ответ “invalid signature” (ответ также выдаётся примерно раз из десяти попыток), кроме одной, на которую датчик всегда реагирует “Error while sending info block: Unknown error”, однако прошивка так и не началась (сделал попыток 50, наверное). Почему нет связи с датчиком? Я что-то делаю не так? Возможно ли его реанимировать?


Сигнатура, даже из устройства в bootloader читается всегда, пример чтения:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r 290 -c 12
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[0D][03][01][22][00][0C][E4][F5]
Waiting for a confirmation...
<0D><03><18><00><77><00><62><00><2D><00><6D><00><61><00><69><00><36><00><00><00><00><00><00><00><00><00><00><E7><72>
SUCCESS: read 12 of elements:
	Data: 0x0077 0x0062 0x002d 0x006d 0x0061 0x0069 0x0036 0x0000 0x0000 0x0000 0x0000 0x0000 

Важно, читать именно 12 регистров одним запросом и только так.
Устройство 4270585034 имеет сигнатуру msw3-49gd_oa

Проверьте, в bootloader мигать светодиод должен раз в секунду. Косвенно о проблемах с питанием свидетельствует неудачное чтение. Запитайте от другого БП.

Если я правильно понял из вашей документации - с помощью команды modbus_client сигнатура может считываться только из контроллера WirenBoard (какого у меня нет) либо из-под Linux. У меня же Windows

Заменил блок питания. Несмотря на то, что первый был вроде бы хороший - но с другим началась стабильная работа, отклик на команду -u есть постоянный. Есть прогресс!

Да, чтение сигнатуры с регистров 290-301 с помощью OPC-сервера пошло.

Теперь действительно мигает раз в секунду. Но появилась новая проблема - в рабочий режим не переходит. После перезагрузки питания всё также находится в режиме bootloader. Пробовал запитывать от разных блоков питания, 12В и 24В, пробовал прождать минут 5 и более после перезагрузки. Пробовал прошить - но прошивка не начинается, та же ошибка: “Error while sending info block: Unknown error” Что в этом случае можно сделать?

Совершенно нет разницы откуда формировать-получать команду, это всего лишь набор байт.
modbus_client позволяет это делать удобно.

Соединен ли Gnd USB/RS485 адаптера с Gnd клеммой самого датчика?

Покажите вывод прошивки с debug, пока непонятно что может идти не так.

У моего адаптера, к сожалению, нет GND, только два сигнальных контакта: SG+ и SG-. Хотя ранее нужды пользоваться уравниванием потенциалов не было (адаптер у меня активно используется более 10 лет). Попробую найти адаптер с GND.

Насколько я понимаю, имеется в виду аргумент --debug для утилиты modbus_client? У которой, опять же, нет варианта для windows?

Попробовал своим методом - перехватил передаваемые байты с помощью стороннего софта (сниффер), вот что получаем при запросе на восстановление modbus-параметров (-u):

Порт открыт
Запрос:
 01 06 03 E8 00 01 C8 7A    
Ответ:
 01 06 03 E8 00 01 C8 7A   
Порт закрыт

А вот что получается после неудачной попытки прошивки (после трёх ответов “Unknown error”):

Порт открыт
Запрос:
 01 10 10 00 00 10 20 4C 5B 9E AD 94 3B 94 A6 10
 36 9F 10 AB 0A 77 CB AE E1 0A F2 8B 91 0D 1B BF
 E9 3C 3B 10 5A E6 83 8C 16 01 10 10 00 00 10 20
 4C 5B 9E AD 94 3B 94 A6 10 36 9F 10 AB 0A 77 CB
 AE E1 0A F2 8B 91 0D 1B BF E9 3C 3B 10 5A E6 83
 8C 16 01 10 10 00 00 10 20 4C 5B 9E AD 94 3B 94
 A6 10 36 9F 10 AB 0A 77 CB AE E1 0A F2 8B 91 0D
 1B BF E9 3C 3B 10 5A E6 83 8C 16    
Порт закрыт

пишем в 1 устройство, в holding 1000 значение 1, все верно

Я не вижу смысл восстанавливать снова, значения успешно приведены к умолчальным.

Я вижу просто кусок прошивки, совершенно непонятно что на самом деле происходит.

Обратите внимание на скриншот из документации: https://wirenboard.com/wiki/images/thumb/0/04/Wb-mcu-fw-flasher-in-windows-cmd.png/400px-Wb-mcu-fw-flasher-in-windows-cmd.png

Всё, проблема решена. Действительно, с помощью -D прошивка прошла успешно, всё заработало. Спасибо!

Ну, отлично. Это просто опыт.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.