张守伟 臧德福 李泽田 黄玉科
(胜利油田博士后科研工作站1,山东 东营 257096;中石化胜利石油工程有限公司2,山东 东营 257096)
利用C#编程实现测井探头信号的记录
张守伟1臧德福2李泽田2黄玉科2
(胜利油田博士后科研工作站1,山东 东营 257096;中石化胜利石油工程有限公司2,山东 东营 257096)
为了配合电磁测井装置进行探头的发射和接收试验,开发测试软件,用于对实时测量数据进行绘图及存储。设计软件功能框图,并对串口通信、Access数据库操作、利用MSChart控件绘图等关键技术制定了编程方法,将关键技术加以整合,利用C#语言编制测试软件。通过与测井装置通信,测试软件实现了对探头发射电流、接收电压测量数据的实时观测,通过历史查询完成了对测量数据的分析及统计。
电磁测井装置 测试软件 串口通信 Access数据库 MSChart控件 C#语言
瞬变电磁测井的一大优势是[1],使用较低的工作频率、较大的发射功率来获得较大的穿透深度。近年来,瞬变电磁技术的探测范围逐步向套管外延伸,采用穿透套管进行管外电阻率的测量。这一方法称为瞬变电磁过套管电阻率测井法。国内对这种方法的相关理论研究还不完善,相关仪器还在研制。在瞬变电磁过套管测井仪器[2]研制前期,需要在试验室中搭建试验环境,设计电磁探头进行信号的发射和接收测试,了解套管井中电磁信号指数的衰减变化规律,为后期的仪器设计奠定基础。
软件的开发是为满足相应的应用需求,成型仪器一般都配有相应的应用软件。目前,用于地面探矿、煤矿矿井探测的瞬变电磁仪采用Visual C++、Visual Basic、LabVIEW、Matlab等语言进行研发编程[3],通过软件可以实现对测道数据的提取与测线剖面曲线图的成图等,完成反演及正演计算等功能。在前期试验阶段,为了更好地实现人机交互和数据分析,编制测试软件是不可缺少的一项重要开发工作。本测试软件是在Visual Studio 2010环境下利用C#语言开发,配合下位机(测井实验装置)进行测试。软件通过串口通信,获得探头发射电流及接收电动势的实时数据,完成对探头数据的实时记录及统计。
采取的方案是以计算机作为主机,硬件上具备通信串口,下位机(测井实验装置)是以单片机为核心的瞬变发射和信号采集系统,二者通信实现数据交换[4]。通过测试软件可实时显示测量数据,也可保存数据以供查询和后期分析,需要配置相应的数据库进行数据存储。在瞬变电磁理论中,测量的接收电动势早期信号反映浅层地质构造,晚期信号反映深部地质构造。根据此项观测需求,软件界面中的显示窗口能实时显示瞬变电磁早期、中期、中晚期以及晚期道的测量信号,便于试验过程中对所测试介质的电性特征进行动态分析。
结构化软件开发技术和面向对象软件开发技术已经成为测井软件开发最强有力的技术支撑,软件开发过程需要对编程平台与环境进行精心选择与定制。随着操作系统的升级,微软推出了新一代技术平台.NET,编程语言增加了C#等的新一代开发语言,开发的程序在操作系统具备Framework框架环境就可以正常运行。.NET平台使得编程开发变得更方便与简单[5]。本次开发基于64位Windows7系统、32位office 2010版本、32位Visual Studio 2010开发环境、Framework 4.0、用C#语言开发的软件框架。
通过对软件的应用需求进行分析,得出测试软件需具备以下主要功能:串口通信、数据存储、测井曲线绘图等。程序按照一定的定时时间执行,执行流程按照通信、绘图、数据库存储等步骤顺序进行。软件功能构成框图如图1所示。
图1 软件功能组成图
2.1 SerialPort类实现串口通信
现在大多数硬件设备采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍[6-7]。.NET Framework 2.0以上类库包含了SerialPort 类,在微软的Visual Studio 2010开发工具箱中把SerialPort图标拖到窗体界面中实现SerialPort类的添加。SerialPort 控件与Visual Studio 6.0中的MSComm通信控件差异不大,只要通过对SerialPort类控件的属性和事件进行相应编程操作,就可以轻松地实现串口通信。在属性中设置串口号(PortName方法)、波特率(BaudRate方法)、串口开启(Open方法)等。通信过程采用主从模式,发送过程调用Write和WriteLine方法发送数据,接收过程调用Read或ReadLine方法。通过对上述方法的正确编程,保证串口通信的成功性。
串口通信需要一定的速率,因此在接收过程数据时,从开始接收到接收完毕需要持续一定的时间。在程序量较小时,串口发送完毕后可采取延时一段时间后进行接收编程。该编程方法简单且后期程序修改更为方便。本测试软件功能相对较少,接收过程采用了延时等待。延时编程利用系统内核延时比线程延时效果好,相比之下内核延时编程实时性较强,软件中进行其他功能操作时反应较快。串口程序的执行过程如图2所示。
图2 串口程序执行过程示意图
编程过程先定义字节数组data1、data2,调用Write和Read方法,方法中程序编写按照一定的格式,如:byte[] butter, int offset, int count。串口发送完数据后延时200 ms,读出串口返回的数据。程序如下。
serialPort1.Write(data1.ToArray(), 0, data1.Length);
ms= 200;
uint start = GetTickCount();
while (GetTickCount() - start < ms)
{
Application.DoEvents();
}
serialPort1.Read(data2, 0, data2.Length);
2.2 MSChart控件进行曲线绘图
MSChart控件[8-9]已经内置于Visual Studio 2010开发环境中,并且只适用于.NET Framework 3.5以上版本。 MSChart控件具备与TeeChart控件一样强大的绘图功能,可以显示的图形有散点图、折线图、条形图等多种类型,界面美观。把工具箱里的Chart图标项拖到Form窗体中,调节放置位置及控件大小,然后在绘图属性需要进行更为详细的设置。设置内容包括图表集合属性、绘图样式、坐标轴格式等,属性窗口可视化设置减轻了后期编程强度。测试软件绘图利用MSChart控件,使用此控件编程最大的优势是编程简单,相比GDI+编程减少大量编程代码,绘图效果较好。
软件编程需要对电流、电压数据进行曲线绘制,MSChart控件曲线显示设置为二维折线图,控件内只绘制一条曲线。程序中利用多个MSChart控件实现电流数据、电压数据、不同时期(早期、中期、中晚期、晚期)的电压数据实时显示。
绘制接收电压数据时,MSChart控件名称为Chart1,通过图表集合Series添加曲线名称“测量”。制定好曲线名称后,代码编写主要针对此曲线进行数据集的添加。测试数据是实时变化的,绘图时需要动态添加二维数组数据源,X轴数据(iTime)为整型数组,数值范围是0~300 ms,Y轴数据(fVoltage)为浮点型数组。利用AddXY方法实现绘图数据的添加。编制的部分程序示例如下。
chart1.Series["测量"].Points.Clear();
chart1.Series["测量"].Points.AddXY(iTime[i], fVoltage[i]);
不同时期电压曲线绘图MSChart的数据源相同,只是把绘图区域的X坐标轴设置显示区间不同。例如,中期时间定义为(100~200)ms,MSChart控件名称为Chart2,编制程序如下。
Chart2.ChartAreas[0].AxisX.Minimum=100;
Chart2.ChartAreas[0].AxisX.Maximum=200;
2.3 Access数据库使用
Access是Microsoft Office家族的一个成员,它是基于SQL的关系型数据库,其功能强大、使用方便,常常用于小型项目中[10]。本次存储数据具备两种不同类型,测试记录点(X轴数据)是整数型,电压和电流数据(Y轴数据)是浮点型,建立数据库时内部数据表的类型分别按照整型、浮点型进行设置。实施过程是用Access软件建立一个mdb数据库,存储于工程文件的Debug目录中,添加工作表“测试数据表”,打开表结构的设计视图,增加表结构的字段名称,如记录序号(文本类型)、记录时间(日期时间类型)、测1时刻(长整型)、测1值(单精度型)等。设置记录序号为“主键”,方便数据的查询编程。
Access数据库的操作方法可利用OleDb编程实现,编程时通过ADO.NET的OleDb方式与工程文件的Debug目录下数据库建立链接,使用Select指令加载DataAdapter。对数据库的表进行修改时,利用OleDbDataAdapter的Insert、Update、Delete命令。
软件在通信成功后往数据库的“测试数据表”新增加一行,行所有字段名称整合为一个InsertTalbeName字符串,写入数据库的数据所有值整合为ValuesString字符串。编制的程序如下。
string InsertTableCmd ="Insert into 测试数据表" + InsertTalbeName + "Values"+"(" + ValuesString + ")";
Adapter1.InsertCommand = new OleDbCommand(InsertTableCmd, MyConnection);
Adapter1.InsertCommand.ExecuteNonQuery();
上述程序针对Access数据库先通过ADO.NET的OleDb方式进行链接,然后利用OleDbDataAdapter的Insert命令对数据库进行操作,以最基本的编程语句实现了数据库的操作。编程过程相比使用一些数据库控件的方法,利用OleDb编程程序量较大,但优势是在调试时每一步的运行结果都是可控的。
通过前期对软件进行详细的功能划分和编程设计,把数据通信、数据存储、绘图等关键技术加以整合,开发出测试软件。窗体采用多文档界面(MDI)的方式,并在界面中设有快捷菜单。利用定时器实现通信,并按照一定的时间间隔进行。数据库中的数据集合利用DataGridView控件实现数据表的显示,测量原始数据和数字平均滤波计算后的数据可在DataGridView中进行对比。MSChart控件用于显示发射电流、接收电压的实时和历史数据,如图3、图4所示。
图3 发射电流曲线图
图4 接收电压曲线图
通过研究串口通信、MSChart控件绘图、Access数据存储等编程技术,利用C#语言开发出测试软件。软件可与电磁测井装置实现实时通信,获得观测数据,通过绘图和数据库操作实现了发射电流和接收电压测量数据的观测及统计,有力配合了电磁探头进行信号的发射和接收测试试验。
[1] 宋汐瑾.生产井瞬变电磁探测理论与方法研究[D].西安:西安电子科技大学,2012.
[2] 范照晋.瞬变电磁测井通信及地面系统研究[D].西安:西安石油大学,2012.
[3] 李楠楠.瞬变电磁测井井下系统研究[D].西安:西安石油大学,2012.
[4] 李全栋.基于DSP的测井信号检测及处理系统设计[D].武汉:华中科技大学,2012.
[5] 郑宇生.C#多线程编程技术在数控测井软件中的应用[J].石油仪器,2012,26(4):79-81.
[6] 陈学军.Windows平台下串口通信数据实时获取与监测[J].自动化仪表,2012,33(3):66-69.
[7] 程丽玲.UART及USB双模通信接口的研究及实现[J].自动化仪表,2013,34(12):70-72.
[8] 李怀川,吴孟春.利用微软图表控件MSChart实现紫外线数据图形化显示[J].计算机与网络,2012(12):47-50.
[9] 阚金明,赵润军.MSChart控件在流动机械维护管理系统中的应用[J].物流工程与管理,2012,34(6):119-120.
[10]王思敏.基于ACCESS的部门管理系统的设计与实现[D].天津:天津大学,2012.
Implementation of Recording the Signals of Well Logging Probe by Utilizing C# Programming
In order to act in concert with the transmitting and receiving experiments for probes of electromagnetic logging apparatus, the testing software has been developed. The goal is to plot and storage the real time measurement data. The block diagram of software functions is designed, and the programming method for various critical technologies is formulated, including serial port communication, Access database operation, plotting by using MSChart control, etc. These critical technologies are integrated, and the testing software is worked out by using C# language. Through communicating with the logging apparatus, real time observation for the data of transmit current and receiving voltage of the probe can be implemented. In addition, the analysis and statistics of the measurement data are achieved by historical inquiry.
Electromagnetic logging apparatus Testing software Serial communication Access database MSChart control C# language
中国博士后科学基金资助项目(编号:2013M541956);
张守伟(1977-),男,现为胜利油田博士后科研工作站地质资源与地质工程专业在读博士后;主要从事电磁测井理论、测井地面软件开发及仪器研制等方面的研究。
TP319
A
10.16086/j.cnki.issn1000-0380.201505003
中石化胜利石油工程有限公司科研项目(编号:SKC1401)。
修改稿收到日期:2014-11-04。