·開發(fā)設計·
基于VB.NET的聲波時差測井模型實驗裝置上位機軟件設計*
劉剛王崗泰樂凱軍周洋何小英李嘉奇吳愛平
(長江大學機械工程學院湖北荊州434023)
摘要:文章以聲波時差測井模型實驗裝置的設計為背景,在Visual Basic.NET環(huán)境中對聲波時差測井模型實驗裝置的上位機軟件的設計進行了詳細說明,其中包括串口設置、數(shù)據(jù)的接收、計算、繪圖、數(shù)據(jù)保存及回放。通過上位機與下位機的聯(lián)調,驗證了上位機軟件的正確性和直觀性。
關鍵詞:Visual Basic.NET;上位機;聲波時差測井
作者簡介:第一劉剛,男,1992年生,長江大學機械工程學院機械11104班學生。E-mail:a289297@163.com
文章編號:中圖法分類號:TP274
收稿日期:(2014-08-31編輯:屈憶欣)
Upper Computer Software Design of Experimental Equipment for Travel Time of Sonic Logging Based on VB.NETLIU GangWANG GangtaiYUE KaijunZHOU YangHE XiaoyingLI JiaqiWU Aiping
(SchoolofMechanicalEngineering,YangtzeUniversity,Jingzhou,Hubei434023,China)
Abstract:This paper discussed the design of experimental equipment for travel time of sonic logging. The Upper computer software design of experimental equipment for travel time of sonic logging based on Visual Basic.NET was described in detail, including: settings of serial ports, receiving, calculating, drawing, saves and data playback. The correctness and vivacity of upper computer software was verified by the joint debugging of lower computer and upper computer.
Key word: visual basic.NET,upper computer,travel time of sonic logging
0引言
聲波時差測井,又叫聲波速度測井,即測量滑行波通過地層傳播的時差,是目前用以估算孔隙度、判斷氣層和研究巖性的主要測井方法之一[1]。聲波時差測井模型實驗裝置采用了聲波時差測井的原理,能控制測量探頭的移動,上傳數(shù)據(jù)并對測量數(shù)據(jù)進行處理及圖形顯示。實驗裝置通過實物讓使用者直觀地了解聲波時差測井的原理,也以硬件和軟件結合的方式讓使用者明白測井的方法。上位機在測井中有重要的作用,它不僅可以控制井下儀器的工作狀態(tài),而且能以深度驅動方式記錄測量數(shù)據(jù),便于以后的研究。本文介紹了一種聲波時差測井模型實驗裝置上位機軟件的設計方法。
1上位機軟件功能需求
根據(jù)聲波時差測井模型實驗裝置的特點,上位機要能夠實現(xiàn)數(shù)據(jù)可視化即顯示地層信息的變化。在實驗聲波探頭開始移動時,上位機要接收下位機傳來的全部數(shù)據(jù),并且對這些數(shù)據(jù)進行解析,轉換成深度和時差值后,再把這些值以曲線的形式反映。上位機還應該具有保存數(shù)據(jù)的功能[2],在實驗接收后,能夠選擇指定的數(shù)據(jù)進行回放。上位機軟件主要功能如圖1所示。
圖1 上位機軟件的主要功能
2開發(fā)環(huán)境的選擇
在本設計中,開發(fā)環(huán)境選擇的是VB.NET。作為VB6.0的后續(xù)版本,VB.NET不僅繼承了VB6.0簡單、易學、開發(fā)周期短的特點,而且做到了完全面向對象,很容易實現(xiàn)重載[3]。同時VB.NET 在代碼編輯時加入了很多人性化的功能。代碼有語法錯誤會自動提示,加快了開發(fā)的速度。如果程序運行后發(fā)現(xiàn)錯誤,VB.NET還會在錯誤旁邊給出修改建議。在很長的一段代碼中很難找到先前命名的變量,只要點擊其中一個變量名,在其他地方的相同變量會自動以加深背景顏色來突出顯示。這些功能都能夠提高開發(fā)的效率。
3上位機軟件設計
3.1串口設置
要正確的接收下位機傳到上位機的數(shù)據(jù),首先要對串口進行設置。串口的屬性包括:波特率、數(shù)據(jù)位、停止位和奇偶校驗[4],這些屬性要與下位機的一致,在本實驗裝置中,這些屬性值分別是:19 200 Hz、8位、1位、None 。在實現(xiàn)了基本功能后,還要有串口異常事件的處理,包括:串口未打開,串口被占用等。每一個異常事件都要有相應的程序來提示用戶進行正確的設置。
串口異常事件的代碼:
Comm_Error:
If Err.Number = 8002 Then
MsgBox("串口錯誤,請重新打開串口", vbOKOnly, "錯誤提示")
End
End If
If Err.Number = 8005 Then
MsgBox("串口已打開")
Else
MsgBox("其他錯誤")
End If
3.2數(shù)據(jù)的讀取及轉換
從下位機傳過來的數(shù)據(jù)首先進入計算機的輸入緩沖區(qū),上位機軟件從輸入緩沖區(qū)獲取數(shù)據(jù)后再進行數(shù)據(jù)的轉換。串口每發(fā)送一次數(shù)據(jù),電腦就接收一次數(shù)據(jù)。根據(jù)下位機與上位機的協(xié)議,下位機發(fā)送來的每組數(shù)據(jù)包括10個元素,其數(shù)據(jù)構成如圖2所示。每組數(shù)據(jù)首先保存在一個多態(tài)型數(shù)組中,然后用16進制轉10進制轉換函數(shù)轉換為10進制數(shù)。為了防止其他數(shù)據(jù)的干擾,上位機要對每一組數(shù)據(jù)進行檢驗[5]:前后特征位數(shù)據(jù)是否和協(xié)議中的相同。如果相同,這些數(shù)據(jù)才會進行下一步計算。在計算深度值時,根據(jù)實驗裝置的原理得出的計算深度值的公式把包含3個元素的數(shù)據(jù)轉化為1個深度值。計算時差值同理。深度值與時差值都計算完后,把這兩個數(shù)據(jù)保存到一個數(shù)組中,用于繪制時差—深度曲線圖。
圖2 上位機接收的數(shù)據(jù)構成
上位機讀取及檢測數(shù)據(jù)的代碼:
For i = 0 To UBound(byteData)
strReadString = strReadString & CStr(byteData(i)) & " "
Next
For i = 0 To UBound(byteData)
arr_intNotSelected(i) = Val(byteData(i))
strTemp += CStr(arr_intNotSelected(i))
Next
If arr_intNotSelected(0) = 85 And arr_intNotSelected(1) = 85 And arr_intNotSelected(8) = 170 And arr_intNotSelected(9) = 170 Then
For i = 0 To 5
arr_intSelected(i) = arr_intNotSelected(i + 2)
Next
End If
3.3時差—深度曲線的繪制
動態(tài)曲線圖可以直觀地顯示實驗裝置中模擬地層的變化[6]。首先對線條的線型和顏色進行設置,為了突出顯示時差—深度變化曲線,該曲線的顏色設置為紅色,然后在程序中使用PicBox控件,調整該控件到合適的位置與尺寸。曲線圖就在這個控件上顯示,接著對控件進行初始化設置,包括使用clear(color.white)語句把控件的背景設置為白色,在控件上繪制坐標軸及網格。繪制曲線是在每一次串口接收數(shù)據(jù)后進行的,串口接收到兩組有效數(shù)據(jù),將它們轉換后分別保存到兩個數(shù)組中,每個數(shù)組中包含2個元素,時差值作為X軸坐標,深度值作為Y軸坐標。這樣2個數(shù)組就是2個點,使用DrawLine函數(shù)連接這兩個點就形成了一條線。在串口接收到第3組數(shù)據(jù)后,再連接第2個點和第3個點,依次類推,最后就形成了動態(tài)的曲線。在圖3中可以看到,時差—深度曲線值有3處明顯的變化,這說明探頭經過了不同的地層。
繪制時差—深度曲線的代碼:
Dim p_red As New Pen(Color.Red)‘曲線的顏色設置為紅色
g_Depth.Clear(Color.White)
If arr_intNotSelected(0) = 85 And arr_intNotSelected(1) = 85 And arr_intNotSelected(8) = 170 And arr_intNotSelected(9) = 170 Then
If jf >= 2 Then
g_Depth.DrawLine(p_red, arrDecDepthData_X(jf-1) / single_adjustment_Depth_X +30,arrDecDepthData_Y(jf-1)*single_adjustment_Depth_Y+30,arrDecDepthData_X(jf)/single_adjustment_Depth_X+30,arrDecDepthData_Y(jf)*single_adjustment_Depth_Y + 30)
End If
End If
圖3 上位機運行時時差—深度曲線圖
3.4上位機對下位機的控制
由于實驗裝置采用深度驅動的方式,在探頭運行到實驗裝置的盡頭時,要將深度值清零。根據(jù)下位機與上位機的協(xié)議,當上位機通過串口向下位機發(fā)送“a”字符時,下位機傳到上位機的深度值從零開始。同時,上位機會清除之前的曲線。
按下“深度清零”按鈕后的主要代碼:
g_Depth.Clear(Color.White)
Axe() '繪制坐標軸子函數(shù)
If AxMSComm.PortOpen = True Then
AxMSComm.Output = "a"
Else
MsgBox("串口未打開,無法發(fā)送清零指令,請先打開串口")
End If
3.5數(shù)據(jù)的保存與回放
為了能在實驗結束后對實驗數(shù)據(jù)進行分析,上位機應該包含數(shù)據(jù)保存與回放功能。由于每次串口事件只需要保存時差、深度2個數(shù)據(jù),并且每次實驗的總數(shù)據(jù)量不大,故使用文本文件的方式來儲存實驗數(shù)據(jù)。為了方便用戶,上位機允許用戶自定義數(shù)據(jù)在電腦中的儲存位置。
要實現(xiàn)該功能可以直接調用VB.NET提供的SaveFileDialog控件,然后在用戶選擇的儲存位置建立文本文件,接著定義StreamWriter來寫入數(shù)據(jù)。為了能保存指定深度區(qū)間的數(shù)據(jù),上位機有一個保存的開關,開關打開時,保存開始,串口每接收一次數(shù)據(jù),就保存一組數(shù)據(jù),開關關閉時,停止寫入數(shù)據(jù)到文本文件。在程序中的實現(xiàn)方式是使用一個布爾值,該值為True時,能夠寫入;該值為False時,不能寫入?;胤艜r曲線變化要比實驗時快,實現(xiàn)方法是使用Timer控件,計數(shù)器每加1,就從文本文件中獲取一組數(shù)據(jù)并畫線,直到文本文件中的數(shù)據(jù)全部獲取完畢。在圖4中,實驗裝置運行時的實時時差—深度曲線和回放時的曲線完全一致,說明軟件實現(xiàn)了數(shù)據(jù)保存和回放功能。
圖4 接受數(shù)據(jù)時的曲線與回放的曲線對比
4結束語
聲波時差測井模型實驗裝置上位機軟件與下位機實現(xiàn)了聯(lián)調,聲波探頭經過不同的模擬地層時,上位機上的時差—深度曲線特征明顯,時差數(shù)據(jù)與示波器顯示的一致。證明使用VB.NET設計的上位機軟件是實用的。
參 考 文 獻
[1] 劉思慧,首祥云. 一種聲波時差測井曲線的校正方法[J]. 國外測井技術,2012,23(4):20-22,28.
[2] 廖崇琦,侯春萍. 基于VB.NET的數(shù)據(jù)采集系統(tǒng)軟件設計[J]. 微處理機,2006,27(6):54-56.
[3] 齊興斌,趙麗. VB與VB.NET編程的比較研究[J]. 電力學報,2009,24(5):441-442.
[4] 李湘江,彭建. 基于VB的實時數(shù)據(jù)采集程序設計[J]. 微計算機信息,2003,20(10):38-39,65.
[5] 劉東. 基于VB.net的串口通信方法設計[J]. 電腦知識與技術,2012,19(34):8304-8307.
[6]李飛,王江萍,孫志英. 基于VB的數(shù)據(jù)采集與處理系統(tǒng)的研究[J]. 計量技術,2004,48(6):24-27.