使用java编程,在Modbusu举(Jmod) jar的帮助下,我开发了一个代码,它将通过Modbus连接到PLC。在这里,我需要将4个输入寄存器转换为双值。假设寄存器是(16870,24900,1588,30492),如果我转换它,我应该得到类似于3003782.9651476783的值。因此,对于转换,我使用了库提供的方法,下面是代码,
byte[] bytes = {(byte) 16870,(byte) 24895,(byte) -32348,(byte) 617};
double value = ModbusUtil.registersToDouble(bytes);
System.out.println(value);这里我使用了ModbusUtil.registersToDouble(bytearray[])方法,并作为参数im给出字节数组。但这不管用,我有例外,
java.lang.ArrayIndexOutOfBoundsException: 4
at net.wimpi.modbus.util.ModbusUtil.registersToDouble(ModbusUtil.java:326)
at modbus.ReadDataFromPLC.realValue(ReadDataFromPLC.java:110)
at modbus.ReadDataFromPLC.main(ReadDataFromPLC.java:11)这是例外我得到,任何人请帮助我如何转换4个整数,以获得双值。
提前谢谢。
发布于 2018-11-14 07:00:58
根据文档
将byte8二进制双值转换为双原语。
它显式地指定一个长度为8的字节数组,您的数组只有4个字节。
似乎你们的每个数字实际上不是一个字节。它们超出了范围-127~128。每个数字可能是两个字节的总和。您可能需要首先将每个字节分割成两个字节,而不是盲目地将它们转换为byte。
给定一个数字x占用2个字节,下面是如何用移位和掩码分隔这些字节:
byte firstByte = (byte)(x >> 8);
byte secondByte = (byte)(x & 0xff);对所有的数字都这样做,总共可以得到8个字节。
https://stackoverflow.com/questions/53294539
复制相似问题