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

圖2 OtdrClient 類UI 設(shè)計與功能實現(xiàn)
OtdrSet 類是設(shè)置OTDR 測試參數(shù)的模塊,主要通過以下方法實現(xiàn):①ArrayList。ArrayList 是一個動態(tài)數(shù)據(jù),其容量能自動增長,用于提供設(shè)置列表,是日常開發(fā)中最常用的List。通過“clear()”和“add()”清除或添加列表中的內(nèi)容。②ArrayAdapter。只能處理列表項全是文本的數(shù)組適配器,用于每行列表只展示文本的情況。通過自定義ArrayAdapter,能夠指定設(shè)置列表的格式。
OtdrSet 類UI 設(shè)計與功能實現(xiàn)如圖3 所示。

圖3 OtdrSet 類UI 設(shè)計與功能實現(xiàn)
OtdrPaint 類是繪制OTDR 測試曲線并顯示分析結(jié)果的模塊,主要通過以下方法實現(xiàn):①RandomAccessFile。用來訪問OTDR 測試數(shù)據(jù)文件,是非常豐富的文件內(nèi)容訪問類,RandomAccessFile 可以自由的訪問文件的任何位置,用“seek()”“read()”方式讀取測試文件的數(shù)據(jù)。②onDraw。最常用的繪圖方法,該方法的入?yún)镃anvas 畫布對象,在畫布上繪圖相當于在屏幕上繪圖,從而根據(jù)讀取的測試數(shù)據(jù)繪制測試曲線。③SimpleAdapter。簡單適配器,不僅能夠顯示文本列表,還能給列表加上圖標,用于事件點分析列表。SimpleAdapter 的第一個參數(shù)表示訪問整個Android 應(yīng)用程序接口;第二個參數(shù)表示生產(chǎn)一個Map(String,Object)列表選項;第三個參數(shù)表示界面布局的ID,表示該文件作為列表項的組件;第四個參數(shù)表示該Map 對象的那些key 對應(yīng)value 來生成列表項;第五個參數(shù)表示來填充的組件Map對象key 對應(yīng)的資源依次填充組件,順序有對應(yīng)關(guān)系。
OtdrPaint 類UI 設(shè)計與功能實現(xiàn)如圖4 所示。

圖4 OtdrPaint 類UI 設(shè)計與功能實現(xiàn)
服務(wù)端的設(shè)計是通過OtdrServer 類實現(xiàn)的。
OtdrServer 類是實現(xiàn)交互通信的重要模塊,主要通過以下方法實現(xiàn):①構(gòu)造函數(shù)。指定監(jiān)聽哪個端口。②accept。開始接受客戶端的連接。有客戶端連上時就返回一個Socket對象,若要持續(xù)監(jiān)聽連接,則在循環(huán)語句中調(diào)用該函數(shù)。
OtdrServer 類UI 設(shè)計與功能實現(xiàn)如圖5 所示。
手機客戶端與OTDR 服務(wù)端建立連接后,通過手機能遠程設(shè)置OTDR 的測試參數(shù)并控制OTDR 進行測試,當OTDR接收到測試指令后進行測試,并將測試結(jié)果返回到手機客戶端,手機客戶端通過繪制并分析OTDR 測試數(shù)據(jù)及時了解光纖網(wǎng)絡(luò)的狀態(tài)。這套軟件系統(tǒng)能夠為用戶的光纖運維工作帶來便利。

圖5 OtdrServer 類UI 設(shè)計與功能實現(xiàn)