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

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

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

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

圖5 OtdrServer 類UI 設計與功能實現