仇 傲 劉西恩 陳洪海 王文梁
(中海油田服務(wù)股份有限公司油田技術(shù)研究院 北京 101149)
聲波測井是以巖石彈性力學(xué)和井孔聲學(xué)為理論基礎(chǔ)的測井方法[1]。在隨鉆聲波測井中,施工過程中測井儀為間歇工作方式[2],每次測量循環(huán)中,處理結(jié)果通常有幾十個字節(jié),原始波形的數(shù)據(jù)量則以千字節(jié)計;并且需要測量的參數(shù)也要比其他方式測井需要測量的參數(shù)多。受傳輸速率限制,除了少量處理結(jié)果被實時傳送到地面外,大量處理結(jié)果和原始聲波波形數(shù)據(jù)存儲于隨鉆聲波測井儀的井下存儲電路中,要待儀器起鉆后,上位機才能讀取存儲在井下儀器電路中的數(shù)據(jù)[3]。同時井下儀器結(jié)構(gòu)復(fù)雜,拆卸困難,直接讀取數(shù)據(jù)和對井下儀器電路程序更新耗時費力。所以需要一個裝置作為接口電路,解決在不拆卸儀器的現(xiàn)場應(yīng)用環(huán)境下,不影響正常測井工作的前提下讀取井下儀器存儲的聲波數(shù)據(jù),從而提高測井效率。為此,提出了隨鉆聲波數(shù)據(jù)讀取裝置以及大量測井?dāng)?shù)據(jù)遠距離傳輸?shù)脑O(shè)計,另外增加了井下儀器程序遠程更新功能,增強了井下儀器的可維護性。
隨鉆聲波數(shù)據(jù)讀取裝置(以下簡稱讀取裝置)除了在起鉆后完成井下儀器存儲數(shù)據(jù)讀取外還要完成工房中儀器測試和修正工作,包括實現(xiàn)控制命令下發(fā)、儀器檢測和對井下儀器電路程序更新的功能。
讀取裝置采用嵌入式Linux 做軟件平臺。由于Linux屬于自由軟件,用戶不用支付任何費用就可以獲得它和它的源代碼,并且可以根據(jù)自己的需要對它進行必要的修改,無償對它使用[4];它具有Unix 的全部功能,遵從POSIX規(guī)范,提供了源代碼級別的C 語言應(yīng)用編程接口給操作系統(tǒng)的服務(wù)程序,可移植性強;并且具有強大的網(wǎng)絡(luò)功能,內(nèi)嵌了TCP/IP 協(xié)議。所以,嵌入式Linux 系統(tǒng)非常適用于本設(shè)計的開發(fā),同時也有利于本系統(tǒng)以后做功能擴展。根據(jù)讀取裝置的需求,設(shè)計主要從以下方面考慮:完成相關(guān)功能的硬件平臺搭建,在嵌入式Linux 系統(tǒng)下完成系統(tǒng)移植及應(yīng)用程序的設(shè)計,測試裝置與井下儀器之間的串口傳輸速率要達到1Mbps,使用TCP 協(xié)議實現(xiàn)可靠的網(wǎng)絡(luò)通信。
讀取裝置與上位機和井下儀器的連接示意圖如圖1 所示。讀取裝置通過串口與井下儀器通信,讀取存儲在井下儀器的測井?dāng)?shù)據(jù)和下載更新井下電路的程序。
通過網(wǎng)線與上位機通信,接收來自上位機的命令和程序數(shù)據(jù),并將測井?dāng)?shù)據(jù)傳給上位機。
圖1 測試裝置連接示意圖
讀取裝置電路部分是以S3C2440(ARM9)為核心的典型嵌入式電路,周圍搭建了包括flash 芯片、外擴ram、串口芯片、網(wǎng)絡(luò)接口芯片以及保證電路正常工作的晶振以及電源模塊。電路內(nèi)部的ARM9 和網(wǎng)卡芯片之間通過數(shù)據(jù)線和地址線復(fù)用實現(xiàn)交互;與地面系統(tǒng)的通信通過網(wǎng)絡(luò)接口實現(xiàn);通過1Mbps 異步串口實現(xiàn)對井下儀器的命令發(fā)送和數(shù)據(jù)交互;外擴的RAM 實現(xiàn)對數(shù)據(jù)的緩存和程序運行;外擴的Flash 實現(xiàn)對與操作系統(tǒng)相關(guān)數(shù)據(jù)的存儲。系統(tǒng)的總體設(shè)計框圖如圖2 所示。
隨鉆聲波數(shù)據(jù)讀取裝置要求數(shù)據(jù)的傳輸距離達到200 m,傳輸?shù)乃俣纫_到1Mbps,如果采用一般的,不帶預(yù)加重功能的RS485 芯片,在短距離傳輸?shù)臅r候,信號質(zhì)量沒有問題,信號不會發(fā)送衰減。圖3 所示的為采用短線進行的自發(fā)自收的波形圖。如果傳輸?shù)木嚯x加到200 m 之后,再使用常規(guī)的RS485 芯片則波形的質(zhì)量就會變得非常差,圖4 是在實驗室條件下,采用不帶預(yù)加重功能的RS485 芯片,經(jīng)過200 m 傳輸線之后的數(shù)據(jù)波形,從圖中我們可以看出,信號質(zhì)量已經(jīng)達不到我們在傳輸過程中的要求,同時在傳輸中的數(shù)據(jù)也可能因此發(fā)生錯誤。所以,在硬件設(shè)計的部分,必須找到一種可以在長距離傳輸?shù)臈l件下,可以顯著增強信號質(zhì)量的辦法。
在應(yīng)用程序設(shè)計方面,常規(guī)的傳輸方式是從串口處讀取井下儀器上傳的數(shù)據(jù)同時將收到的數(shù)據(jù)通過網(wǎng)絡(luò)接口發(fā)送給上位機,由上位機接收并保存成文件。這樣的傳輸方式在數(shù)據(jù)量較小,比如只有1~2Mbytes 的時候是不會產(chǎn)生問題的,但是,井下儀器存儲板的容量大小達到1Gbits 也就是128Mbytes,這樣的傳輸方式不僅速度難以接受,而且會由于串口和網(wǎng)絡(luò)接口速度不匹配的原因?qū)е聰?shù)據(jù)丟失,文件接收不完全導(dǎo)致整個數(shù)據(jù)傳輸過程無法正確進行。所以在軟件設(shè)計方面也必須采用新的方式,經(jīng)過思考以及反復(fù)試驗提出了一種文件分塊的傳輸方式。
圖4 普通RS485 芯片200 m 傳輸后波形
在RS485 通信中,數(shù)據(jù)傳輸距離由于傳輸線阻抗和碼間干擾引起的信號衰減與即便而受到限制。一般情況下,傳輸線阻抗與終端阻抗相比可忽略不計,但在遠距離傳輸中,傳輸線阻抗對信號傳輸有著不可忽略的影響,具體影響取決于所用電纜的阻抗與終端所接匹配阻抗的分壓。碼間干擾是由傳輸線寄生參數(shù)引起的與碼型有關(guān)的延遲抖動,這種抖動會妨礙通用異步收發(fā)器(UART)與數(shù)據(jù)流的同步,使誤碼率提高降低數(shù)據(jù)通信的可靠性,從而限制了通信距離[5]。當(dāng)傳輸速率較低時,傳輸距離主要與傳輸線阻抗引起的信號衰減有關(guān);當(dāng)傳輸速率較高時,傳輸線產(chǎn)生的損耗、特別是碼間干擾大大降低了通信距離。延長通信距離的一個關(guān)鍵問題是抑制碼間干擾,Maxim 公司的MAX3292高速全雙工收發(fā)器中,通過加入預(yù)加重電路,有效的抑制了碼間干擾,使可靠通信的距離和速率大大提高[6]。
預(yù)加重電路的工作原理:碼間干擾是由于電纜的寄生RC 時間常數(shù)作用于不同碼型時造成不同的延遲時間,產(chǎn)生延遲抖動引起的。例如,當(dāng)RS485 驅(qū)動器輸入端的數(shù)據(jù)為“11111110”時,在一串“1”碼的作用下,驅(qū)動器輸出上升到較高的電壓幅度,因而,由“1”過渡到“0”碼時所需要的時間較長;當(dāng)驅(qū)動器輸入信號為“00000010”時,對應(yīng)于“1”碼,驅(qū)動器差分輸出電壓幅度較低,因此,由“1”到“0”的過渡時間較短,由此可以看出:傳輸延遲時間與碼型有關(guān),不同碼型,傳輸線寄生參數(shù)產(chǎn)生的影響不同。為解決這一問題,MAX3292 內(nèi)部的預(yù)加重驅(qū)動器設(shè)置了四級電平(增強高電平、高電平、增強低電平、低電平),當(dāng)驅(qū)動器輸入由“0”碼變?yōu)椤?”碼時,預(yù)加重驅(qū)動器輸出為“增強高電平”,經(jīng)過預(yù)加重電路設(shè)定的時間間隔后,回到高電平,如果驅(qū)動器輸入在預(yù)加重電路設(shè)定的時間間隔前變?yōu)椤?”碼,驅(qū)動器輸出將直接由“增強高電平”將至“增強低電平”;當(dāng)驅(qū)動器輸入由“1”碼變?yōu)椤?”碼時,預(yù)加重驅(qū)動器作類似處理。從以上分析可以看出:預(yù)加重電路在輸入信號電平翻轉(zhuǎn)時,強制將差分輸出拉至高電平或低電平,信號幅度是原來的1.9 倍,減小了差分輸出的上升或下降斜率,通過抑制信號的衰減改善碼間干擾。
讀取裝置中使用max3292 進行預(yù)加重電路設(shè)計,將ARM 芯片的UART1 即TXD1 和RXD1 分別和max3292 的發(fā)送端和接收端相連,實現(xiàn)信號傳輸預(yù)加重功能。
圖5 所示的是在實驗室環(huán)境下,使用帶有預(yù)加重功能的max3292 在波特率為1Mbps 的條件下傳輸200 m 后的數(shù)據(jù)的波形,圖中上面的是數(shù)據(jù)的波形,下面是差分信號,從圖中我們可以看出,帶有預(yù)加重功能的芯片對信號的質(zhì)量有明顯的提升,經(jīng)過200 m 傳輸線傳輸之后信號沒有明顯衰減,完全滿足傳輸過程中對信號質(zhì)量的要求。
圖5 預(yù)加重芯片傳輸200 m 波形
隨鉆聲波測井儀采集聲波數(shù)據(jù)時,每次采集的點數(shù)為300 個點,數(shù)據(jù)的大小為2534bytes,井下儀器的存儲板容量總大小為1Gbits 也就是128Mbytes 的數(shù)據(jù)。如果采用原始的從串口處讀取井下儀器的數(shù)據(jù)同時把數(shù)據(jù)通過網(wǎng)絡(luò)傳輸給上位機的方式,會由于上下傳輸速度不匹配而導(dǎo)致傳輸?shù)倪^程中丟失字節(jié)的問題。所以為了解決這樣一個問題,采用了一種分塊傳輸?shù)乃枷?。?28Mbytes 的數(shù)據(jù)分塊來傳輸,每一塊的大小為50Mbytes 左右。這樣128Mbytes 的數(shù)據(jù)最多只需要3 次就可以傳輸完畢。程序流程如圖6 所示,下面分步驟說明整個數(shù)據(jù)傳輸?shù)倪^程。
1)通過串口發(fā)送命令給井下儀器:
shorttowrite=0xxxxx
write(serial_fd,&towrite,sizeof(short))
其中XXXX 為儀器地址,通過write 函數(shù)就可以把命令碼通過串口發(fā)送給井下儀器。
2)井下儀器返回一個ack 握手信號后,測試裝置通過串口接收本次傳輸數(shù)據(jù)的總長度:
read(serial_fd,read_times,sizeof(unsigned long int))
3)將收到的數(shù)據(jù)長度通過網(wǎng)絡(luò)發(fā)送給上位機,告知上位機這次傳輸要接收文件的總長度。
4)測試裝置創(chuàng)建一個文件,將井下儀器從串口發(fā)送的聲波數(shù)據(jù)保存到這個文件中,相關(guān)代碼如下:
byte=readn_serial(serial_fd,buff,4096)
fwrite(buff,sizeof(char),byte,fp)
首先把收到的數(shù)據(jù)存到一個數(shù)組里面,再把數(shù)組中的數(shù)據(jù)寫到新建的文件里,循環(huán)執(zhí)行這個過程指導(dǎo)文件接收完成,這時上位機等待文件接收完畢。
圖6 數(shù)據(jù)傳輸程序流程
5)文件接收完成之后,測試裝置發(fā)送一個ack 握手信號給上位機,通知上位機文件已經(jīng)接收完畢。上位機準備通過網(wǎng)絡(luò)接收聲波數(shù)據(jù)。
6)測試裝置打開剛剛接收完畢的聲波數(shù)據(jù)文件,通過網(wǎng)絡(luò)發(fā)送給上位機,由上位機接收之后保存成文件:
fp=fopen("mass_data_file","rb")
fread(send_buf,sizeof(char),4096,fp)
send(clifd,send_buf,4096,0)
循環(huán)執(zhí)行這個過程直到整個文件中的數(shù)據(jù)全部發(fā)送至上位機。
7)發(fā)送完畢,關(guān)閉和上位機相連的網(wǎng)絡(luò)套接字,命令完成。
這樣就完成了一次數(shù)據(jù)傳輸,根據(jù)實際情況,128Mbytes 的數(shù)據(jù)只需要重復(fù)三次就可以完成整個聲波數(shù)據(jù)的傳輸過程。經(jīng)過反復(fù)的試驗,波特率可以穩(wěn)定在1Mbps 進行傳輸,傳輸線的距離也達到了200 米,傳輸?shù)倪^程沒有出現(xiàn)數(shù)據(jù)錯誤,完全滿足隨鉆聲波測試裝置的設(shè)計需求。同時因為網(wǎng)絡(luò)傳輸部分采用了TCP 方式的socket 網(wǎng)絡(luò)編程,安全可靠,保證數(shù)據(jù)正確的同時也可以達到很高的速度[7-8],可以在一個小時左右完成存儲板上所有數(shù)據(jù)的遠距離傳輸過程。
圖7 給出的數(shù)據(jù)為在實驗室條件下由井下儀器實際采集到的波形數(shù)據(jù),使用預(yù)加重芯片傳輸兩百米后由上位機接收到的數(shù)據(jù)部分截圖,經(jīng)過和實際采集到的數(shù)據(jù)進行對比之后,發(fā)現(xiàn)數(shù)據(jù)完全正確,圖8 給出了從上位機中顯示的數(shù)據(jù)對應(yīng)的波形,經(jīng)過和實際的波形進行對比之后,發(fā)現(xiàn)波形上面也沒有出現(xiàn)錯誤,從而說明了本文所給出的長距離串行傳輸?shù)姆绞浇鉀Q了項目中遇到的遠距離數(shù)據(jù)傳輸問題,滿足了實際需求要求。
隨鉆聲波測井儀在井下采集的聲波數(shù)據(jù),數(shù)據(jù)量大,數(shù)據(jù)結(jié)構(gòu)復(fù)雜,通過預(yù)加重電路和網(wǎng)線進行數(shù)據(jù)傳輸將大大提高傳輸速度以及數(shù)據(jù)的準確性,確保井下數(shù)據(jù)的不失真回顯。本文提出的數(shù)據(jù)遠距離傳輸方案可以滿足隨鉆聲波測井200 m 傳輸距離和1Mbps 傳輸速率的要求,同時可以在一個相對短的時間內(nèi)(存儲版數(shù)據(jù)全部存滿預(yù)計150 h)完成整個數(shù)據(jù)的傳輸過程,極大地提高了測井儀維護人員的工作效率。
[1]張海瀾,王秀明,張碧星.井孔的聲場和波[M].北京:科學(xué)出版社,2004:1-261.
[2]肖紅兵,鞠曉東,楊錦舟.隨鉆聲波測井儀高效電源設(shè)計[J].聲學(xué)技術(shù),2009(10).
[3]肖紅兵,鞠曉東,楊錦舟.隨鉆聲波測井?dāng)?shù)據(jù)存儲技術(shù)研究[J].科學(xué)技術(shù)工程,2009,6(9):3065-3068.
[4]羅苑棠,楊宗德.嵌入式Linux 應(yīng)用系統(tǒng)開發(fā)實例精講[M].北京:電子工業(yè)出版社,2007.
[5]魏智.預(yù)加重電路在RS485 中的應(yīng)用[J].電子產(chǎn)品世界,1996(6).
[6]劉亮.外置預(yù)加重均衡器在高速背板互聯(lián)中的應(yīng)用[J].電子技術(shù)應(yīng)用,2010(8).
[7]華清遠見嵌入式培訓(xùn)中心.嵌入式Linux 應(yīng)用程序開發(fā)標(biāo)準教程[M].北京:人民郵電出版社,2009.
[8]Donahoo M.J.,Calvert K.L.TCP/IP Sockets 編程:C語言實現(xiàn)[M].陳宗斌 譯.2 版.北京:清華大學(xué)出版社,2009.