smarmengol / Modbus-Master-Slave-for-Arduino

Modbus Master-Slave library for Arduino
GNU Lesser General Public License v2.1
473 stars 328 forks source link

ESP8266 не работает считывание регистров - только запись #56

Open Serg1305 opened 3 years ago

Serg1305 commented 3 years ago

Уважаемые разработчики - у меня проблема - я на Atmega328p использую Вашу библиотеку - работает отлично: Я считываю два адреса и записываю два адреса.

Теперь я пробую применить на ESP8266 - у меня получается только записывать - считывать упорно не хочет. библиотеку использую самую последнюю.

в коде на ArduinoIDE определяю так:

include

include

SoftwareSerial Serial_Modbus(14, 13); // RX, TX uint16_t DataModbusRead[2]; uint16_t DataModbusWrite[2]; uint8_t u8state; uint8_t u8query; Modbus master(0, Serial_Modbus, 12); modbus_t telegram[4]; unsigned long u32wait;

в Setup на ArduinoIDE делаю так:

telegram[0].u8id = 1; telegram[0].u8fct = 3; telegram[0].u16RegAdd = 0x2100; telegram[0].u16CoilsNo = 1; telegram[0].au16reg = DataModbusRead;

telegram[1].u8id = 1; telegram[1].u8fct = 3; telegram[1].u16RegAdd = 0x300C; telegram[1].u16CoilsNo = 1; telegram[1].au16reg = DataModbusRead+1;

telegram[2].u8id = 1; telegram[2].u8fct = 6; telegram[2].u16RegAdd = 0x2000; telegram[2].u16CoilsNo = 1; telegram[2].au16reg = DataModbusWrite;

telegram[3].u8id = 1; telegram[3].u8fct = 6; telegram[3].u16RegAdd = 0x2001; telegram[3].u16CoilsNo = 1; telegram[3].au16reg = DataModbusWrite+1;

master.begin(&Serial_Modbus, 38400, SWSERIAL_8N1); master.start(); master.setTimeOut(100); u32wait = millis()+1000; u8state = u8query = 0;

в loop() а ArduinoIDE делаю так:

switch(u8state) { case 0: if(millis()>u32wait) u8state++; break; case 1: master.query(telegram[u8query]); u8state++; u8query++; if (u8query > 3) u8query = 0; break; (только один раз) u8query > 3 - значит, что modbus_t telegram[4]; case 2: master.poll(); if(master.getState() == COM_IDLE) {u8state = 0; u32wait = millis() + 50;} break; }

но происходит только запись - считывания нет...

я подключаю к ESP8266<->MAX485 I014<->RO, I013<->DI, I012<->DE/RE

помогите пожалуйста - где ошибка??? я Вам заранее благодарен.