首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Modbus TCP的Java编程将4个整数寄存器转换为双值

基于Modbus TCP的Java编程将4个整数寄存器转换为双值
EN

Stack Overflow用户
提问于 2018-11-14 06:48:20
回答 1查看 405关注 0票数 1

使用java编程,在Modbusu举(Jmod) jar的帮助下,我开发了一个代码,它将通过Modbus连接到PLC。在这里,我需要将4个输入寄存器转换为双值。假设寄存器是(16870,24900,1588,30492),如果我转换它,我应该得到类似于3003782.9651476783的值。因此,对于转换,我使用了库提供的方法,下面是代码,

代码语言:javascript
复制
byte[] bytes = {(byte) 16870,(byte) 24895,(byte) -32348,(byte) 617};
            double value = ModbusUtil.registersToDouble(bytes);
            System.out.println(value);

这里我使用了ModbusUtil.registersToDouble(bytearray[])方法,并作为参数im给出字节数组。但这不管用,我有例外,

代码语言:javascript
复制
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个整数,以获得双值。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 07:00:58

根据文档

将byte8二进制双值转换为双原语。

它显式地指定一个长度为8的字节数组,您的数组只有4个字节。

似乎你们的每个数字实际上不是一个字节。它们超出了范围-127~128。每个数字可能是两个字节的总和。您可能需要首先将每个字节分割成两个字节,而不是盲目地将它们转换为byte

给定一个数字x占用2个字节,下面是如何用移位和掩码分隔这些字节:

代码语言:javascript
复制
byte firstByte = (byte)(x >> 8);
byte secondByte = (byte)(x & 0xff);

对所有的数字都这样做,总共可以得到8个字节。

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

https://stackoverflow.com/questions/53294539

复制
相关文章

相似问题

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