I use SDM 220 meter to calculate energy from a electricity system using MODBUS RS485 protocol .but when I read the register values, it gives in Hexadecimal format number (IEEE 32 bit standard format).. So how to convert register values correctly;
register value: 17261 actual value :237.9 Votls how do I convert register Values to get real value?
master.connect();
int[] registerValues = master.readInputRegisters(1,0,14);
// double voltage=registerValues[0]-17024;
// double amperage=registerValues[6]/15000;
double units=(registerValues[12]);
As (jlibModbus java lib I used as protocol)it uses 32bits by using 16bit 2 registers, I got two register values.
int[] registerValues = master.readInputRegisters(1,330,14);
int unitsReg1=registerValues[12];
int unitsReg2=registerValues[13];
float units=getRealRegisterValue(unitsReg1,unitsReg2);
then I wrote this method
private float getRealRegisterValue(int register1, int register2) {
//Get binary string of register values
String s1 = Integer.toBinaryString(register1);
String s2 = Integer.toBinaryString(register2);
//Append them respectively
String b=s1+"s2";
//get integer values
int intBits = Integer.parseInt(b, 2);
System.out.println(intBits);
//get float real value from IEEE 754 format
float realValue = Float.intBitsToFloat(intBits);
return realValue;
}
I think this will be helpful to someone ,I have to spend a lot time on this.