数字格式转换IEEE

时间:2018-05-22 07:53:05

标签: java modbus

我使用SDM 220米来计算使用MODBUS RS485协议的电力系统的能量。但是当我读取寄存器值时,它以十六进制格式编号(IEEE 32位标准格式)给出。那么如何正确转换寄存器值;

注册值:17261 实际值:237.9 Votls  如何转换寄存器值以获得实际值?

fatal: The current branch 293-error-pages has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin 293-error-pages

1 个答案:

答案 0 :(得分:0)

As(jlibModbus java lib我用作协议)它通过使用16位2寄存器使用32位,我有两个寄存器值。

int[] registerValues = master.readInputRegisters(1,330,14);
int unitsReg1=registerValues[12];
int unitsReg2=registerValues[13];
float units=getRealRegisterValue(unitsReg1,unitsReg2);

然后我写了这个方法

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;   
}

我认为这对某人有帮助,我必须花很多时间在这上面。