使用QT编写MODBUS-TCP服务器与客户端程序

本文记录了使用QT编程实现MODBUS-TCP服务器和客户端的过程,重点介绍了设计思路和具体实现。服务器端设有256个保持寄存器,客户端可读写这些寄存器,通过QTableWidget展示数据,并用线程管理和锁保护共享资源。服务器和客户端界面包含表格和文本框,用于显示通信命令。提供源码供读者探索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这个系列文章的主要目的还是要记录我熟悉QT编程的一个过程,同时也可以让其他开始使用QT编程的人有一个参考,少走些弯路。基于以上目的,我就从我所擅长的工业数据采集入手,用QT编写一个和数据采集有关的程序。在工业数据采集领域,MODBUS是一种应用广泛的总线协议,非常适合应用在低速采集的领域,早期的MODBUS协议只支持串口,后来发展出基于以太网口的MODBUS-TCP协议,我最终要用QT实现的,就是一个MODBUS-TCP服务器,以及与之通讯的MODBUS-TCP客户端。协议相关资料请看
MODBUS-TCP协议简介与编程流程图
以及
MODBUS协议中文版带目录

设计思路

我的服务器目前有256个保持寄存器,它实际上是一个256元素的无符号16位整型数组,客户端可以使用0x3读保持寄存器和0x10写保持寄存器来访问它。以后如果想扩充其它数据类型,再扩充其他的功能码实现。
使用502端口建立TCP服务,一般modbus服务器都是运行在嵌入式系统上,资源有限,所以最多允许10个客户端保持连接,每个连接都要新建立一个线程,由于寄存器是共用的,因此需要加锁保护,同时只允许一个连接读写寄存器。
服务器端界面需要一个16*16的表格,显示256个保持寄存器的内容。还需要一个只读的文本框来显示接收到的命令和发送的命令。
客户端界面与服务器端界面类似,只是表格可以编辑。同样也有一个只读的文本框来显示接收到的命令和发送的命令。

服务器端程序设计

选择新建项目(New Project),然后选择Qt桌面应用(Qt Widgets Application),指定项目目录,项目名称设为mb_tcp_server,后续都用缺省设置,完成时应该如下图所示:
在这里插入图片描述

在项目管理器中双击mainwindow.ui,进入窗体编辑界面
在这里插入图片描述

在窗体界面中放入两个垂直布局控件(Vertical Layout),然后在上面的控件中放入Table View,下面的控件中放入Text Edit,在窗体上右键->布局->垂直布局,最后界面如下图所示:
在这里插入图片描述

我们只需要表格控件显示256个寄存器的数据就可以,所以使用QTableWidget就够了,在Tableview上右键->变形为->QTableWidget,这个控件简单易用,适合显示少量数据。在属性栏设置里面将rowCount和columnCount属性都设置成16,这样第一行对应0-15寄存器,第二行对应16-31……最后一行对应248-255,为方面查看,将行表头设置成00-0F,列表头设置成10-F0。最终界面如下所示:

在这里插入图片描述

操作说明

服务器菜单本来想添加一些设置功能,目前还没有完成,客户端菜单可以新建客户端,新建客户端后,可以进行收发程序的测试,可以新建两个客户端,这样可以看到在其中一个客户端修改了寄存器后,服务器端和另一个客户端的表格显示均会更新。下图简要写了一下程序的操作指导。
在这里插入图片描述

详细操作大家可以下载源码自行探索。
https://download.youkuaiyun.com/download/haohaoganhuo/85626098

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值