Преобразование формата номера IEEE - PullRequest
0 голосов
/ 22 мая 2018

Я использую счетчик SDM 220 для расчета энергии от электрической системы с использованием протокола MODBUS RS485. Но когда я читаю значения регистра, он дает в шестнадцатеричном формате номер (32-битный стандартный формат IEEE). Так как правильно преобразовать значения регистра;

значение регистра: 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]);

1 Ответ

0 голосов
/ 12 июня 2018

Поскольку (jlibModbus java lib я использовал в качестве протокола) он использует 32 бита, используя 16-битные 2 регистра, я получил два значения регистра.

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

Я думаю, что это будет кому-то полезно, я должен потратить на это много времени.

...