Формирование команды Modbus

Можете помочь разобраться с форматом регистра?
Есть в инструкции описание формата
Например нужно установить на шине 1, Группы 2, яркость в 127
Регистр 41001
0 Байт - Адрес Шины (например 1)
1 Байт - Адрес Группы (например 2)

2026-03-12_23-30-54

2 Байт - Выбор операции

  • 1 - Установить яркость (значение 3го Байта)

3 Байт - Яркость 127

4-7 Байты в этой команде не используются

Как должна выглядеть команда modbus_clietn ?
modbus_client --debug -mtcp -a1 -c1 -r41001 -t0x10 -o300 -p502 192.168.88.30 …..

Добрый день. Согласно правилам - перенес сообщение из решенной (закрытой) темы в новую.
Как я понимаю - нужно записать значение?

Добрый день.

Да, нужно записать значение в регистр

Отлично.

Судя по использованию функции 0x10 - несколько регистров записать?
Тогда, для примера:

modbus_client --debug -mtcp -a1 -c1 -r41001 -t0x10 -o300 -p502 192.168.88.30 0x00ff 0xff00

В регистр 41001 будет записано 0x00ff а в 41002 запишется 0xff00

1 лайк

Ну и, если будете формировать команды собирая их из отдельных бит - то лучше, удобнее, использовать из скрипта RPC вот так.

1 лайк

4 регистра …
Чтото знаний не хватает мне
Получается 4 байта в 4 регистра писать ?
1 - адрес шины
2 - адрес устройства
3 - номер функции
4 - яркость

modbus_client --debug -mtcp -a255 -c1 -r41001 -t0x10 -o300 -p502 192.168.88.30 0x01 0x01 0x03 0x7f

Так ?

решение в этой теме, в stable не будет работать - только в testing ?

вот полное описание регистров

Регистры Modbus - шестнадцатибитные. То есть в каждом два байта. Биты в регистре 0-15 или 0-f.

Да, верно.

Ну, видимо нужно действительно, писать все 4 регистра одной операцией. Советую сначала попробовать вручную - потом уже писать скрипт формирования.

Не совсем понимаю как передать 8 байт в 4 регистра

например при управлении цветом

  • 0 байт -Адрес Шины (1)
  • 1 - Адрес устройства (22)
  • 2 - Сена цвета (5)
  • 3 - Тип управления RGB (2)
  • 4 - Red (120)
  • 5 - Green (25)
  • 6 - Blue ( 247)
  • 7 - White (0)

Как писал выше каждый регистр - это два байта.
То есть один байт - биты 0..7 регистра второй - биты 8..f.
Регистр собирается из двух.

Вот прямо так и собирется.
Если нулевой байт - это младшие биты то получается:
нулевой, значение 0x01;
первый - значение 0ч16;
получаем значение регистра (слова) 0x1601

1 лайк