从modbus模拟器接收整数值时,Byte数组转换为double?

时间:2015-08-01 08:24:03

标签: java casting nio modbus

任何人都知道modbus模拟器,我坚持转换价值观。我使用wimpi modbus api连接到设备并读取和写入寄存器值。所以我有一个modbus模拟器,我在每个寄存器中得到一些值,基于一个寄存器是2个字节。所以我有4个寄存器值一起给我一个测量值。所以使用wimpi readregister我得到特定寄存器的整数值。我的电压测量为(16492 35578 10726 22350)。这4个寄存器值产生一个双精度值。所以我需要的是将这4个整数值转换为单个double值,modbusutil.registersToDouble()方法可用于接受字节数组值。

如果有人帮助我进行转换将会很明显。

现在我正在尝试这样:

byte[] bytes = {(byte) 16492,(byte) 35578,(byte) 10726,(byte) 22350};
        Double d = ModbusUtil.registersToDouble(bytes);
System.out.println(d);

它正在抛出异常

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at net.wimpi.modbus.util.ModbusUtil.registersToDouble(ModbusUtil.java:343)

如果有人将从寄存器收到的整数值转换为双倍,请告诉我。

我使用以下方式获取响应值:

ReadInputRegistersResponse registersResponse = (ReadInputRegistersResponse) this.modbusTCPTransaction.getResponse();

registersResponse.getRegister(1).getValue();
registersResponse.getRegister(2).getValue();
registersResponse.getRegister(3).getValue();
registersResponse.getRegister(4).getValue();

1 个答案:

答案 0 :(得分:0)

来自docs

  

registersToDouble

     

public static final double registersToDouble(byte [] bytes)

     

将byte [8]二进制double值转换为double原语。

     

参数:

     

bytes - 要转换的字节[8]。

     

返回:

     

双倍值。

所以我想你需要一个包含8个元素的数组。

此外还有Oracle Java Docs

  

byte :字节数据类型是8位带符号的二进制补码整数。它的最小值为-128,最大值为127(含)

因此,我认为您将失去有关转换35578 byte的衡量标准的信息。它提供:-6,这不是您可能需要的。