ModBus: функциональные коды

Как только обрадовался насчёт работы релейного модуля, так оббился об очередную стену… :slight_smile:

Запись регистров производится используя функциональный код 0х06. Как-то не нахожу, что я могу вписать “reg_type” чтобы получить этот код.

Пример:

R1_OPEN: [01][06][00][01][01][01][18][5a]
R1_CLOSE: [01][06][00][01][01][00][d9][9a]

Debug с Wirenboard:

Coil: [01][01][00][01][00][01][AC][0A]
Discrete: [01][02][00][01][00][01][E8][0A]
Holding: [01][03][00][01][00][01][D5][CA]
Input: [01][04][00][01][00][01][60][0A]

Даже при использовании “setup”, что кстати ближе всех к нужному, используется регистр “WriteMultiple”.

[01][10][00][01][00][01][02][00][01][66][41]

Может его можно заставить использовать “WriteSingle” ([06])?

В коде драйвера на Wiren Board это обрабатывается здесь: https://github.com/contactless/wb-homa-drivers/blob/master/wb-homa-modbus/modbus_client.cpp#L99

Можно туда вписать использование modbus_write_register, если nb == 1, и modbus_write_registers в других случаях.

Если возникнут сложности, можем сделать сами в рамкой платной поддержки. Подробности тут: http://contactless.ru/partners/ , оценка времени 1 час, писать на support@contactless.ru .

P.S. Пользуясь случаем, скажу, что в наших собственных релейных блоках таких сюрпризов не наблюдается.

А после того, как вы сделаете изменения, мне его надо будет компилировать или обновление будет доступно через apt?

Через apt.