Search code examples
javamodbus

Number format conversion IEEE


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]);

Solution

  • 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.