Qt ModbusTCP和ModBusRTU读写数据

ModbusTCP和ModBusRTU 的区别

Modbus RTU 和 Modbus TCP 是 Modbus 协议的两种不同实现方式,主要区别如下:

  1. 通信介质

    Modbus RTU:基于串行通信(如 RS-232 或 RS-485),使用二进制编码传输数据。

    Modbus TCP:基于以太网,使用 TCP/IP 协议,数据通过以太网传输。

  2. 数据编码

    Modbus RTU:采用二进制编码,数据紧凑,传输效率高。

    Modbus TCP:数据封装在 TCP/IP 数据包中,增加了 IP 地址和端口号等信息。

  3. 传输速度

    Modbus RTU:速度受限于串行通信,通常较慢。

    Modbus TCP:基于以太网,速度更快,适合高速数据传输。

  4. 传输距离

    Modbus RTU:RS-485 最大传输距离约 1200 米。

    Modbus TCP:理论上无距离限制,实际受网络设备影响。

  5. 网络拓扑

    Modbus RTU:通常为总线型拓扑,设备串联。

    Modbus TCP:支持星型、树型等多种拓扑,设备通过交换机或路由器连接。

  6. 协议开销

    Modbus RTU:协议开销小,数据帧简单。

    Modbus TCP:协议开销较大,增加了 TCP/IP 包头。

  7. 应用场景

    Modbus RTU:适用于工业控制、传感器网络等低速、短距离场景。

    Modbus TCP:适用于需要高速、远距离通信的工业自动化系统。

  8. 设备成本

    Modbus RTU:设备成本较低,适合预算有限的项目。

    Modbus TCP:设备成本较高,但性能更强。

ModbusTCP

添加模块

在这里插入图片描述

ModBus读写

#ifndef WIDGET_H // 如果没有定义 WIDGET_H
#define WIDGET_H // 定义 WIDGET_H,防止重复包含

#include <QWidget> // 包含QWidget类的定义,QWidget是所有UI对象的基础类
#include <QModbusTcpClient> // 包含QModbusTcpClient类的定义,用于实现Modbus TCP协议的客户端

QT_BEGIN_NAMESPACE // 开始Qt命名空间
namespace Ui {
    class Widget; } // 声明一个名为Widget的类在Ui命名空间中,通常由Qt Designer生成的UI类
QT_END_NAMESPACE // 结束Qt命名空间

class Widget : public QWidget // 定义Widget类,继承自QWidget
{
   
    Q_OBJECT // 必须的宏,用于启用信号和槽机制

public:
    Widget(QWidget *parent = nullptr); // 构造函数,允许创建无父级窗口部件的对象,默认为nullptr
    ~Widget(); // 析构函数

    QModbusTcpClient *modbusClient; // 指向QModbusTcpClient类型的指针,用于管理与Modbus TCP服务器的连接

private slots: // 私有槽,用于处理特定事件或响应信号
    void on_ReadBtn_clicked(); // 当ReadBtn按钮被点击时调用的槽函数
    void ReceiveData(); // 接收数据的槽函数
    void on_WriteBtn_clicked(); // 当WriteBtn按钮被点击时调用的槽函数

private: // 私有成员变量和函数
    Ui::Widget *ui; // 指向Ui::Widget实例的指针,该实例包含了通过Qt Designer设计的UI元素
    bool isconnect; // 标志位,表示是否已经连接到Modbus TCP服务器
    void ReadValue(); // 读取值的私有函数
};

#endif // WIDGET_H // 结束WIDGET_H的条件编译指令
#include "widget.h"
#include "ui_widget.h"
#include <QModbusTcpClient>
#include <QModbusDataUnit>
#include <QModbusReply>
#include <QMessageBox>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
   
    ui->setupUi(this);

    modbusClient = new QModbusTcpClient(this);
    modbusClient->setConnectionParameter(QModbusDevice::NetworkPortParameter, 503); // 设置Modbus端口
    modbusClient->set
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值