当前位置: 首页 > 网络知识

ModBus协议原理、Modbus Slave以及基于C++和Qt的代码实现

时间:2026-01-29 09:26:06

ModBus 协议目的:

  规定与PLC交互的指令,其数据帧包括两部分:报文头(MBAP)和帧结构(PDU)。

  报文头(MBAP)(分为6个部分):

帧结构(PDU)(主要是将上面的报文头进行举例)

需要注意的是:十六进制的两位比如FF(255)就是一个字节,而四位比如FFFF(65535)则占两个字节。

软件仿真

  软件介绍:Modbus Slave是模拟Modbus协议从机的上位机软件。该软件内部封装标准Modbus协议栈,通过图形化界面使得操作更为简便。与之成套存在的另一个软件Modbus Poll则是一个模拟Modbus协议主机的上位机软件,主要用于模拟测试跟其他从机设备通信的过程。目前软件支持01、02、03、04、05、06、15、16功能码,异常报文检测,原始报文查看,数据记录等功能,是调试Modbus协议栈的好帮手。

使用:

1. 首先点击Connection连接PLC,这里我们选择TCP/IP协议(注:选择"Serial Port",表示当前是用串口通信,如果使用的是Modbus/TCP,则选择“TCP/IP”)。

2. 点击Setup的Slave Definition,可以设置如下参数:Slave ID:可以配置从机地址。Function:可以配置功能码。Address:可以配置读/写的寄存器/线圈起始地址。Quantity:可以配置读/写的寄存器/线圈个数。Scan Rate:可以配置帧的扫描周期。Rows:可以选择该窗口一列可以显示多少行,数字是对应的行数,最后一个选项"Fit to Quantity"是可以根据前面设置的"Quantity"数量自动匹配行数。Hide Alias Columns:可以选择是否隐藏"Alias"列。PLC Addresses(Base 1):可以选择通信的首地址是从0开始还是从nX开始。

3. 双击数据的位置,可快速调出编辑写指令的窗口,输入需要修改的数值,点击OK,即可完成一次写入。此外,右键可以修改显示的数据类型。

4. 最后,关于界面的状态显示:ID:表示当前窗口通信的从机地址(Slave ID);F:表示当前窗口的功能码(Function);No Connection等红字:表示当前窗口的异常通信状态。
Qt 5.13.2的实现,以TCP为例:

1. 在pro文件中添加:QT += serialbus
2. 引入头文件:#include <QModbusTcpClient> 注意:软件是客户端,PLC是服务端,这个得搞清楚
3. .h文件代码:

1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QModbusTcpClient> // 软件是客户端,PLC是服务端,这个得搞清楚 6 namespace Ui 9 10 class MainWindow : public QMainWindow 11 ; 27 28 #endif // MAINWINDOW_H

4. pp文件代码(有注释):

1 #include "mainwindoh" 2 #include "ui_mainwindoh" 3 #include <QDebug> 4 MainWindow::MainWindow(QWidget *parent) : 5 QMainWindow(parent), 6 ui(new Ui::MainWindow) 7 14 15 MainWindow::~MainWindow() 16 21 delete ui; 22 } 23 24 void MainWindow::on_pushButton_clicked() // 读 25 35 reply>deleteLater(); // 针对广播消息 36 } 37 } 38 39 void MainWindow::on_pushButton_2_clicked() // 写 40 52 } 53 54 void MainWindow::replyData() // 处理读的数据 55 69 ui>lineEdit>setText(s); 70 //ui>lineEdit>setText(QString::number(unit.value(0))); 71 } 72 } 73 }

5. 运行效果,可以看到在Modbus Slave的帮助下,能够正确读写寄存器。



上一篇:Cognex InSight 软件的安装与软件激活方式分享
下一篇:Qt QDateTime类型加减计算
Qt Modbus
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素