ModbusTCP协议中读取浮点数的操作方法

首先膜拜大佬,感谢大佬造好的轮子,这里是原链接

最近在搞一个modbusTCP的通讯,我对modbus的了解基本停留在最最最简单的应用,突然一个读取浮点数的问题我就蒙圈了!!!,再此感谢大佬们!!!代码如下:

寄存器一般读到的是unsigned short,两个字节,float占两个寄存器,value1、value2对应两个寄存器的值。

float getFloat(unsigned short value1, unsigned short value2)
{
    int intSign, intSignRest, intExponent, intExponentRest;
    float faResult, faDigit;
    intSign = unit.value(32) / 32768;
    intSignRest = unit.value(32) % 32768;
    intExponent = intSignRest / 128;
    intExponentRest = intSignRest % 128;
    faDigit = (float)(intExponentRest * 65536 + unit.value(33)) / 8388608;
    faResult = (float)pow(-1, intSign) * (float)pow(2, intExponent - 127) * (faDigit + 1);
    return faResult;
}

C++/C 应该能直接用,记得包含

#include <math.h>

 

2018.1.16更新

又学了一种处理方式:

float getFloat(quint16 value1, quint16 value2)
{
    float fTemp;
    uint *pTemp=(uint *)&fTemp;
    unsigned int chTemp[4];//a,b,c,d
    chTemp[0]=value1&0xff;
    chTemp[1]=(value1>>8)&0xff;
    chTemp[2]=value2&0xff;
    chTemp[3]=(value2>>8)&0xff;
    //这是ABCD
    *pTemp=((chTemp[1]<<24)&0xff000000)|((chTemp[0]<<16)&0xff0000)|((chTemp[3]<<8)&0xff00)|(chTemp[2]&0xff);

    //这是CDAB
    //*pTemp=((chTemp[3]<<24)&0xff000000)|((chTemp[2]<<16)&0xff0000)|((chTemp[1]<<8)&0xff00)|(chTemp[0]&0xff);

    //这是BADC
    //*pTemp=((chTemp[0]<<24)&0xff000000)|((chTemp[1]<<16)&0xff0000)|((chTemp[2]<<8)&0xff00)|(chTemp[3]&0xff);

    //这是DCBA
    //*pTemp=((chTemp[2]<<24)&0xff000000)|((chTemp[3]<<16)&0xff0000)|((chTemp[0]<<8)&0xff00)|(chTemp[1]&0xff);
    return fTemp;
}

  • 14
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好!要使用Java读取Modbus TCP协议通信的数据,您可以使用Java Modbus Library。以下是一个简单的示例: 首先,您需要从以下网址下载Java Modbus Library:https://sourceforge.net/projects/jamod/files/jamod/1.2.1/ 然后,您可以使用以下代码示例读取Modbus TCP服务器上的数据: ```java import net.wimpi.modbus.Modbus; import net.wimpi.modbus.ModbusException; import net.wimpi.modbus.facade.ModbusTCPMaster; import net.wimpi.modbus.msg.ReadInputRegistersRequest; import net.wimpi.modbus.msg.ReadInputRegistersResponse; public class ModbusTCPReader { public static void main(String[] args) { try { // Create Modbus TCP master ModbusTCPMaster modbusMaster = new ModbusTCPMaster("192.168.1.1", Modbus.DEFAULT_PORT); // Connect to Modbus TCP server modbusMaster.connect(); // Read input register data from Modbus TCP server ReadInputRegistersRequest request = new ReadInputRegistersRequest(0, 10); ReadInputRegistersResponse response = (ReadInputRegistersResponse) modbusMaster.send(request); // Print input register data int[] data = response.getRegisters(); for (int i = 0; i < data.length; i++) { System.out.println("Input Register " + i + ": " + data[i]); } // Disconnect from Modbus TCP server modbusMaster.disconnect(); } catch (ModbusException e) { e.printStackTrace(); } } } ``` 请注意,上述代码的IP地址和端口号应该根据您的Modbus TCP服务器进行更改。 希望这可以帮助您开始使用Java读取Modbus TCP协议通信的数据!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值