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); } } }