package com; import java.text.DecimalFormat; public class test { public static void main(String[] args) { // TODO Auto-generated method stub String str=""; str="60004133"; System.out.println("point_102 蒸汽压力:"+getDoubleByHexstr(str)); /*str="D1, EC, 43, 6C"; System.out.println("point_103 汽包液位:"+getDoubleByHexstr(str)); str="2A, B4, 40, E7"; System.out.println("point_104 蒸汽流量:"+getDoubleByHexstr(str)); str="71, 9A, 41, 18"; System.out.println("point_105 给水流量:"+getDoubleByHexstr(str)); str="98, 00, 44, 2D"; System.out.println("point_106 炉膛温度:"+getDoubleByHexstr(str)); str="00, 00, 43, 01"; System.out.println("point_107 1#给料温度:"+getDoubleByHexstr(str)); str="99, 9A, 43, 33"; System.out.println("point_108 2#给料温度:"+getDoubleByHexstr(str)); str="E6, 66, 43, 14"; System.out.println("point_118 2#给料温度:"+getDoubleByHexstr(str)); str="33, 33, 42, F4"; System.out.println("point_119 一次风温度:"+getDoubleByHexstr(str)); str="00, 00, 42, C8"; System.out.println("point_120 空预器出口温度:"+getDoubleByHexstr(str)); str="00, 00, 00, 00"; System.out.println("point_121 布袋进口温度:"+getDoubleByHexstr(str)); str="00, 00, 00, 00"; System.out.println("point_122 排烟温度:"+getDoubleByHexstr(str)); str="00, 00, 00, 00"; System.out.println("point_123 给水调节阀开度:"+getDoubleByHexstr(str));*/ //System.out.println(getDoubleByHexstr(str)); } /** * modbus 返回的四字节的浮点数转换<br> * hexstr = "AE 14 41 43";原始串 */ public static Double getDoubleByHexstr(String hexstr) { //String[] hexarray = hexstr.split(", "); // 高地位互换 //hexstr = hexarray[2] + hexarray[3] + hexarray[0] + hexarray[1]; hexstr=hexstr.substring(4, 6)+hexstr.substring(6, 8)+hexstr.substring(0, 2)+hexstr.substring(2, 4); System.out.println(hexstr); // System.out.println( hexstr ); // 先将16进制数转成二进制数0 10000001 00000000000000000000000 <br> String binarystr = hexString2binaryString(hexstr); // 1位符号位(SIGN)=0 表示正数 String sign = binarystr.substring(0, 1); // 8位指数位(EXPONENT)=10000001=129[10进制] String exponent = binarystr.substring(1, 9); int expint = Integer.parseInt(exponent, 2); // 23位尾数位(MANTISSA)=00000000000000000000000 String last = binarystr.substring(9); // 小数点移动位数 int mobit = expint - 127; // 小数点右移18位后得10101001 01101001 110.00000 StringBuffer sb = new StringBuffer(); for (int i = 0; i < 23; i++) { if (i == mobit) sb.append("."); char b = last.charAt(i); sb.append(b); } String valstr = "1" + sb.toString(); int s = valstr.indexOf(".") - 1;// 指数 Double dval = 0d; for (int i = 0; i < valstr.length(); i++) { if (valstr.charAt(i) == '.') continue; Double d = Math.pow(2, s); int f = Integer.valueOf(valstr.charAt(i) + ""); // System.out.println( f ); d = d * f; // System.out.println( "c:=" + valstr.charAt( i ) + ",s=" + s + // ",val=" + d + ", Math.pow( 2, s )=" + Math.pow( 2, s ) ); s = s - 1; dval = dval + d; } if (sign.equals("1")) dval = 0 - dval; return round(dval); } public static String hexString2binaryString(String hexString) { if (hexString == null || hexString.length() % 2 != 0) return null; String bString = "", tmp; for (int i = 0; i < hexString.length(); i++) { tmp = "0000" + Integer.toBinaryString(Integer.parseInt(hexString.substring(i, i + 1), 16)); bString += tmp.substring(tmp.length() - 4); } return bString; } public static Double round(double dt){ DecimalFormat df=new DecimalFormat(".####"); String strdt=df.format(dt); return Double.parseDouble(strdt); } }
相关推荐
MODBUS RTU协议中浮点数的相互转换 从浮点数到整形,以及从整形到浮点数 带简单的协议说明文档
labview浮点数读取,可以通过modbus通信直接读写浮点数。
16位转浮点型float,MODBUS 32位转浮点型float 64位转双浮点型double
S7-200SMART 64位浮点数转32位浮点数(源文件+库文件+程序注释),double to float
MODBUS工具安装包 JAVA modbud tcp协议解析工具
S7-200SMART 64位浮点数转换为32位浮点数指令库文件Double_to_Float
文档里x1 x2 为读取到浮点数的2个16位寄存器整型数据,返回值就是所需要的浮点数
C++ Qt modbus RTU 485读写线圈、整数、浮点数
西门子SMART PLC 64位浮点数转32位浮点数、LREAL_TO_RELA 通信数据处理 64位浮点数Double 32位浮点数Float 、完整代码注释,详细算法介绍有相关博客介绍 移位指令完成64位浮点数转32位浮点数 转换功能块,直接调用、...
labview Modbus 读取64位浮点数
基于Delphi编写的IEEE32位浮点数转换工具,可由浮点数转换为十六进制数,也可以由十六进制数转换为浮点数。
本文档简介了TMS320C3x浮点数简介、IEEE754的32位转VC33的32位浮点数算法、IEEE754的64位浮点数转VC33的40位浮点数算法;给相关TI的DSP开发工程师提供开发参考。
用C#写的32位浮点数转换成十进制小数程序。输入32位二进制数如01000000000000000000000000000000
单精度浮点数转Modbus协议十六进制格式,使用modbus协议传输浮点数时,需要根据modbus协议中浮点数的存储规则,对signal数据进行转换成二进制,再转换成十六进制。
实现浮点数解析的LABVIEW程序,labview实现该功能较麻烦。直接调用本程序,无需考虑繁琐的计算。
在软件和单片机程序通讯过程中浮点数的位数不同导致的数据问题通常很令人头疼,今天有空整理了一段代码,其中十进制到2进制/16进制转化部分借鉴前辈的内容,32位到16位的内容是自己写的部分,有什么问题大家多多指教...
Modbus IEEE754 浮点数 转换 方法 VB 代码 使用VB6把MODBUS协议中的32位整数,变换为浮点数 MODBUS协议 数据 转换 IEEE754 Float Long
C# IEEE754转换32位浮点数为10进制数 电力仪表RS485专用
用于将Modbus通信中感应器返回的数据截取后的数据处理成浮点数,目前只弄了四字节的十六进制数转换为单精度浮点数。
labview_32位单精度浮点数转定点小数,亲测可用(Own use labview to build 32-bit single precision floating point decimal turn, pro-test available)