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