仇 傲 劉西恩 陳洪海 王文梁
(中海油田服務股份有限公司油田技術研究院 北京 101149)
聲波測井是以巖石彈性力學和井孔聲學為理論基礎的測井方法[1]。在隨鉆聲波測井中,施工過程中測井儀為間歇工作方式[2],每次測量循環中,處理結果通常有幾十個字節,原始波形的數據量則以千字節計;并且需要測量的參數也要比其他方式測井需要測量的參數多。受傳輸速率限制,除了少量處理結果被實時傳送到地面外,大量處理結果和原始聲波波形數據存儲于隨鉆聲波測井儀的井下存儲電路中,要待儀器起鉆后,上位機才能讀取存儲在井下儀器電路中的數據[3]。同時井下儀器結構復雜,拆卸困難,直接讀取數據和對井下儀器電路程序更新耗時費力。所以需要一個裝置作為接口電路,解決在不拆卸儀器的現場應用環境下,不影響正常測井工作的前提下讀取井下儀器存儲的聲波數據,從而提高測井效率。為此,提出了隨鉆聲波數據讀取裝置以及大量測井數據遠距離傳輸的設計,另外增加了井下儀器程序遠程更新功能,增強了井下儀器的可維護性。
隨鉆聲波數據讀取裝置(以下簡稱讀取裝置)除了在起鉆后完成井下儀器存儲數據讀取外還要完成工房中儀器測試和修正工作,包括實現控制命令下發、儀器檢測和對井下儀器電路程序更新的功能。
讀取裝置采用嵌入式Linux 做軟件平臺。由于Linux屬于自由軟件,用戶不用支付任何費用就可以獲得它和它的源代碼,并且可以根據自己的需要對它進行必要的修改,無償對它使用[4];它具有Unix 的全部功能,遵從POSIX規范,提供了源代碼級別的C 語言應用編程接口給操作系統的服務程序,可移植性強;并且具有強大的網絡功能,內嵌了TCP/IP 協議。所以,嵌入式Linux 系統非常適用于本設計的開發,同時也有利于本系統以后做功能擴展。根據讀取裝置的需求,設計主要從以下方面考慮:完成相關功能的硬件平臺搭建,在嵌入式Linux 系統下完成系統移植及應用程序的設計,測試裝置與井下儀器之間的串口傳輸速率要達到1Mbps,使用TCP 協議實現可靠的網絡通信。
讀取裝置與上位機和井下儀器的連接示意圖如圖1 所示。讀取裝置通過串口與井下儀器通信,讀取存儲在井下儀器的測井數據和下載更新井下電路的程序。
通過網線與上位機通信,接收來自上位機的命令和程序數據,并將測井數據傳給上位機。

圖1 測試裝置連接示意圖
讀取裝置電路部分是以S3C2440(ARM9)為核心的典型嵌入式電路,周圍搭建了包括flash 芯片、外擴ram、串口芯片、網絡接口芯片以及保證電路正常工作的晶振以及電源模塊。電路內部的ARM9 和網卡芯片之間通過數據線和地址線復用實現交互;與地面系統的通信通過網絡接口實現;通過1Mbps 異步串口實現對井下儀器的命令發送和數據交互;外擴的RAM 實現對數據的緩存和程序運行;外擴的Flash 實現對與操作系統相關數據的存儲。系統的總體設計框圖如圖2 所示。
隨鉆聲波數據讀取裝置要求數據的傳輸距離達到200 m,傳輸的速度要達到1Mbps,如果采用一般的,不帶預加重功能的RS485 芯片,在短距離傳輸的時候,信號質量沒有問題,信號不會發送衰減。圖3 所示的為采用短線進行的自發自收的波形圖。如果傳輸的距離加到200 m 之后,再使用常規的RS485 芯片則波形的質量就會變得非常差,圖4 是在實驗室條件下,采用不帶預加重功能的RS485 芯片,經過200 m 傳輸線之后的數據波形,從圖中我們可以看出,信號質量已經達不到我們在傳輸過程中的要求,同時在傳輸中的數據也可能因此發生錯誤。所以,在硬件設計的部分,必須找到一種可以在長距離傳輸的條件下,可以顯著增強信號質量的辦法。


