基于VC++的油井环境参数显示系统
2013-04-25简秦勤范俊峰刘嘉宁
简秦勤,范俊峰,刘嘉宁
(西安电子科技大学 电子工程学院,陕西 西安710071)
油田的勘探、钻井、测井等都是野外作业,流动性强、作业点多、传输距离远,施工现场与公司之间的信息交流具有重要意义。为监测油井的环境信息,设计了一个油井环境参数采集和显示系统,系统框图如图1所示。井下数据采集模块负责采集油井的环境参数信息,通过电力载波线将数据上传至井上ARM板数据接收模块中,完成了数据的采集和传输功能,但是工作人员并不能读取采集的数据。基于此,设计了一个基于VC++的上位机显示系统,本系统可以直观地显示ARM板中存放的油井环境参数信息。
油井环境参数显示系统就是利用面向对象思想编写一个上位机软件,将ARM板中的数据转存到电脑中并以曲线的形式动态显示,这样既满足了工作人员日后查看数据的需要,也可以根据曲线走势了解油井环境的变化情况。
图1 油井环境参数采集显示系统框图
1 系统功能
在开采过程中,需要对油井的温度、压力等参数进行测量,以监控采油过程。利用驱动电机的电力线进行井下数据采集和通信,不仅减少额外的通信设备,降低钻井的设计体积,而且能够节约成本,实现高效利用。
对油井的环境参数采集之后,通过电力线上传到ARM板中,完成了数据的采集和保存功能,但工作人员却无法读取数据,并没有实现监测的功能。文中采用Visual C++面向对象方法[1-2]设计一个上位机软件,实现对油井环境参数的接收和显示功能。
2 系统设计
上位机显示系统主要由接收和显示两个模块组成。其系统流程如图2所示,软件界面如图3所示。其中“选择连接方式”、“建立连接,接收数据”两部分属于接收模块,“显示数据”属于显示模块。
显示模块可以调整显示速率,显示区间,点击“暂停”键后可以通过鼠标点击曲线获得该点的数值和时间。通过选择起始时间和截止时间还可以对一段时间内的数据进行局部放大。
为增强软件使用的灵活性,接收模块和显示模块既可以共同使用,也可以独立使用。两个模块独立使用时可以使用两者之一的任一种功能。若用户只需要保存数据可以仅使用接收模块的功能,将ARM板中的数据转到电脑中。电脑中保存的数据是以一定格式存储的,方便日后查看。若用户想观测电脑中已有数据可以使用显示模块的功能,通过选择指定的文件以曲线的形式观测数据的变化情况。
图2 系统流程图
图3 软件界面
3 系统实现
3.1 接收模块
为同ARM板建立稳定的连接,保证数据准确传输,同时也为了提供更加灵活的通信模式,使整个系统更加稳定、灵活,接收模块提供了3种通信方式:网络通信[3-4]、串口通信[4]、USB通信。通信方式由用户根据实际情况在界面上自由选择选择。
3.1.1 网络通信
网络通信具有可靠性高、稳定性强的特点,还可以达到较高的数据吞吐率。当用户选择采用网络通信的方式时,首先需要用一根网线将上位机与ARM板连接,然后在软件界面上选择“网口”的连接方式,这样就可采用网络通信的方式与ARM板建立连接,操作简单易行。
选择“网口”的连接方式之后,“串口”、“USB”两种连接方式变灰,不可选。点击“开始”按钮,数据开始传输,当数据接收成功后会弹出“数据接收完毕”的提示,如图4所示。
图4 网络通信
上位机软件作为客户端,主动与ARM开发板装载的Linux服务器系统建立连接,为保证传输的可靠性采用TCP连接,连接成功之后开始约定的“3次握手”协议,如图5所示。
图5 “3次握手”协议
“3次握手”协议保证了通信的畅通,此后开始接收ARM板中的数据。网络通信采用的是上位机每接收2 000 Byte的数据向ARM板发送“transmit”指令,ARM收到指令后才会再次发送2 000 Byte的数据直至全部发送完毕,此时ARM板向上位机发送“over”指令表示通信结束。
网络通信采用多线程的方式与服务器端建立连接,接收数据。主要用到4个静态函数:threadClient、threadRecvData、threadSendData和threadAnalyData。(1)threadClient:客户端线程,与服务器端(ARM板)建立连接。(2)threadRecvData:接收消息线程,接收服务器端(ARM板)发送的数据信息。(3)threadSendData:发送消息线程,每发送完一条消息,该线程自动结束。(4)threadAnalyData:消息解析线程,解析接收服务器端(ARM板)发送的数据信息并以一定的格式保存到电脑中。
3.1.2 串口通信
串口是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,适用于远距离通信,但传送速度较慢,多用于工控和测量设备以及部分通信设备中。用户选择串口通信时,首先用串口线将上位机与ARM板连接,然后选择上位机软件中的串口连接方式。在弹出的串口配置框中对串口进行配置,包括波特率、数据位和停止位,配置完成之后双方可以依照相同的配置进行串口通信,实现数据的传递和交换。
选择“串口”之后,“网口”、“USB”选项变灰不可选,点击“开始”按钮,开始接收数据,当接收数据成功之后同样会提示“数据接收完毕”,如图6所示。
图6 串口通信
对串口进行初始化配置后,进行图5所示的“3次握手”协议,在这之后进行数据的传输。与网络通信的不同之处在于,进行“3次握手”之后串口可以一次性接收ARM板中的全部数据,中途不需要向ARM板发送“transmit”指令。当数据接收完毕后,ARM板同样会向上位机发送一个“over”指令。
串口通信同样采用多线程方式,在对串口进行初始化配置之后采用StartMonitoring函数监听串口的数据情况。有数据到来时采用OnSerialCommu函数解析处理数据。串口通信主要采用CSerialPort类,该类对串口的相关操作进行了封装,方便了后续的调用。CSerialPort类中比较重要的几个方法:(1)InitPort:串口初始化函数,对串口进行初始化配置,与ARM板上的串口配置要保持一致。(2)StartMonitoring:开启线程,监听串口的数据情况。(3)WriteToPort:采用函数重载的方式定义了4个同名函数,功能都是向串口写数据。(4)CommThread:静态函数,监听串口的数据情况。(5)StopMonitoring:退出线程。
3.1.3 USB通信
USB即通用串行总线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,是一种高速总线,可以实现大量数据的高速传输。系统中的USB通信是与上述两种截然不同的通信方式:将U盘插入开发板后,开发板上的Linux系统会自动检测到U盘的插入,从而将油井的环境参数文件拷贝至U盘中,再将U盘与电脑连接,在软件界面上选择“USB”的连接方式之后,通过文件操作读取并解析U盘中的油井参数数据文件。
USB通信实质就是文件读取操作,主要用到StartUSB函数。StartUSB函数具有文件打开、文件读取、数据解析、数据保存、文件关闭这些功能。用户选择“USB”的连接方式后,“网口”、“串口”变灰,成为不可选状态。点击“确定”按钮选中待读取的数据文件,点击“开始”按钮进行数据的解析、存储。当数据接收完毕之后,同样会弹出对话框提示,如图7所示。
图7 USB通信
3.2 显示模块
显示模块主要负责解析和处理油井的环境参数,并将处理后的数据以曲线的形式直观地显示出来。油井参数包含4个数据信息,分别在4个方框中显示,如图8所示。
图8 数据显示结果
显示模块将保存的数据以曲线的形式在界面上进行显示,可根据需求对曲线的显示速率进行调整。由曲线的走势可以准确、直观地观测数据的变化情况。点击“暂停”键在曲线静止时可以获得鼠标点击处的数值和时间,这样对于问题区域可以了解其发生时间,这对于油井观测具有很重要意义。
显示模块用CHistogramCtrl类实现,是从MFC类库中的CWnd类继承来的。CHistogramCtrl类可以动态显示给定的数据点,这样数据点的个数就不会受到屏幕大小的限制。CHistogramCtrl类中比较重要的方法如下:(1)Create:创建绘图区。(2)SetRange:设置绘图区域点的显示范围。(3)SetPos:对待显示的点进行相应的转换。(4)SetSpeed:设置曲线的显示速率。(5)DrawLine:画图函数。(6)OnTimer:调用DrawLine函数,使曲线按一定的速率动态显示。
数据显示时,为得到鼠标点击处的数值和时间采用了CList链表类,创建了4个CList的指针对象*m_pList1、*m_pList2、*m_pList3、*m_pList4。4个CList指针对象均指向一定长度的队列,队列的长度是界面最多所能显示的点数。当队列长度达到最大值时,在队列一端进行出队操作,另一端进行入队操作,两端同时进行。这样通过对鼠标点击处的屏幕坐标进行相应的转换即可得到当前点在队列中的位置,找到该位置的数值即可得到鼠标点击处的数据和时间值。
4 结束语
油井上位机显示系统对于油井参数的观测具有重要的意义,它大幅减轻了油井工作人员的工作强度。采用上位机显示系统将ARM板中的数据以一定的格式存储在电脑中并加以显示,一方面可以直观地观测数据的变化情况,另一方面将数据保存在电脑中也方便了日后的查看。系统采用将数据和操作封装面向对象思想,使系统的开发具有灵活性、可靠性和可扩充性。在系统运行过程中,会及时给出各种操作的提示或对错误操作的警告,使用户操作更加便捷。软件界面美观、操作简单,可操作性强。
[1] 孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2006.
[2] 侯俊杰.深入浅出MFC[M].2版.武汉:华中科技大学出版社,2001.
[3]STEVENS W R,FENNER B,ANDREW M R.Unix网络编程[M].3版.北京:电子工业出版社,2010.
[4] 王险峰,刘宝宏.Windows环境下的多线程编程原理与应用[M].北京:清华大学出版社,2002.