how to read current and voltage from digital meter by using Modbus RTU&Arduino

hello, currently i faced the problems to read the voltage and current values from the digital meter Mikro DPM 380 by using Modbus RTU …
Below is my coding :

#include <ModbusRtu.h>
#include <SoftwareSerial.h>

// data array for modbus network sharing
uint16_t au16data[16];
uint8_t u8state;

String str_value="";
float real_value=0;

Modbus master(0,0,7);
modbus_t telegram;

unsigned long u32wait;

void setup() {
Serial.begin(9600);
master.begin(9600);
master.setTimeOut( 2000 );
u32wait = millis() + 1000;
u8state = 0;
}

void loop() {

float Voltage = readvalue(4035, 2);
Serial.print("Voltage : ");Serial.println(Voltage);
float Current = readvalue(4021, 2);
Serial.print("Current : ");Serial.println(Current);

}

float readvalue(int regcode, int numcoil){

switch( u8state ) {
case 0:
if (millis() > u32wait) u8state++; // wait state
break;
case 1:
telegram.u8id = 17; // slave address
telegram.u8fct = 4; // function code (this one is registers read)
telegram.u16RegAdd = regcode; // start address in slave
telegram.u16CoilsNo = numcoil; // number of elements (coils or registers) to read
telegram.au16reg = au16data; // pointer to a memory array in the Arduino

master.query( telegram ); // send query (only once)
u8state++;
break;
case 2:
master.poll(); // check incoming messages
if (master.getState() == COM_IDLE) {
u8state = 0;
delay(50);
u32wait = millis() + 100;

str_value=str_value+au16data[0];
real_value=str_value.toFloat();
str_value="";

}
break;

}
delay(100);
return real_value;
}

i can obtain voltage and current through this coding… BUT… it will looks like this :
Voltage : 414.00
Current : 414.00
Voltage : 414.00
Current : 414.00
Current : 2481.00
Voltage : 2478.00
Current : 2478.00
Voltage : 2478.00

it shows few of current values and few of voltage value …and it repeats…
anyone can helps?

First: please, please use code tags if you post code!!

Modbus master(0,0,7);

You initialize a Modbus object that acts as master (bus-id = 0), uses the Serial object for communication (serial interface number = 0) and uses pin D7 as the DE/RE signal of a half-duplex RS-485 channel.

But then

 float Voltage = readvalue(4035, 2);
 Serial.print("Voltage : ");Serial.println(Voltage);

you print any debugging strings to the same Serial object you defined as the communication channel for the ModBus. I strongly guess that this is your problem.

It might also help to tell us how you wired your meter to the Arduino (please post a wiring diagram, may be hand-drawn).