The telnet port 23 is enabled on inverter? You can connect from computer to inverter on port 23?
Yes the timing. I copy/pasted a wrong version
int modbusRequest(byte uid, unsigned int addr, byte len, int *regs) {
static NetClient modbus;
if (!modbus.connected()) {
// modbus.stop();
modbus.connect(symoAddress, 502);
if (!modbus.connected()) {
modbus.stop();
return MODBUS_CONNECT_ERROR;
}
}
byte request[] = {0, 1, 0, 0, 0, 6, uid, 3, (byte) (addr / 256), (byte) (addr % 256), 0, len};
modbus.write(request, sizeof(request));
modbus.flush();
if (!available(modbus)) {
modbus.stop();
return MODBUS_NO_RESPONSE;
}
for (int i = 0; i < 7; i++) { // skip 7
if (modbus.read() == -1)
return -3;
if (!available(modbus))
return -1;
}
switch (modbus.read()) { // code
case 3:
break;
case -1:
return -4;
case 0x83:
return modbus.read(); // 0x01, 0x02, 0x03 or 0x11
default:
return -6;
}
if (!available(modbus))
return -1;
int l = modbus.read() / 2;
int i = 0;
while (true) {
if (!available(modbus))
return -1;
byte hi = modbus.read();
if (!available(modbus))
return -1;
byte lo = modbus.read();
regs[i++] = hi * 256 + lo;
if (i == len || i == l)
break;
}
return 0;
}
boolean available(Stream& client) {
for (int i = 0; i < 5000; i++) {
if (client.available())
return true;
delay(1);
}
return client.available();
}