Open Serg1305 opened 3 years ago
Уважаемые разработчики - у меня проблема - я на Atmega328p использую Вашу библиотеку - работает отлично: Я считываю два адреса и записываю два адреса.
Теперь я пробую применить на ESP8266 - у меня получается только записывать - считывать упорно не хочет. библиотеку использую самую последнюю.
в коде на ArduinoIDE определяю так:
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
помогите пожалуйста - где ошибка??? я Вам заранее благодарен.
Уважаемые разработчики - у меня проблема - я на 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
помогите пожалуйста - где ошибка??? я Вам заранее благодарен.