在應用程序設計方面,常規的傳輸方式是從串口處讀取井下儀器上傳的數據同時將收到的數據通過網絡接口發送給上位機,由上位機接收并保存成文件。這樣的傳輸方式在數據量較小,比如只有1~2Mbytes 的時候是不會產生問題的,但是,井下儀器存儲板的容量大小達到1Gbits 也就是128Mbytes,這樣的傳輸方式不僅速度難以接受,而且會由于串口和網絡接口速度不匹配的原因導致數據丟失,文件接收不完全導致整個數據傳輸過程無法正確進行。所以在軟件設計方面也必須采用新的方式,經過思考以及反復試驗提出了一種文件分塊的傳輸方式。

圖4 普通RS485 芯片200 m 傳輸后波形
在RS485 通信中,數據傳輸距離由于傳輸線阻抗和碼間干擾引起的信號衰減與即便而受到限制。一般情況下,傳輸線阻抗與終端阻抗相比可忽略不計,但在遠距離傳輸中,傳輸線阻抗對信號傳輸有著不可忽略的影響,具體影響取決于所用電纜的阻抗與終端所接匹配阻抗的分壓。碼間干擾是由傳輸線寄生參數引起的與碼型有關的延遲抖動,這種抖動會妨礙通用異步收發器(UART)與數據流的同步,使誤碼率提高降低數據通信的可靠性,從而限制了通信距離[5]。當傳輸速率較低時,傳輸距離主要與傳輸線阻抗引起的信號衰減有關;當傳輸速率較高時,傳輸線產生的損耗、特別是碼間干擾大大降低了通信距離。延長通信距離的一個關鍵問題是抑制碼間干擾,Maxim 公司的MAX3292高速全雙工收發器中,通過加入預加重電路,有效的抑制了碼間干擾,使可靠通信的距離和速率大大提高[6]。
預加重電路的工作原理:碼間干擾是由于電纜的寄生RC 時間常數作用于不同碼型時造成不同的延遲時間,產生延遲抖動引起的。例如,當RS485 驅動器輸入端的數據為“11111110”時,在一串“1”碼的作用下,驅動器輸出上升到較高的電壓幅度,因而,由“1”過渡到“0”碼時所需要的時間較長;當驅動器輸入信號為“00000010”時,對應于“1”碼,驅動器差分輸出電壓幅度較低,因此,由“1”到“0”的過渡時間較短,由此可以看出:傳輸延遲時間與碼型有關,不同碼型,傳輸線寄生參數產生的影響不同。為解決這一問題,MAX3292 內部的預加重驅動器設置了四級電平(增強高電平、高電平、增強低電平、低電平),當驅動器輸入由“0”碼變為“1”碼時,預加重驅動器輸出為“增強高電平”,經過預加重電路設定的時間間隔后,回到高電平,如果驅動器輸入在預加重電路設定的時間間隔前變為“0”碼,驅動器輸出將直接由“增強高電平”將至“增強低電平”;當驅動器輸入由“1”碼變為“0”碼時,預加重驅動器作類似處理。從以上分析可以看出:預加重電路在輸入信號電平翻轉時,強制將差分輸出拉至高電平或低電平,信號幅度是原來的1.9 倍,減小了差分輸出的上升或下降斜率,通過抑制信號的衰減改善碼間干擾。
讀取裝置中使用max3292 進行預加重電路設計,將ARM 芯片的UART1 即TXD1 和RXD1 分別和max3292 的發送端和接收端相連,實現信號傳輸預加重功能。
圖5 所示的是在實驗室環境下,使用帶有預加重功能的max3292 在波特率為1Mbps 的條件下傳輸200 m 后的數據的波形,圖中上面的是數據的波形,下面是差分信號,從圖中我們可以看出,帶有預加重功能的芯片對信號的質量有明顯的提升,經過200 m 傳輸線傳輸之后信號沒有明顯衰減,完全滿足傳輸過程中對信號質量的要求。

