張志遠(yuǎn),張志輝,閆寶東,韓 強(qiáng),黃紅偉
(中電科儀器儀表有限公司,山東 青島266555)
光時(shí)域反射計(jì)(OTDR),通過(guò)檢測(cè)光纖中返回的瑞利散射和菲涅爾反射的數(shù)值,可以單端無(wú)損地測(cè)試光纖光纜的長(zhǎng)度、損耗分布、損耗系數(shù)、熔接及連接損耗、反射損耗及鏈路損耗等物理特性,能夠?qū)︽溌分械墓收宵c(diǎn)自動(dòng)分析并準(zhǔn)確定位,因而廣泛應(yīng)用于光纖生產(chǎn)與維護(hù),是光纖通信系統(tǒng)中不可或缺的測(cè)試儀器。
伴隨著光纖通信的快速發(fā)展,光纖通信骨干網(wǎng)、城域網(wǎng)、接入網(wǎng)等網(wǎng)絡(luò)日益龐大,光纖網(wǎng)絡(luò)的測(cè)試環(huán)境也日益復(fù)雜,這給光纖網(wǎng)絡(luò)的運(yùn)維工作帶來(lái)了嚴(yán)峻挑戰(zhàn)。面對(duì)這一挑戰(zhàn),結(jié)合當(dāng)前測(cè)量?jī)x器的發(fā)展趨勢(shì),設(shè)計(jì)了一款可以使用智能手機(jī)和OTDR 進(jìn)行遠(yuǎn)程交互的軟件系統(tǒng)。該系統(tǒng)的目標(biāo)是實(shí)現(xiàn)手機(jī)端和OTDR 端的互聯(lián),在無(wú)線局域網(wǎng)的情況下,用戶可以使用手機(jī)對(duì)OTDR 進(jìn)行遠(yuǎn)程控制并接收OTDR 回傳的測(cè)試結(jié)果。用戶可以通過(guò)手機(jī)查看光纖的測(cè)試結(jié)果,實(shí)時(shí)了解光纜狀態(tài),也可以將測(cè)試結(jié)果上傳到光纖運(yùn)維中心,進(jìn)行光纖網(wǎng)絡(luò)狀態(tài)的匯總。這些功能能夠?yàn)橛脩舻墓饫w運(yùn)維工作帶來(lái)便利。
Android 中文名為安卓,是基于Linux 的移動(dòng)設(shè)備操作系統(tǒng),主要用于智能手機(jī)和平板電腦。自2007 年面世以來(lái),Android 系統(tǒng)便完全開(kāi)源。同時(shí),Android 系統(tǒng)還具有豐富的接口功能,通過(guò)對(duì)其進(jìn)行修改和開(kāi)發(fā),現(xiàn)已方便地應(yīng)用在互聯(lián)網(wǎng)電視、可穿戴設(shè)備、車載終端、智能測(cè)量?jī)x器等硬件設(shè)備上。由于Android 系統(tǒng)強(qiáng)大的性能表現(xiàn)以及良好的用戶體驗(yàn),Android 系統(tǒng)在全球市場(chǎng)所占的市場(chǎng)份額已經(jīng)大幅領(lǐng)先于iOS 系統(tǒng)。在中國(guó),Android 的市場(chǎng)份額更是遙遙領(lǐng)先,據(jù)最新的移動(dòng)系統(tǒng)調(diào)研報(bào)告,Android 在中國(guó)的市場(chǎng)份額已達(dá)到87%。
Android 系統(tǒng)作為市場(chǎng)份額最大的移動(dòng)設(shè)備系統(tǒng),具備以下開(kāi)發(fā)特色:①豐富的系統(tǒng)控件。Android 系統(tǒng)為開(kāi)發(fā)者提供了豐富的系統(tǒng)控件,能夠讓開(kāi)發(fā)者很輕松地編寫出漂亮的界面。若系統(tǒng)自帶的控件效果不能夠滿足用戶,開(kāi)發(fā)者可以通過(guò)自定義的方式實(shí)現(xiàn)定制的控件效果。②SQLite 數(shù)據(jù)庫(kù)。Android 系統(tǒng)還自帶了輕量級(jí)、運(yùn)算速度極快的嵌入式關(guān)系型數(shù)據(jù)庫(kù)。它不僅支持標(biāo)準(zhǔn)的SQL 語(yǔ)法,還可以通過(guò)Android 封裝好的API 進(jìn)行操作,讓存儲(chǔ)和讀取數(shù)據(jù)變得非常方便。③4 大組件。Android 擁有完善的應(yīng)用程序框架,支持4 大應(yīng)用組件,分別是活動(dòng)(Activity)、服務(wù)(Service)、廣播接收器(Broadcast Receiver)和內(nèi)容提供器(Content Provider),4 大組件可以在任意層次上進(jìn)行復(fù)用和更換。④強(qiáng)大的拓展能力。Android 系統(tǒng)具有豐富的接口功能,支持眾多的硬件傳感器,例如方向傳感器、壓力傳感器等和其他一些硬件,例如藍(lán)牙、Wi-Fi、GPS 等。通過(guò)強(qiáng)大的拓展能力,能夠讓應(yīng)用豐富多彩,潛力無(wú)限。
早期,在Android 下開(kāi)發(fā)APP 主要使用Eclipse 和基于Eclipse 的ADT,但Eclipse 是為Java 工程而生的開(kāi)發(fā)平臺(tái),而非專門用于Android,所以難以避免存在先天性不足。
自2015 年之后,谷歌公司停止了ADT 的版本更新,轉(zhuǎn)而重點(diǎn)打造自家的Android 應(yīng)用開(kāi)發(fā)環(huán)境Android Studio,與Eclipse 比起來(lái),Android Studio 擁有更加強(qiáng)大的功能和更高效的性能。所以,OTDR 遠(yuǎn)程控制系統(tǒng)中所有代碼都將在Android Studio 上進(jìn)行開(kāi)發(fā)。
系統(tǒng)架構(gòu)可以分為3 個(gè)組件:①通信組件。實(shí)現(xiàn)智能手機(jī)客戶端和OTDR 服務(wù)端的TCP 連接,使用套接字(Socket)進(jìn)行通信。②客戶端組件。手機(jī)客戶端對(duì)OTDR 服務(wù)端進(jìn)行遠(yuǎn)程控制并接收OTDR 回傳的測(cè)試結(jié)果。③服務(wù)端組件。OTDR 服務(wù)端監(jiān)聽(tīng)手機(jī)發(fā)來(lái)的指令,按照指令運(yùn)行,并返回結(jié)果,往復(fù)循環(huán)。
智能手機(jī)和OTDR 的交互系統(tǒng)采用的是TCP/IP 網(wǎng)絡(luò)協(xié)議的C/S(C:客戶端/S:服務(wù)端)體系結(jié)構(gòu),TCP 連接建立流程如圖1 所示。
其流程為:①Android 智能手機(jī)設(shè)計(jì)成客戶端,通過(guò)指定的IP 地址和端口號(hào),向服務(wù)端發(fā)送連接請(qǐng)求報(bào)文段,發(fā)送完成后,客戶端進(jìn)入SYN-SENT(同步已發(fā)送)狀態(tài);②光時(shí)域反射計(jì)(OTDR)設(shè)計(jì)成服務(wù)端,接收到客戶端連接請(qǐng)求報(bào)文段后,回復(fù)確認(rèn)報(bào)文,發(fā)送完成后,服務(wù)端進(jìn)入SYN-RCVD(同步收到)狀態(tài);③客戶端接收到服務(wù)端發(fā)出的確認(rèn)報(bào)文后,向服務(wù)端發(fā)送確認(rèn)報(bào)文,發(fā)送后進(jìn)入ESTAB-LISHED 狀態(tài),服務(wù)端接收到確認(rèn)報(bào)文后,也進(jìn)入ESTAB-LISHED 狀態(tài),此時(shí)雙方TCP 連接正式建立,實(shí)現(xiàn)通信。
TCP 連接建立后,Android 手機(jī)客戶端與OTDR 服務(wù)端通過(guò)套接字(Socket)進(jìn)行通信。手機(jī)向OTDR 發(fā)送字符指令,字符指令包括參數(shù)指令和測(cè)試指令,分別用于設(shè)置OTDR 的測(cè)試參數(shù)和控制OTDR 進(jìn)行測(cè)試。當(dāng)OTDR 接收到參數(shù)指令后,對(duì)測(cè)試參數(shù)進(jìn)行設(shè)置,并將設(shè)置結(jié)果返回到手機(jī)客戶端,當(dāng)OTDR 接收到測(cè)試指令后進(jìn)行測(cè)試,并將測(cè)試結(jié)果返回到手機(jī)客戶端,供用戶分析光纖故障或上傳。
客戶端的設(shè)計(jì)主要包括以下幾個(gè)方面:OtdrClient 類、OtdrSet 類、OtdrPaint 類。
OtdrClient 類是實(shí)現(xiàn)交互通信的重要模塊,主要通過(guò)以下方法實(shí)現(xiàn):①connect。用戶輸入指定的IP 和端口,通過(guò)“connect()”的方法主動(dòng)向服務(wù)器端發(fā)出連接請(qǐng)求,用于智能手機(jī)客戶端與OTDR 服務(wù)器端的連接。②getInput Stream。獲取輸入流,即自身收到對(duì)方發(fā)送過(guò)來(lái)的數(shù)據(jù)。③getOutputStream。獲取輸出流,即自身向?qū)Ψ桨l(fā)送的數(shù)據(jù)。④DataInputStream。數(shù)據(jù)輸入流,用于接收對(duì)方發(fā)送的測(cè)試文件。⑤Thread。通過(guò)新建一個(gè)繼承自Thread 的類定義一個(gè)線程,然后復(fù)寫“run()”,實(shí)現(xiàn)Android 多線程編程。
OtdrClient 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)如圖2 所示。
圖2 OtdrClient 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)
OtdrSet 類是設(shè)置OTDR 測(cè)試參數(shù)的模塊,主要通過(guò)以下方法實(shí)現(xiàn):①ArrayList。ArrayList 是一個(gè)動(dòng)態(tài)數(shù)據(jù),其容量能自動(dòng)增長(zhǎng),用于提供設(shè)置列表,是日常開(kāi)發(fā)中最常用的List。通過(guò)“clear()”和“add()”清除或添加列表中的內(nèi)容。②ArrayAdapter。只能處理列表項(xiàng)全是文本的數(shù)組適配器,用于每行列表只展示文本的情況。通過(guò)自定義ArrayAdapter,能夠指定設(shè)置列表的格式。
OtdrSet 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)如圖3 所示。
圖3 OtdrSet 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)
OtdrPaint 類是繪制OTDR 測(cè)試曲線并顯示分析結(jié)果的模塊,主要通過(guò)以下方法實(shí)現(xiàn):①RandomAccessFile。用來(lái)訪問(wèn)OTDR 測(cè)試數(shù)據(jù)文件,是非常豐富的文件內(nèi)容訪問(wèn)類,RandomAccessFile 可以自由的訪問(wèn)文件的任何位置,用“seek()”“read()”方式讀取測(cè)試文件的數(shù)據(jù)。②onDraw。最常用的繪圖方法,該方法的入?yún)镃anvas 畫布對(duì)象,在畫布上繪圖相當(dāng)于在屏幕上繪圖,從而根據(jù)讀取的測(cè)試數(shù)據(jù)繪制測(cè)試曲線。③SimpleAdapter。簡(jiǎn)單適配器,不僅能夠顯示文本列表,還能給列表加上圖標(biāo),用于事件點(diǎn)分析列表。SimpleAdapter 的第一個(gè)參數(shù)表示訪問(wèn)整個(gè)Android 應(yīng)用程序接口;第二個(gè)參數(shù)表示生產(chǎn)一個(gè)Map(String,Object)列表選項(xiàng);第三個(gè)參數(shù)表示界面布局的ID,表示該文件作為列表項(xiàng)的組件;第四個(gè)參數(shù)表示該Map 對(duì)象的那些key 對(duì)應(yīng)value 來(lái)生成列表項(xiàng);第五個(gè)參數(shù)表示來(lái)填充的組件Map對(duì)象key 對(duì)應(yīng)的資源依次填充組件,順序有對(duì)應(yīng)關(guān)系。
OtdrPaint 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)如圖4 所示。
圖4 OtdrPaint 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)
服務(wù)端的設(shè)計(jì)是通過(guò)OtdrServer 類實(shí)現(xiàn)的。
OtdrServer 類是實(shí)現(xiàn)交互通信的重要模塊,主要通過(guò)以下方法實(shí)現(xiàn):①構(gòu)造函數(shù)。指定監(jiān)聽(tīng)哪個(gè)端口。②accept。開(kāi)始接受客戶端的連接。有客戶端連上時(shí)就返回一個(gè)Socket對(duì)象,若要持續(xù)監(jiān)聽(tīng)連接,則在循環(huán)語(yǔ)句中調(diào)用該函數(shù)。
OtdrServer 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)如圖5 所示。
手機(jī)客戶端與OTDR 服務(wù)端建立連接后,通過(guò)手機(jī)能遠(yuǎn)程設(shè)置OTDR 的測(cè)試參數(shù)并控制OTDR 進(jìn)行測(cè)試,當(dāng)OTDR接收到測(cè)試指令后進(jìn)行測(cè)試,并將測(cè)試結(jié)果返回到手機(jī)客戶端,手機(jī)客戶端通過(guò)繪制并分析OTDR 測(cè)試數(shù)據(jù)及時(shí)了解光纖網(wǎng)絡(luò)的狀態(tài)。這套軟件系統(tǒng)能夠?yàn)橛脩舻墓饫w運(yùn)維工作帶來(lái)便利。
圖5 OtdrServer 類UI 設(shè)計(jì)與功能實(shí)現(xiàn)