首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >号码格式转换IEEE

号码格式转换IEEE
EN

Stack Overflow用户
提问于 2018-05-22 07:53:04
回答 1查看 377关注 0票数 0

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

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

代码语言:javascript
复制
 master.connect();

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


                              //  double voltage=registerValues[0]-17024;
                              //  double amperage=registerValues[6]/15000;
                                double units=(registerValues[12]);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 10:12:39

由于(我使用的是jlibModbus java库作为协议),它通过使用16位2寄存器使用32位,我得到了两个寄存器值。

代码语言:javascript
复制
int[] registerValues = master.readInputRegisters(1,330,14);
int unitsReg1=registerValues[12];
int unitsReg2=registerValues[13];
float units=getRealRegisterValue(unitsReg1,unitsReg2);

然后我写了这个方法

代码语言:javascript
复制
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;   
}

我想这对某人会有帮助,我得花很多时间在这个问题上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50462501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档