Qt 中TCP/Modebus通讯带符号浮点数Qbytearray相互转化

本文讲述了在工业应用中,如何将带符号浮点数转换为Qbytearray,用于TCP/Modebus协议的数据传输,包括取绝对值、十六进制化、修改符号位等步骤,并解释了逆向转换的过程。
摘要由CSDN通过智能技术生成

带符号浮点数Qbytearray相互转化

 在工业应用中,数据传输十分常见,其中最常见是应用TCP/Modebus协议,将本地数据库中的数据传到其他地方,这里便涉及数据的转化,其中将带符号的浮点数转成指令传输给对方便是本文章的主要内容。
 我们知道,在qbytearray的数据解析中,浮点数float占据四个字节,其中最高位为符号位,那我们在传输过程中,先取其绝对值,转化为十六进制,再根据正负修改最高位,根据这个思路实现其代码。
 第一步,从数据库中取相应的数据
    QSqlQuery query(db);
    QString temSql = "SELECT currdata FROM current_data order by id";
    query.exec(temSql);
    while(query.next())
    {
        curr_data.append(query.value(0).toDouble());
    }

第二步,取绝对值,转化为十六进制

            float ss = fabs(curr_data.at(i));    //取绝对值
            uchar c[4];
            bool ok;

            int a = *((int *)&ss);
            QString float_str = QString("%1").arg(a,4,16,QLatin1Char('0'));
            QString str_spilt;

            qDebug() << float_str ;

            for(int j = 0;  j < 4; j++)
            {
                str_spilt = float_str.mid(j*2, 2);   //隔两个分割
                c[j] = str_spilt.toInt(&ok, 16);
            }

第三步,判断正负,修改最高位

if(curr_data.at(i) < 0)
   c[0] =(c[0] | 0x80);

最后,将uchar数组的值,赋给qbytearray,通过TCP 方式发出去即可。

最后将四字节的qbytearray转化成float

    quint32 data = quint32(byte0 << 24 | byte1 <<16 | byte2 <<8 | byte3 << 0);
    const float *f = reinterpret_cast<const float *>(&data);
    return *f;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 欧姆龙Modebus通讯功能块是一种用于控制系统通讯的设备。该功能块可以实现与不同设备的通讯,具有快速、可靠、实时的数据传输功能。在控制系统,欧姆龙Modebus通讯功能块可以扮演不同角色,如主机或从机。主机可以发送和接收控制命令、传感器数据等,从机则可以响应主机的请求并向主机返回所需要的数据。 欧姆龙Modebus通讯功能块广泛应用于能源、交通、自动化等行业。例如,欧姆龙Modebus通讯功能块可以在能源系统实现对电压、电流、功率等参数进行监测和控制。在交通控制系统,该功能块可以控制红绿灯、车道指示牌等。在自动化系统,欧姆龙Modebus通讯功能块可以协调各个设备之间的通讯,实现整个系统的自动化控制。 总之,欧姆龙Modebus通讯功能块是控制系统不可或缺的基础设备。其功能强大且易于操作,能够实现不同设备之间的快速通讯,为各个行业的自动化控制提供了坚实的技术支持。 ### 回答2: 欧姆龙是一家具有悠久历史和丰富技术积累的企业,该公司研发的Modebus通讯功能块则是用于工业控制系统的通信设备,可实现不同设备之间的数据交换。该设备采用Modbus协议,是一种应用广泛的工业控制通信协议,其特点是简单可靠,易于实现和维护。 欧姆龙Modebus通讯功能块采用了高效的通信机制,提高了通信速度和稳定性,对于工程项目而言可以降低设备的成本,减少设备的故障率,提高生产以及客户的满意度。此外,该设备还具备分布式控制的功能,通过集成控制器与可编程控制器配合使用,可以实现对不同的设备进行同时控制。 该功能块还具备自动识别模块、解析通信命令的功能,因此可以满足通信接口不兼容、协议不一致等问题,同时保证了数据传输的可靠性和稳定性。 在实际应用,欧姆龙Modebus通讯功能块可以广泛应用于工业自动化控制、智能制造、电力、水利、交通、建筑等领域,为企业的生产和管理提供了有效的技术支持。 ### 回答3: 欧姆龙的Modbus通讯功能块提供了一种可靠的广泛应用于工业控制领域的通讯方式。 Modbus通讯协议是一种传统的串行通讯协议,已经成为了业界的通用标准,应用非常广泛。欧姆龙的Modbus通讯功能块支持多种Modbus协议版本,包括Modbus RTU、Modbus ASCII和Modbus TCP。同时,欧姆龙还提供了多种通讯接口,包括串口、以太网口等,可以满足不同用户的通讯需求。 欧姆龙的Modbus通讯功能块提供了丰富的功能,包括读写寄存器、读写线圈、读写单个或多个离散输入等。此外,它还支持Modbus协议的广播通讯功能,可以同时向多个设备发送指令。这种功能在一些数据采集或监控的场合特别有用。 欧姆龙的Modbus通讯功能块还提供了多种错误处理机制,可以有效避免通讯故障和数据丢失。除此之外,还可以通过设置超时时间、重试次数等参数来进一步优化通讯性能。 总体来说,欧姆龙的Modbus通讯功能块是一种高效、可靠、灵活的通讯方式,可以广泛应用于各种工业控制领域,如自动化、物联网、能源管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值