plc鍜岀數鑴戠敤modbus閫氳妗堜緥 (鍙拌揪plc鎺ユ敹鐨刴odbus濡備綍杞崲)

modbus协议怎样读取PLC双字16进制浮点数将其转化为十进制?

其实与MODBUS无关,是把两个字的单精度浮点,转换成REAL DOUBLE,其实就是类型的转换.

1》首先确认标注:按照国际标准IEEE 754来的

2》确认字节的前低方式,这个很关键。

方法一:输入参数P1,P2代表PLC中浮点数储存的两个寄存器获取的数据

public static float GetFloat(ushort P1, ushort P2)
        {
            int intSign, intSignRest, intExponent, intExponentRest;
            float faResult, faDigit;
            intSign = P1 / 32768;
            intSignRest = P1 % 32768;
            intExponent = intSignRest / 128;
            intExponentRest = intSignRest % 128;
            faDigit = (float)(intExponentRest * 65536 + P2) / 8388608;
            faResult = (float)Math.Pow(-1, intSign) * (float)Math.Pow(2, intExponent - 127) * (faDigit + 1);
            return faResult;
        }

方法二:bitConveter

string strReceive=string.Empty; //float a = 0.123456f;

float a = 360.0f;

byte[] bytetest =BitConverter.GetBytes(a);

int bytelen = bytetest.Length;

for(int i=0;i<bytelen;i++)

{ string str = Convert.ToString(bytetest[i], 16);

strReceive += str + " "; }

MessageBox.Show(strReceive);

float f=BitConverter.ToSingle(bytetest,0);

MessageBox.Show(f.ToString());

问题汇总:

PLC跟仪表通讯,读回来两个字,17256和11090,怎么转换成一个32位浮点数,结果是两百多付的电压_ : 17256,11090转化为16进制数为16#43682B52,转换为浮点数大概231.16922V计算公式就是将十进制数转换为16进制数,然后转换而2进制,根据浮点数数据格式进行逆向的运算.?