QModbusTcpClient接收值转为浮点数的方法

    科技2024-07-03  80

    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

     


    备注:实战示例,解疑答惑。

               --不间端地思考,实时地批判你的工作!

     

     

    Processed: 0.026, SQL: 8