Invalid crc for device modbus

Добрый день.

Подключил ко второму порту modbus контроллер приточной установки GTC Syberia 3.
По началу шли периодические ошибки при чтении, что вылечилось установкой на порту Guard interval ‘3500’.
Однако при записи каждый раз контрол подсвечивается красным, хотя запись в него фактически проходит в 100% случаев и GTC изменение отрабатывает.

Jun 12 17:52:03 wirenboard-AX3WVENQ user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 32: Serial protocol error: invalid crc for device modbus:1
Jun 12 17:52:05 wirenboard-AX3WVENQ user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 32: Serial protocol error: invalid crc for device modbus:1

Что покрутить, чтобы это ушло?

Проверьте настройки порта: чётность и стоп-биты соответствуют тем, которые хочет это стороннее устройство?

Ещё можно включить отладку в serial devices configuration (/etc/wb-mqtt-serial.conf) и посмотреть на то, что именно не так в пакетах.

Спасибо, проверил параметры порта изначально. Они ровно такие, как требует GTC.

Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: modbus: write 1 holding(s) @ 32 of device modbus:1
Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: Write: 01 06 00 20 00 01 49 c0
Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: setting device register: <modbus:1:holding: 32> <- 2
Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: ReadFrame: 01 06 80 22
Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 32: Serial protocol error: invalid crc for device modbus:1
Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: modbus: write 1 holding(s) @ 32 of device modbus:1
Jun 14 01:11:34 wirenboard-AX3WVENQ user.notice serial: Write: 01 06 00 20 00 02 09 c1
Jun 14 01:11:35 wirenboard-AX3WVENQ user.notice serial: ReadFrame: 01 06 80 22
Jun 14 01:11:35 wirenboard-AX3WVENQ user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 32: Serial protocol error: invalid crc for device modbus:1

Добавлю на всякий случай, что чтение регистров теперь проходит чисто и без ошибок.
А вот запись фактически проходит и приточка это отрабатывает, но ошибка выводится.

  1. Проверьте соединение. Постарайтесь уменьшить длину кабеля от контроллера до устройства, чтобы исключить возможные аппаратные проблемы.
  2. Попробуйте ту же команду отправить руками через Утилита «modbus_client» — Wiren Board
  3. Если ответ устройства будет тем же, найдите в документации или спросите у производителя оборудования, почему на такую команду запроса устройство возвращает такой ответ.

А какой должен быть правильный ответ? (я не специалист в протоколе modbus)

https://wirenboard.com/wiki/index.php/Протокол_Modbus

Я правильно понял, что контрольной суммы в принципе сейчас в ответе нет?

01 06 80 22

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

Видимо, действительно придется спрашивать производителя

root@wirenboard-AX3WVENQ:~# modbus_client --debug -mrtu -b19200 -pnone -s2 /dev/ttyRS485-2 -a1 -t0x03 -r0x20
Opening /dev/ttyRS485-2 at 19200 bauds (N, 8, 2)
[01][03][00][20][00][01][85][C0]
Waiting for a confirmation...
<01><03><02><00><02><39><85>
SUCCESS: read 1 of elements:
        Data: 0x0002
root@wirenboard-AX3WVENQ:~# modbus_client --debug -mrtu -b19200 -pnone -s2 /dev/ttyRS485-2 -a1 -t0x06 -r0x20 0x02
Data to write: 0x2
Opening /dev/ttyRS485-2 at 19200 bauds (N, 8, 2)
[01][06][00][20][00][02][09][C1]
Waiting for a confirmation...
ERROR Connection timed out: select
<01><06><80><22>ERROR occured!
1 Like