День добрый!
Подскажите как можно в шаблоне записать значение в Hex, если в web интерфейса мы передаем численное значение в Dec.
Вот, что пишет производитель устройства:
Set device address (0xC0)
The device supports sending the serial command and using a configuration file to set the address.
Set device address by sending the serial command: FF 06 00 C0 00 DL CRC_L CRC_H
DL represents the address to be modified, which can be set to 0-255 (to be converted to hexadecimal number) and DL=0x00-0xFF
Example: Send the command “FF 06 00 C0 00 FE 1D A8” to set the address to 254 (DL=0xFE)
Returned data: “FF 06 00 17 00 01 ED D0”
Как записать нужное поле modbus адреса в Hex, при том, что, переданое значение из строки в web интерфейсе настройки устройства в формате Dec? Есть ли встроенная в шаблон функция по трансляции? Если есть, то как ее вызвать?
WB 8.4 stable
Внешнее устройство - подключено по RS485 аудиопроигрыватель Flyron FN-MD01
Добрый день. Пока не очень понимаю смысл вопроса, к сожалению:
quote=“evrelse, post:1, topic:22060”]
Подскажите как можно в шаблоне записать значение в Hex, если в web интерфейса мы передаем численное значение в Dec.
[/quote]
В соответствии со спецификацией протокола максимальное значение адреса не может быть более 247.
Независимо от того как сконфигурировано в шаблоне драйвер в любом случае записывает шестнадцатеричное значение в регистр.
В web интерфейсе я воожу десятичное значение modbus адреса. Нажимаю кнопку “Сохранить”.
Как теперь мне взять это Dec значение и записать в регистр устройства Hex значение?
Как это описать в шаблоне, что надо транслировать полученное значение в Hex и записать в адрес 0хС0?
Так… Давайте с примером. Какое значение вводите в интерфейсе, какую последовательность байт (команду) ожидаете для отправки в устройство и чем фактически отправленная отличается от ожидаемой?
Так в первом сообщении все данные как раз.
Сейчас SlaveID = 1. Хочу поменять на любое другое, например на 48. Соответственно в web интерфейсе ввожу в поле 48. Это означает, что в устройство по адресу 0хС0 должно записаться значение 30 в виде FF 06 00 C0 00 30 1D A8.
Если я делаю шаблон:
то у меня запишется не 30 (FF 06 00 C0 00 30 1D A8), а введенные мной 48 (FF 06 00 C0 00 48 1D A8) и адрес будет назначен неправильно.
Как описать в шаблоне, что введенный Dec номер надо сконвертировать в Hex и уже его записать по адресу 0хС0?
Пожалуйста покажите что именно записывается, вот именно кусок из лога. У меня не получается воспроизвести.
Если я устанавливаю значение для holding регистра 5 в 48 то получаю ожидаемое 0x30: 0A 06 00 05 00 30 98 A4
Не готов экспериментировать с SlaveID, чтобы не потерять устройство. Предлагаю попробовать с уровнем громкости. Он может быть от 0 до 30.
По документации производителя у нас есть два параметра
Громкость на максимум, но это значение не 30, а 2821. Причем при опросе значение -8680.
Попробуем изменить громкость ползунком. Она меняется от 0 до 30
Это громкость 16. После установки и нажатия Enter, значение возвращается на 2821. При этом значение в поле Query меняется в некоторой зависимости:
0 в -8704
4 в -8700
5 в -8699
6 в -8698
30 в -8674
При этом можно поставить и 31 и 40 и 50, т.е. громкость больше заявленной 30 возможна, но не реальна, т.к. не увеличивается на устройстве.
Т.е. возможные варианты проблемы:
При выборе Dec значения не происходит конвертация и запись в Hex - записывается в Dec. Запись и отображение не соответствуют реальности (значения в range и value)
Прочитанные из адреса значения Hex конвертируются несколько раз и выводятся в непонятные числа
Возможно есть сдвиг параметров, т.к. прослеживается слабая зависимость в значениях, но из-за нескольких конвертаций его наверное не стоит использовать
Пожалуйста, сделайте следующее:
Запишите в регистр 0x06 значение, например 15.
Остановите wb-mqtt-serial и прочитайте из этого регистра значение с помощью modbis_client.
Оно отличается от ожидаемого?
Запишите и прочитайте значения с помощью modbus_client.
Читается записанное?
Как я понимаю, тема себя исчерпала, она была начата для проверки “неверной работы” драйвера, бага не подтвердилась. Если есть еще вопросы - то начните новую.
Не понимаю чем вопрос “неудобен”. Я предполагаю что вы прочитали документацию к драйверу.
Если его поведение расходится с тем что описано - готов помочь.