Как декодировать кадр Modbus в плавающее значение, используя код Arduino? - PullRequest
0 голосов
/ 02 апреля 2020

Здравствуйте, пожалуйста, мне нужна ваша помощь, я сейчас работаю над проектом emodbus с Arduino, я хочу прочитать данные с счетчика энергии на последовательном мониторе на плате Arduino,

Я отправляю, например, следующий кадр arduino к измерителю для восстановления значения напряжения: 01 03 00 12 00 02 64 0E в ответ от счетчика на карту arduino я получаю следующий кадр: 01 03 04 43 54 19 9A 25 9C, который должен иметь значение: 212.1

моя проблема в том, что я не мог отобразить на последовательном мониторе, как я могу декодировать этот кадр с помощью кода Arduino, чтобы получить истинное значение

1 Ответ

0 голосов
/ 02 апреля 2020

Читайте здесь о библиотеке Modbus

Форматы кадров (Это ответ на мой вопрос из комментария - вы должны были это знать)

«Кадр» Modbus состоит из прикладного блока данных (ADU), который инкапсулирует протокольный блок данных (PDU): [10]

ADU = Address + PDU + Error check,
PDU = Function code + Data.

Порядок байтов для значений в кадрах данных Modbus является наиболее значимым байтом многобайтового значения передается перед остальными. Все варианты Modbus используют один из следующих форматов фреймов. [1]
Формат кадра Modbus RTU (в основном используется в асинхронных последовательных линиях данных, таких как RS-485 / EIA-485)
Имя Длина (биты) Функция
Начало 28 По меньшей мере, 3,5 символа времени тишины (условие пометки)
Адрес 8 Адрес станции
Функция 8 Указывает код функции; например, чтение катушек / регистров хранения
Данные n × 8 Данные + длина будут заполняться в зависимости от типа сообщения
CR C 16 Cycli c проверка избыточности
Конец 28 По крайней мере, 3½ символов времени тишина между кадрами

Перед использованием библиотеки или строительных блоков из нее сначала прочитайте вопросы . Для применения к emodbus go здесь : посмотрите файлы emodbus.h и emodbus. cpp и etools.h и etools. cpp

...