QModbusTcpClient接收值转为浮点数的方法
// ModbusRTU格式的2个32位整数转浮点数,高位为x1,低位为x2
Float parseInt2Float(int x1, int x2) {
int f, fRest, exponent, exponentRest;
float value, weishu;
f = x1 / 32768;
fRest = x1 % 32768;
exponent = fRest / 128;
exponentRest = fRest % 128;
weishu = (float)(exponentRest * 65536 + x2) / 8388608;
value = (float)qPow(-1, f) * (float)qPow(2, exponent - 127) * (weishu + 1);
return value;
}
QModbusTcpClient接收数据处理的时候,一般方法是
const QModbusDataUnit unit = reply->result();
unit.value(0) 的值默认是无符号整数quint16,如果要取得浮点数,用上面函数如下操作:
float t1 = parseInt2Float(unit.value(1),unit.value(0));
//第二个字节在前
float t1 = parseInt2Float(14969,62470);
qDebug() << t1;
计算结果: 0.000953496
备注:实战示例,解疑答惑。
--不间端地思考,实时地批判你的工作!