赞
踩
这个系列文章的主要目的还是要记录我熟悉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.csdn.net/download/haohaoganhuo/85626098
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。