摘 要:文章对如何在压裂作业中提高作业效率进行了研究,在压裂作业中,下位机AD采集到的信息,需要实时传输到上位机软件,以波形或者图像的方式展现在屏幕上;同时,上位机软件根据采集到的信息对操作进行调整,要发送相应的命令到下位机,下位机做出相应的采集调整,以便操作人员更好地操作压裂作业。因此,实际的工程应用对数据的采集系统和上位机接收数据和发送命令提出了更高的要求。根据此需求,提出了基于AD采集系统的压裂液摩阻测定软件设计。软件以QT为开发工具,达到上位机通过发送命令控制下位机和下位机发送数据到上位机并进行显示的目的,可应用于实验室、工业项目测试中。
关键词:下位机;上位机;QT;数据传输
中图分类号:TP311 文献标识码:A 文章编号:2096-4706(2024)14-0085-05
Design of Friction Measurement Software for Fracturing Fluid Based on QT
LI Xiaoning
(School of Electronic Information and Electrical Engineering, Yangtze University, Jingzhou 434023, China)
Abstract: This paper studies how to improve the operation efficiency in the fracturing operation. In the fracturing operation, the information collected by the lower computer AD needs to be transmitted to the upper computer software in real time and displayed on the screen in the form of waveform or image. At the same time, the upper computer software adjusts the operation according to the collected information, and sends the corresponding command to the lower computer, which makes the corresponding collection adjustment, so that the operator can operate the fracturing operation better. Therefore, the actual engineering application has higher requirements for the data acquisition system and the upper computer to receive data and send commands. According to this requirement, this paper puts forward the friction measurement software design of fracturing fluid based on AD acquisition system. The software uses QT as the development tool to achieve the purpose that the upper computer can control the lower computer by sending commands and and the lower computer can send data to the upper computer and display it. It can be used in laboratory and industrial project testing.
Keywords: lower computer; upper computer; QT; data transmission
DOI:10.19850/j.cnki.2096-4706.2024.14.017
0 引 言
近年来,随着压裂技术的逐渐进步,为了可以更好根据下位机AD采集到的数据更好的控制下位机的电机,加热等功能,对方便,实用的上位机的需求越来越迫切[1-4]。因此本文设计了针对AD采集系统的压裂液摩阻测定软件系统,以QT为开发软件,通过多线程,数据库,串口通信,通信算法,UI界面设计等完成了一个拥有实时显示AD采集数据,并实时绘图,将采集的数据处理并存入数据库并打印,可以下发命令控制下位机的软件系统[5-7]。达到了既可以实时显示采集的数据,并可以根据采集到的指标随时控制下位机的采集的目的[8-10]。
1 系统的开发与设计
1.1 系统的开发
系统采用C++进行编程,通过借助应用于开发图形用户界面的跨平台C++框架QT来编写并运行打包程序。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。经过多年发展,Qt不但拥有了完备的C++图形库,而且近年来的版本逐渐集成了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库,等等,其核心库也加入了进程间通信、多线程等模块,极大地丰富了Qt开发大规模复杂跨平台应用程序的能力。
1.2 系统的设计
本文介绍的针对AD采集系统的压裂液摩阻测定软件系统按照功能划分为四个模块:数据显示和控制命令模块,绘图模块,传感器控制模块,串口设置模块。每个模块都有其独立的UI界面并可以互相切换。每个模块有独立的事件函数,函数之间互相关联。此软件系统拥有以下功能:
1)可以通过USB串口与下位机进行连接,接收和发送数据。可以选择与下位机沟通对应的串口号,波特率,停止位,数据位,奇偶校验位等串口沟通的设置。详细描述为在此页面对连接的串口名称进行选择,对数据传输速率(波特率)进行设置,数据的格式(数据位,奇偶校验位)进行设置,根据下位机发送的数据类型,进行合理的设置和选择。
2)将串口接收到的数据放入缓存区中,将数据按照项目的要求,进行公式运算,实时显示在UI界面。让使用的工作人员更直观的了解到压裂采集系统的各个参数,和压裂系统的状态。
3)可以实时把串口数据存入数据库,并随时记录主页面工作人员填写的实验记录和数据,以数据流引入文件中,并打印成表格。
4)工作人员可以根据页面的按钮,例如:记录间隔、记录时间等按钮,随时控制数据每组存入数据库的时间间隔和数据数量,并将数据库内的数据在UI界面实时显示出来,可以让工作人员更为直观的看到。
5)可以根据要求,将下位机采集系统采集的数据经过项目的公式处理,实时绘制在UI界面,可以直观的观察看到数据的变化,并可以实时保存为图片放置在文件夹中。
6)工作人员可以根据数据的变化,使用功能按钮,生成对应的命令行,通过串口发送给下位机,达到对采集系统下位机的实时调控。例如:主页面可以对,模型管道的粗、细进行选择,循环、搅拌、加热、排液的开始和停止进行选择,对温度、转速设定一个合适的额定值,这些信息都可以通过串口发送特定的命令给下位机进行AD采集系统的控制。
7)可以显示压力传感器、压差传感器、温度传感器的示数,还可以通过按钮下发命令对下位机的传感器进行零点标定和量程标定。
2 软件设计
2.1 软件总体设计
软件中按照软件构成可分为七大部分:串口通信部分;绘图部分;传感器部分;数据显示部分;数据存入数据库部分;命令行部分;多线程部分。总体构成如图1所示。
在此软件设计中,要同时完成串口通信,页面绘图,传感器和主UI界面实时显示示数,数据库存入数据等功能同时进行且不能有数据丢失的情况发生,需要以多线程为大框架,将串口收发数据、UI界面按钮生成命令行、Qcustom plot绘图、数据库存入和导出数据,此四个比较耗时且占用CPU的功能分别放入单独的子线程中,在主线程中只保留对子线程任务的安排和UI界面触发子线程的方式与UI界面的示数更新。
多线程:是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。简单来说:线程是程序中一个单一的顺序控制流程;而多线程就是在单个程序中同时运行多个线程来完成不同的工作。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在同一时间需要完成多项任务的时候实现的。
多线程有以下优点:
1)多线程技术可以加快程序的运行速度,使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。
2)可以把占据长时间的程序中的任务放到后台去处理,同时执行其他操作,提高效率。
3)当前没有进行处理的任务时可以将处理器时间让给其他任务。
4)可以让同一个程序的不同部分并发执行,释放一些珍贵的资源如内存占用等。
5)可以随时停止任务。
6)可以分别设置各个任务的优先级以优化性能。
为了在上位机页面同时运行多个功能,且功能可以同时响应,多线程是上位机编程必不可少的。
在此文章设计的上位机中,我在主线程中主要完成了以下工作:完成了页面的UI元件的排版和格式设置,更新UI界面的示数;将串口收发数据、UI界面按钮生成命令行、Qcustom plot绘图、数据库存入和导出数据四个耗时长,CPU占用率高的四个功能,分别分配在四个子线程中,以槽函数触发的方式开始子线程和删除子线程,并在线程中加入线程锁,防止出现出现线程死锁的情况;通过槽函数实现子线程与主线程之间的通信与数据传递。
在子线程中完成了以下工作:接到主线程通过槽函数传输的数据,按照子线程的功能划分,高效的处理数据,数据处理完后,发送信号或数据至主线程,将占用的CPU让出来,使数据处理更加高效。
本文的多线程使用的继承QObject的多线程实现,默认就支持事件循环,是使用信号和槽函数开启,关闭多线程,使用信号和槽函数进行线程之间数据沟通,的最优解。
本文用C++实现多线程,部分关键代码如下:
//绘图自定义类的声明
worker0 = new my_task();//不能指定父对象
thread0 = new QThread(this);
worker0->moveToThread(thread0);
thread0->start();
//按键信号与槽函数的连接
connect(btndraw,SIGNAL(clicked(bool)),this,SLOT(on_btnDraw_clicked()));
connect(pushbutton,SIGNAL(clicked(bool)),this,SLOT(on_pushButton_clicked()));
//主线程与子线程之间信息的传递
connect(this,SIGNAL(startdraw0_signals(QCustomPlot*,QCPGraph*,QCPGraph* )),
worker0,SLOT(task_draw0(QCustomPlot*,QCPGraph*,QCPGraph* )));
connect(this,SIGNAL(filePath_signal(QString)),
worker0,SLOT(on_filePath_signal(QString)));
connect(worker0,SIGNAL(task_0_signals(QCustomPlot*)),this,SLOT(draw0_slot(QCustomPlot*)));
//子线程任务的结束
connect(this,&QWidget::destroyed,thread0,&QThread::deleteLater);
//主线程与子线程之间信息的传递
connect(worker0,SIGNAL(task_draw2End_signal
(QVector
QColor)),this,SLOT(draw2(QVector
//线程任务的开始与结束
connect(this,SIGNAL(startdrw2_signals()),worker0,
SLOT(task_draw2()));
connect(thread0,&QThread::finished,worker0,&QObject::deleteLater);
//串口子线程的定义
serialworker *serialWorker = new serialworker(&
serial_1);
serialWorker->moveToThread(&serialThread_1);
//连接信号和槽:线程的开始和结束,主线程与子线程之间的数据沟通
connect(&serialThread_1, &QThread::finished,
serialWorker, &QObject::deleteLater); // 线程结束,自动删除对象
connect(this, &Widget::serialDataSend,
serialWorker, &serialworker::doDataSendWork); // 主线程串口数据发送的信号
connect(&serial_1, &QSerialPort::readyRead,
serialWorker, &serialworker::doDataReciveWork); // 主线程通知子线程接收数据的信号
connect(serialWorker, &serialworker::
sendResultToGui,
this, &Widget::handleResults); // 主线程收到数据结果的信号
// 开始运行子线程
serialThread_1.start();
2.2 软件功能
在此部分,根据UI界面分类,将上位机软件分为:串口通信部分,绘图波形部分,传感器示数与设置部分,数据显示与记录部分,通信命令控制部分五大部分,根据UI界面进行功能上的具体介绍。
2.2.1 串口通信设计
串口通信设计分为三个部分:串口数据参数的设置与连接,串口数据的接收,串口数据的发送。上位机软件通过USB串口与下位机通信,达到数据双向传输的目的。在串口数据参数的设置与连接部分,软件将电脑已经识别的串口放在下拉列表中,方便选择正确的串口号;并根据传输的数据类型和数据传输的速度,选择合适的波特率,停止位,数据位,奇偶校验位。在USB数据的接收部分,由于USB串口在数据传输过程中会有数据的丢失,下位机在给上位机发送数据时,在每组数据的开头和结尾设置标志位。软件在接收到数据时,设置一块临时储存区域用作数据缓冲区,每次接收到数据,先将数据存放在缓冲区内,只有识别到数据的开头标志位和结尾标志位,将这段数据截取出来,并判断这段数据不为空,截取这段数据内的一组完整数据,将这段数据通过验证位验证数据的正确性,然后将接收到的数据分解,处理。在串口发送命令部分,每当功能控制按钮状态发生改变,都会生成一个全新的命令,每当一个新的命令生成,命令都会通过USB串口发送到下位机。
如图2串口页面所示,根据串口连接选择串口号为COM2,波特率为115 200,停止位为1,数据位为6,没有奇偶校验,打开串口,当打开串口成功,打开串口键会变为关闭串口键,方便下次操作。下面的start键和stop按下会控制串口传输数据的开始和停止。
2.2.2 绘图波形设计
在串口接收到的数据,经过处理得到AD采集得到的数据。将采集到的数据经过处理得到绘图所需的数据,绘图界面采用QCustomPlot图库进行绘制(如图3绘图页面所示)。可以实时的将串口内接收的数据以图像绘制在UI界面上,并且还以随时保存图像以便进行历史数据查询。采集到的数据还会存储在数据库内,数据库内的数据会显示在UI界面上,以便使用者更加方面的查看数据,同时数据库内的数据表格也可以随时保存为表格。
在图3中,页面左侧为记录在数据库中的数据(id,系统时间、实验时间、流量、剪切速率等),页面右侧为功能需要绘图的数据,分别为以时间为x轴,摩阻值为y轴的上图,以时间为x轴,减阻率为y轴的中图,以流量为x轴,减阻率为y轴的下图。
2.2.3 传感器示数与设置设计
如图4所示,经过处理后得到的传感器数据会实时显示在传感器的UI界面上,同时可以通过按钮发送特定的命令给下位机,对传感器的零点、量程进行标定。
2.2.4 数据显示与记录设计
如图5所示,经过处理后得到的数据(流量,压力,差压),实时显示在UI界面对应的元件上。UI界面背景对应项目的要求,每当串口接收到新的数据,UI界面的数据都会更新,以便实时监测下位机的数据。
2.3 通信命令控制设计
UI界面的右侧为通信命令控制按钮,在基础数据部分将实验名称、流体名称、实验编号、流体粘度、流体浓度、实验人员、实验日期等信息录入,当锁定键按下时存入数据库并生成表格存入电脑。在实验设定部分可以设置每次流量、压力、压差等数据信息录入数据库的时间间隔和总共录入的时间,记录实验管道的管径。当操作人员填入了确定的数据后,再按下开始记录按钮,数据库按照记录间隔,每10 s录入一个数据,一共录入5分钟。在控制选项部分,每一个按钮,例如:排液的开始、停止、流量设定、开始循环、停止循环,等等,每个按钮的变化都会对改变串口向下位机传输的命令。
3 结 论
本文采用QT软件设计了基于QT的压裂液摩阻测定软件设计,在软件中完成了USB串口的数据传输、数据库数据的储存、绘制数据的实时图像、UI界面的设计及数据的实时显示等功能。完成了配置串口连接,在软件主界面中通过控制按钮配置相关控制命令,并通过USB串口向下传输至下位机,数据库采集系统根据命令做出相应反应,达到了通过上位机软件下发的指令控制数据采集系统工作状态的预期效果。同时,上位机软件一直接收采集系统发送的数据,并将数据实时显示、绘图并储存。在更好的记录了采集的数据的同时,还能让操作人根据数据的变化,随时在上位机发送命令对采集系统进行操作调整,让AD采集系统的操作更加方便、快捷。
此软件设计以多线程为设计框架,大大提高的CPU的使用效率,有效的避免了系统功能不能及时响应的缺陷,达到了多功能同时运行相应的目的,大大提高了采集系统的效率。
参考文献:
[1] 李琳琳,王纪奎,赵捷.基于Qt设计心电信号管理系统 [J].电子技术,2015,44(4):49-52.
[2] 严海玉,杨会成,宋一博,等.基于ARM的非接触式安全驾驶预警系统 [J].电子技术,2014,43(9):70-73.
[3] 李章兵,李俊,谷文彦.基于优先级调度策略的应急照明监控系统 [J].电子技术,2014,43(5):48-52.
[4] 澹台运龙,李俊,李卓.基于ARM的应急电源集成监控系统设计与实现 [J].电子技术,2013,42(8):58-60+54.
[5] 陈冬灵.基于QT和Wi-Fi的室内环境检测系统设计 [J].信息技术与信息化,2019(11):22-25.
[6] 蒋昕祎,辜鹏,顾少华,等.基于Qt框架的信息接口模拟器的开发及应用 [J].软件,2023,44(1):113-115.
[7] 谈聪,董添奇.基于超声流量计的动态阻抗匹配系统设计 [J].信息技术与信息化,2023(1):54-57.
[8] 李金科,宋洁.基于数据采集系统的上位机软件设计 [J].信息技术与信息化,2022(5):110-112+116.
[9] 刘宏伟.基于Qt的多通道振动信号采集仪上位机软件设计 [J].现代信息科技,2023,7(3):24-28+32.
[10] 王属灵,宋磊,张一嘉,等.基于Qt的通信信号分析软件的设计与实现 [J].航天电子对抗,2023,39(3):26-32.
作者简介:李小宁(1999.09—),男,汉族,河北保定人,硕士在读,研究方向:嵌入式软件开发。
收稿日期:2024-01-04