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

您所在的位置:网站首页 信捷plcmodbusTCP也要轮询吗 ModbusTCP协议中读取浮点数的操作方法

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

2024-07-09 20:27| 来源: 网络整理| 查看: 265

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

最近在搞一个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

 

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]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3