Skip to content

ESP32, ошибка в чтении holding register с помощью функции readHreg(); #383

@lavqz

Description

@lavqz

Здравствуйте, спасибо за вашу библиотеку.
Возникла проблема с использованием функции readHreg();
Вот мой код:

#include <ModbusRTU.h>
#include <HardwareSerial.h>

HardwareSerial Serial_Modbus(1);
ModbusRTU Modbus;

#define RX_PIN 16
#define TX_PIN 17
#define SLAVE_ID 1   // Адрес Slave-устройства
#define REG_ADDR 0   // Адрес регистра (например, 0x0000)
#define REG_COUNT 1  // Количество регистров для чтения

uint32_t tmr1; 
uint16_t REG_VALUE = 0;

void setup() {
  Serial.begin(115200); //Сериал порт для отладки
  Serial_Modbus.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); //Сериал порт для передачи данных
  Modbus.begin(&Serial_Modbus); // Передаём объект Serial в Modbus
  Modbus.master(); // Режим Master
}

void loop() {
  // Запрос Holding-регистров (функция 0x03)
  if (!Modbus.slave()) { // Проверяем, не занята ли шина
    Modbus.readHreg(SLAVE_ID, REG_ADDR, &REG_VALUE, REG_COUNT, callback);
    while (Modbus.slave()) { // Ждём ответа
      Modbus.task();
      delay(10);
    }
  }
  delay(1000); // Пауза между запросами
}

bool callback(Modbus::ResultCode event, uint16_t transactionId) {
  if (event == Modbus::EX_SUCCESS) {
    Serial.print("obtained value: ");
    Serial.println(REG_VALUE); // Выводим данные
  } else {
    Serial.print("ERROR: ");
    Serial.println(event);
  }
  return true;
}

Компилятор выдает вот такую ошибку:
Compilation error: no matching function for call to 'ModbusRTU::readHreg(int, int, uint16_t*, int, bool (&)(Modbus::ResultCode, uint16_t))'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions