張守偉 臧德福 李澤田 黃玉科
(勝利油田博士后科研工作站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。