Некорректный ответ wd-mr6c v2

Во первых, спасибо за замечательные девайсы !

Пытаюсь управлять реле М6RC с помощью команд по modbus (Id :8b):
выключаем реле:
→ 8B 05 00 00 00 80 D3
← 8B 05 00 00 00 80 D3 [CRC OK]
все хорошо.
включаем:
→ 8B 05 00 00 FF C0 93
← 8B 05 00 00 FF C0 93 FF FF FE FF EF FF [CRC BAD]
после чего 1й канал включается, но реле “подвешивает” шину RS485.
если послать опять команду “выключить”
→ 8B 05 00 00 00 80 D3
← FF 8B 05 00 00 00 80 D3 [CRC BAD]
канал выключается , шина отвисает и последующие команды исполняются правильно , например-> 8B 03 00 FA 00 0F 3A 95
← 8B 03 1E 00 31 00 2E 00 31 00 37 00 2E 00 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5F C0 [CRC OK]
Вопрос : Что я делаю не правильно ?

В дополнение: аналогичное поведение на WB-MR3LV/I

Явно я чего то не так делаю…
Кстати, какие таймауты рекомендуются ?

Посылка у вас что-то короткая. Данных долхно быть два байта.

Воспроизвожу.
Устройство 98, включаю:

modbus_client  --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a98 -r0 -t0x5 1
Data to write: 0x1
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[62][05][00][00][FF][00][85][A9]
Waiting for a confirmation...
<62><05><00><00><FF><00><85><A9>
SUCCESS: written 1 elements!

Выключаю:

modbus_client  --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a98 -r0 -t0x5 0
Data to write: 0x0
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[62][05][00][00][00][00][C4][59]
Waiting for a confirmation...
<62><05><00><00><00><00><C4><59>
SUCCESS: written 1 elements!

А вот это откуда:

Откуда набор FF? Точно ли с шиной все хорошо?

Андрей, спасибо за ответ.
Итак :

Посылка у вас что-то короткая. Данных долхно быть два байта.

Конечно, правильно : 8B 05 00 00 FF 00 [CRC]
Только сути дела это не меняет… По прежнему при переводе реле в состояние “включено” в 90 % случаев я получаю ответ с “BAD CRC”.
Кстати с реле WB-MR3LV/ практически всегда отвечает без ошибки, но иногда все же ошибку дает.
Поэтому, как я думаю, с самим запросом все в порядке, а что то не так с таймингом или шиной…
Но - шина самая простая - конвертер USB/RS485 в который включено единственным устройством реле.
Поэтому единственное на что я грешу сейчас- тайминги…
Я использую : timeout = 1000ms, timeout between symbols =2ms, between frames = 4ms.
Команду “включить” ( ADR 05 00 00 FF 00 [CRC]) реле исполняет , но почти всегда отвечает с ошибкой.
Команду “выключить” ( ADR 05 00 00 00 00 [CRC]), реле исполняет, и отвечает без ошибки…
Извините, если изложил несколько сумбурно…

зы:

А вот это откуда:

Это ответ от реле…

Дополняю :
Соединил GND реле и адаптера USB/RS485.
Ошибки исчезли.

Но, ведь должно работать и так ( без соединения) , не так ли ?

Нет, без соединения работать может. Плохо, ненадежно но может. В таком случае потенциалы выравниваются через защитные диоды трансиверов, что в реальном мире приводит к ошибкам и потенциальному выходу ихз строя. Шина RS-485 - трехпроводная и Gnd быть обязан.

Век живи - век учись …
Спасибо за помощь. думаю, тему можно закрывать.

1 лайк

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