ModbusRTU + ESP32 + частотный преобразователь VEMPER VR100. Читаются только регистры функциональных кодов
- Войдите на сайт для отправки комментариев
Пнд, 11/04/2022 - 08:36
Всем здравствуйте. Используя вышеуказанную библу (https://github.com/emelianov/modbus-esp8266) не могу прочитать регистры отличные от регистров функциональных кодов. А, также не могу записать в регистры функциональных кодов и другие.
При попытке ,например, записать содержимое регистра в него же (код ниже), в мониторе порта ошибка: 0x5.
Пример кода
#include <ModbusRTU.h>
//#include <ESP8266_LCD_1602_RUS.h>
//#include <Keypad.h>
////////// MODBUS /////////////
#define SLAVE_ID 1 //номер сервера
#define READ_REG 5 //читаемый регистр
#define REG_COUNT 1 //количество читаемых регистров
#define MODBUS_RX_PIN 16 //пин RX
#define MODBUS_TX_PIN 17 //пин TX
#define MODBUS_DE_RE 4 //пин DE_RE
ModbusRTU mb;
bool cb(Modbus::ResultCode event, uint16_t transactionId, void* data) {
if (event != Modbus::EX_SUCCESS) {
Serial.print("Request result: 0x");
Serial.println(event, HEX);
}
return true;
}
uint16_t res[REG_COUNT];
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, MODBUS_RX_PIN, MODBUS_TX_PIN); //запускаем и определяем параметры MODBUS
mb.begin(&Serial2, MODBUS_DE_RE); //работа по состоянию пина 4
mb.master();
}
void loop() {
//////////////////////////////// READ ///////////////////////////////////////
if (!mb.slave()) {
mb.readHreg(SLAVE_ID, READ_REG, res, REG_COUNT, cb);
while(mb.slave()) {
mb.task();
delay(50);
}
Serial.println(res[0]);
delay(1000);
}
//////////////////////////// WRITE ///////////////////////////////////////////
if (!mb.slave()) {
mb.writeHreg(SLAVE_ID, READ_REG, res, REG_COUNT, cb);
while(mb.slave()) {
mb.task();
delay(10);
}
}
}