数字格式转换IEEE

问题描述 投票:-1回答:1

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

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

 master.connect();

                                int[] registerValues = master.readInputRegisters(1,0,14);


                              //  double voltage=registerValues[0]-17024;
                              //  double amperage=registerValues[6]/15000;
                                double units=(registerValues[12]);
java modbus
1个回答
0
投票

作为(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;   
}

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

© www.soinside.com 2019 - 2024. All rights reserved.