圖5 預加重芯片傳輸200 m 波形
隨鉆聲波測井儀采集聲波數據時,每次采集的點數為300 個點,數據的大小為2534bytes,井下儀器的存儲板容量總大小為1Gbits 也就是128Mbytes 的數據。如果采用原始的從串口處讀取井下儀器的數據同時把數據通過網絡傳輸給上位機的方式,會由于上下傳輸速度不匹配而導致傳輸的過程中丟失字節的問題。所以為了解決這樣一個問題,采用了一種分塊傳輸的思想。將128Mbytes 的數據分塊來傳輸,每一塊的大小為50Mbytes 左右。這樣128Mbytes 的數據最多只需要3 次就可以傳輸完畢。程序流程如圖6 所示,下面分步驟說明整個數據傳輸的過程。
1)通過串口發送命令給井下儀器:
shorttowrite=0xxxxx
write(serial_fd,&towrite,sizeof(short))
其中XXXX 為儀器地址,通過write 函數就可以把命令碼通過串口發送給井下儀器。
2)井下儀器返回一個ack 握手信號后,測試裝置通過串口接收本次傳輸數據的總長度:
read(serial_fd,read_times,sizeof(unsigned long int))
3)將收到的數據長度通過網絡發送給上位機,告知上位機這次傳輸要接收文件的總長度。
4)測試裝置創建一個文件,將井下儀器從串口發送的聲波數據保存到這個文件中,相關代碼如下:
byte=readn_serial(serial_fd,buff,4096)
fwrite(buff,sizeof(char),byte,fp)
首先把收到的數據存到一個數組里面,再把數組中的數據寫到新建的文件里,循環執行這個過程指導文件接收完成,這時上位機等待文件接收完畢。

圖6 數據傳輸程序流程
5)文件接收完成之后,測試裝置發送一個ack 握手信號給上位機,通知上位機文件已經接收完畢。上位機準備通過網絡接收聲波數據。
6)測試裝置打開剛剛接收完畢的聲波數據文件,通過網絡發送給上位機,由上位機接收之后保存成文件:
fp=fopen("mass_data_file","rb")
fread(send_buf,sizeof(char),4096,fp)
send(clifd,send_buf,4096,0)
循環執行這個過程直到整個文件中的數據全部發送至上位機。
7)發送完畢,關閉和上位機相連的網絡套接字,命令完成。
這樣就完成了一次數據傳輸,根據實際情況,128Mbytes 的數據只需要重復三次就可以完成整個聲波數據的傳輸過程。經過反復的試驗,波特率可以穩定在1Mbps 進行傳輸,傳輸線的距離也達到了200 米,傳輸的過程沒有出現數據錯誤,完全滿足隨鉆聲波測試裝置的設計需求。同時因為網絡傳輸部分采用了TCP 方式的socket 網絡編程,安全可靠,保證數據正確的同時也可以達到很高的速度[7-8],可以在一個小時左右完成存儲板上所有數據的遠距離傳輸過程。
圖7 給出的數據為在實驗室條件下由井下儀器實際采集到的波形數據,使用預加重芯片傳輸兩百米后由上位機接收到的數據部分截圖,經過和實際采集到的數據進行對比之后,發現數據完全正確,圖8 給出了從上位機中顯示的數據對應的波形,經過和實際的波形進行對比之后,發現波形上面也沒有出現錯誤,從而說明了本文所給出的長距離串行傳輸的方式解決了項目中遇到的遠距離數據傳輸問題,滿足了實際需求要求。


隨鉆聲波測井儀在井下采集的聲波數據,數據量大,數據結構復雜,通過預加重電路和網線進行數據傳輸將大大提高傳輸速度以及數據的準確性,確保井下數據的不失真回顯。本文提出的數據遠距離傳輸方案可以滿足隨鉆聲波測井200 m 傳輸距離和1Mbps 傳輸速率的要求,同時可以在一個相對短的時間內(存儲版數據全部存滿預計150 h)完成整個數據的傳輸過程,極大地提高了測井儀維護人員的工作效率。
[1]張海瀾,王秀明,張碧星.井孔的聲場和波[M].北京:科學出版社,2004:1-261.
[2]肖紅兵,鞠曉東,楊錦舟.隨鉆聲波測井儀高效電源設計[J].聲學技術,2009(10).
[3]肖紅兵,鞠曉東,楊錦舟.隨鉆聲波測井數據存儲技術研究[J].科學技術工程,2009,6(9):3065-3068.
[4]羅苑棠,楊宗德.嵌入式Linux 應用系統開發實例精講[M].北京:電子工業出版社,2007.
[5]魏智.預加重電路在RS485 中的應用[J].電子產品世界,1996(6).
[6]劉亮.外置預加重均衡器在高速背板互聯中的應用[J].電子技術應用,2010(8).
[7]華清遠見嵌入式培訓中心.嵌入式Linux 應用程序開發標準教程[M].北京:人民郵電出版社,2009.
[8]Donahoo M.J.,Calvert K.L.TCP/IP Sockets 編程:C語言實現[M].陳宗斌 譯.2 版.北京:清華大學出版社,2009.