動(dòng)環(huán)監(jiān)控系統(tǒng)中B接口的實(shí)現(xiàn)
作者 陳圓1 粟欣2 1.重慶郵電大學(xué) 通信與信息工程學(xué)院(重慶 400065)2.清華大學(xué) 無線與移動(dòng)通信技術(shù)研究中心(北京 100084)
本文引用地址:http://m.butianyuan.cn/article/201707/362275.htm陳圓(1991-),男,碩士,研究方向:無線專網(wǎng);粟欣,男,研究員,研究方向:移動(dòng)通信、寬帶無線接入。
摘要:基站動(dòng)力環(huán)境(動(dòng)環(huán))監(jiān)控系統(tǒng)中的B接口協(xié)議,規(guī)范了監(jiān)控中心與現(xiàn)場監(jiān)控單元互聯(lián)的數(shù)據(jù)傳輸方式。文章在研究B接口報(bào)文協(xié)議的基礎(chǔ)上,設(shè)計(jì)了一種使用 gSOAP工具的Web Service框架。在Web Service框架下,文章給出了用于基站動(dòng)環(huán)監(jiān)控系統(tǒng)中B接口報(bào)文協(xié)議的編程實(shí)現(xiàn)過程和測試方法。測試結(jié)果表明,使用gSOAP工具能夠簡化B接口報(bào)文協(xié)議實(shí)現(xiàn)的方式,符合監(jiān)控中心與現(xiàn)場監(jiān)控單元通信規(guī)范。
引言
目前基站動(dòng)環(huán)監(jiān)控系統(tǒng)的架構(gòu)分為三層:接入層、傳輸層和業(yè)務(wù)層[1-4]。接入層包含現(xiàn)場監(jiān)控單元(Field Supervision Unit, FSU)和監(jiān)控對象(Supervision Object, SO),SO指的是被監(jiān)控的電源、空調(diào)等設(shè)備及環(huán)境量等。傳輸層包含傳輸節(jié)點(diǎn)設(shè)備和傳輸網(wǎng)絡(luò)設(shè)備等。業(yè)務(wù)層包含集中監(jiān)控中心(Supervision Center, SC)。
為規(guī)范基站動(dòng)環(huán)監(jiān)控系統(tǒng)的建設(shè)標(biāo)準(zhǔn),《中國鐵塔動(dòng)環(huán)監(jiān)控系統(tǒng)統(tǒng)一互聯(lián)B接口技術(shù)規(guī)范》明確了動(dòng)環(huán)監(jiān)控系統(tǒng)互聯(lián)B接口互聯(lián)規(guī)范、B接口定義和報(bào)文協(xié)議[5]。FSU主要的功能是與基站監(jiān)控現(xiàn)場的對象連接,監(jiān)控設(shè)備的運(yùn)行狀態(tài)、控制設(shè)備的運(yùn)行,采集現(xiàn)場的環(huán)境參數(shù)。采集到數(shù)據(jù)之后,將數(shù)據(jù)傳送到SC。當(dāng)出現(xiàn)監(jiān)控異常時(shí),F(xiàn)SU產(chǎn)生告警事件并上報(bào)到SC,SC處理告警后反饋控制命令至FSU,F(xiàn)SU通過控制命令控制智能設(shè)備。圖1表示了SC與FSU之間的B接口報(bào)文協(xié)議定義報(bào)文類型和數(shù)據(jù)流方向。
本文介紹了B接口報(bào)文協(xié)議的內(nèi)容,包括報(bào)文原則、WSDL定義、基本報(bào)文格式的定義;然后在研究B接口報(bào)文協(xié)議的基礎(chǔ)上,引出一種實(shí)現(xiàn)B接口報(bào)文協(xié)議的開源工具gSOAP,描述了它的原理和使用方法;接著設(shè)計(jì)了一種基于 gSOAP開源工具的Web Service框架[6-7];最后在提出的框架下,本文給出了用于基站動(dòng)環(huán)監(jiān)控系統(tǒng)中B接口報(bào)文協(xié)議的編程實(shí)現(xiàn)過程和測試方法。測試結(jié)果表明,使用gSOAP工具能夠簡化B接口報(bào)文協(xié)議實(shí)現(xiàn)的方式,符合監(jiān)控中心與現(xiàn)場監(jiān)控單元通信規(guī)范。
1 B接口報(bào)文協(xié)議
B接口報(bào)文協(xié)議定義了報(bào)文的原則,即SC與FSU之間的接口是基于Web Service技術(shù)的,消息協(xié)議采用擴(kuò)展標(biāo)記語言(eXtensible Markup Language, XML)格式。Web Service是為支持通過網(wǎng)絡(luò)的可互操作的機(jī)器到機(jī)器交互的軟件系統(tǒng),可以使用基于HTTP的簡單對象接入?yún)f(xié)議 (Simple Object Access Protocol, SOAP)進(jìn)行描述[6]。另外,B接口報(bào)文協(xié)議中提供了SC和FSU的網(wǎng)絡(luò)服務(wù)描述語言(Web Services Description Language, WSDL)文件:SCService.wsdl和FSUService.wsdl。這兩個(gè)文件主要是用來描述SC和FSU的Web服務(wù)交互的消息格式、數(shù)據(jù)類型、操作、協(xié)議綁定和服務(wù)地址。
B接口是基于Web Service技術(shù)的,所以采用XML格式,B接口基本的報(bào)文格式定義如表1所示。基本的報(bào)文格式共有兩種類型,分別是請求報(bào)文和響應(yīng)報(bào)文。每種類型的報(bào)文都包含1個(gè)一級節(jié)點(diǎn)和2個(gè)二級節(jié)點(diǎn),例如請求報(bào)文,一級節(jié)點(diǎn)是Request,二級節(jié)點(diǎn)PK_Type包含請求報(bào)文的類型,二級節(jié)點(diǎn)Info包含請求報(bào)文的詳細(xì)內(nèi)容。同樣,響應(yīng)報(bào)文的一級節(jié)點(diǎn)是Response,二級節(jié)點(diǎn)PK_Type包含響應(yīng)報(bào)文的類型,二級節(jié)點(diǎn)Info包含響應(yīng)報(bào)文的詳細(xì)內(nèi)容。
2 接口報(bào)文協(xié)議實(shí)現(xiàn)
2.1 gSOAP
目前Web Service主要通過基于C/C++和JAVA兩種編程語言來實(shí)現(xiàn),使用提供的工具包來定制和發(fā)布Web Service。利用gSOAP自動(dòng)編碼工具實(shí)現(xiàn)Web Service應(yīng)用程序接口,可以簡化實(shí)現(xiàn)客戶端和服務(wù)器端的編碼工作。gSOAP是以HTTP協(xié)議為基礎(chǔ)的通信協(xié)議,以XML文件形式請求遠(yuǎn)程服務(wù),再以XML文件的形式返回執(zhí)行結(jié)果。Web Service中的任何一項(xiàng)服務(wù)都必須實(shí)現(xiàn)一系列遵守SOAP協(xié)議的遠(yuǎn)程過程調(diào)用函數(shù),以公開Web上的服務(wù)供遠(yuǎn)程端調(diào)用,這是完全自動(dòng)完成的。gSOAP服務(wù)函數(shù)接口定義是用一個(gè)標(biāo)準(zhǔn)C/C++頭文件說明的,服務(wù)也可以用WSDL文檔定義。WSDL文檔與gSOAP中的WSDL輸入被預(yù)處理以生成一個(gè)頭文件,這個(gè)頭文件包括服務(wù)函數(shù)的簽名和其他額外的數(shù)據(jù)類型聲明。頭文件由gSOAP編譯器編譯后,生成遠(yuǎn)程調(diào)用服務(wù)的框架和數(shù)據(jù)類型序列化代碼,這些代碼編譯后能鏈接到服務(wù)應(yīng)用程序,在數(shù)據(jù)分組網(wǎng)上作為Web Service。
gSOAP工具箱提供兩個(gè)重要的工具:wsdl2h和soapcpp2。gSOAP的工作流程如圖2所示,詳細(xì)地說明了客戶端和服務(wù)端代碼生成過程的兩個(gè)步驟:WSDL文件作為wsdl2h的輸入,產(chǎn)生接口文件;將接口文件與導(dǎo)入的協(xié)議聲明和自定義序列化程序一起輸入到soapcpp2工具。soapcpp2的默認(rèn)選項(xiàng)是輸出soapClient.cpp和soapServer.cpp,基于這兩個(gè)文件分別編寫客戶端和服務(wù)器的代碼。
2.2 基于Web Service的B接口程序框架
B接口協(xié)議規(guī)范中說明了SC和FSU接入雙方的要求。當(dāng)SC輪詢FSU獲取數(shù)據(jù):溫濕度、電壓、電流、電量、頻率、開關(guān)狀態(tài)等時(shí),F(xiàn)SU為服務(wù)端,SC為客戶端。當(dāng)FSU主動(dòng)上報(bào)設(shè)備事件數(shù)據(jù):告警、狀態(tài)切換等時(shí),F(xiàn)SU為客戶端,SC為服務(wù)端。因此,SC和FSU都需要提供Web Service的客戶端和服務(wù)端功能。如圖3所示,本文提出一種基于Web Service的B接口程序框架。SC端的fsuSvcClient與FSU端的fsuSvcServer互聯(lián),完成SC輪詢及FSU獲取數(shù)據(jù)的功能,定義為FSUService。FSU端的scSvcClient與SC端的scSvcServer互聯(lián),完成FSU主動(dòng)上報(bào)設(shè)備事件數(shù)據(jù)的功能,定義為SCService。fsuSvcClient和 fsuSvcServer作為一個(gè)FSUService的客戶端和服務(wù)端,scSvcClient與scSvcServer作為一個(gè)SCService的客戶端和服務(wù)端。這兩個(gè)Web Service是相互獨(dú)立運(yùn)行的。
2.3 B接口報(bào)文協(xié)議實(shí)現(xiàn)
下面將使用gSOAP工具包來實(shí)現(xiàn)基站動(dòng)環(huán)監(jiān)控系統(tǒng)中的B接口報(bào)文協(xié)議。B接口報(bào)文協(xié)議中提供了SC和FSU的WSDL文件:SCService.wsdl和FSUService.wsdl。下面以實(shí)現(xiàn)SC端和FSU端的SCService為例,F(xiàn)SUService同理。首先,在Linux終端上通過使用gSOAP開發(fā)包中wsdl2h工具編譯SCService.wsdl文件,其命令行為:
wsdl2h -o SCService.h SCService.wsdl
這樣就是生成構(gòu)建Web服務(wù)客戶端和服務(wù)端所需的接口文件SCService.h。
接著使用soapcpp2生成C++文件形式的SOAP框架,具體命令行為:
soapcpp2 SCService.h
命令運(yùn)行完成后會(huì)得到soapServer.cpp和soapClient.cpp。soapServer.cpp中主要是soap_serve_ns1_invoke()函數(shù)的定義,soapClient.cpp中則是soap_call_ns1_invoke()函數(shù)的定義。這兩個(gè)函數(shù)形成了一對遠(yuǎn)程調(diào)用的方法,即在客戶端中調(diào)用了soap_call_ns1_invoke()函數(shù),把數(shù)據(jù)發(fā)送至服務(wù)端。那么服務(wù)端中則會(huì)執(zhí)行soap_serve_ns1_invoke()函數(shù),接收由客戶端發(fā)送過來的數(shù)據(jù),完成數(shù)據(jù)處理后,把結(jié)果返回給soap_serve_ns1_invoke()函數(shù)返回值中。這樣客戶端和服務(wù)端就完成了一次請求/響應(yīng)的通信過程。需要指出的是,SCService.wsdl文件中描述了客戶端和服務(wù)端ns1_invoke函數(shù)。
接下來就是在客戶端中待發(fā)送XML數(shù)據(jù)生成和服務(wù)端接收到XML數(shù)據(jù)后的解析處理和返回給客戶端的響應(yīng)XML數(shù)據(jù)生成。XML數(shù)據(jù)的生成和解析使用的是TinyXML2庫來實(shí)現(xiàn)的。XML數(shù)據(jù)的生成與解析不作為B接口報(bào)文協(xié)議的實(shí)現(xiàn)展開描述。
3 測試與分析
以SCService中的用戶注冊登陸過程來說明一下B接口報(bào)文協(xié)議的測試方法。如圖4所示,在Linux環(huán)境下,使用左側(cè)的終端代表客戶端,右側(cè)的終端代表服務(wù)端。首先在服務(wù)端中運(yùn)行scSvcServer服務(wù),8080為端口參數(shù),然后在客戶端中運(yùn)行scSvcClient,101為用戶注冊登陸類型參數(shù)??蛻舳税褱?zhǔn)備好的LOGIN數(shù)據(jù)以XML文件的形式發(fā)送至服務(wù)端,例如終端顯示[LOGIN]FSU->SC。服務(wù)端處理LOGIN數(shù)據(jù),顯示設(shè)備注冊成功后,生成LOGIN_ACK XML文件數(shù)據(jù)返回給客戶端,例如終端顯示的[LOGIN_ACK]SC->FSU。
從終端顯示的請求報(bào)文和響應(yīng)報(bào)文的內(nèi)容可以看出,客戶端與服務(wù)端交互的XML數(shù)據(jù)是符合B接口基本的報(bào)文格式定義的。每種類型的報(bào)文都包含1個(gè)一級節(jié)點(diǎn)和2個(gè)二級節(jié)點(diǎn),如果是請求報(bào)文,則一級節(jié)點(diǎn)是Request,二級節(jié)點(diǎn)PK_Type包含請求報(bào)文的類型,二級節(jié)點(diǎn)Info包含請求報(bào)文的詳細(xì)內(nèi)容。同樣,響應(yīng)報(bào)文的一級節(jié)點(diǎn)是Response,二級節(jié)點(diǎn)PK_Type包含響應(yīng)報(bào)文的類型,二級節(jié)點(diǎn)Info包含響應(yīng)報(bào)文的詳細(xì)內(nèi)容。
4 結(jié)論
本文設(shè)計(jì)的一種基于gSOAP開源工具的Web Service框架,用于基站動(dòng)環(huán)監(jiān)控系統(tǒng)中B接口報(bào)文協(xié)議的編程實(shí)現(xiàn),能夠減少編程實(shí)現(xiàn)的編碼工作量。測試結(jié)果表明,使用gSOAP工具能夠簡化B接口報(bào)文協(xié)議實(shí)現(xiàn)的方式,符合監(jiān)控中心與現(xiàn)場監(jiān)控單元通信規(guī)范。但是,B接口協(xié)議中還包含了數(shù)據(jù)庫協(xié)議等規(guī)范說明,需要在目前的設(shè)計(jì)上完善B接口的功能。
參考文獻(xiàn):
[1]崔恒源,黎福海,姚雪芬.移動(dòng)通信基站動(dòng)力環(huán)境監(jiān)控系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2009,17(10): 1955-1957.
[2]高翠群.動(dòng)力環(huán)境監(jiān)控系統(tǒng)的消息傳輸協(xié)議設(shè)計(jì)研究[J].軟件工程師, 2010(7):53-54.
[3]何世健.電信機(jī)房遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)與軟件實(shí)現(xiàn)[D].西南交通大學(xué),2013.
[4]黃凱漩.基于B/S模式遠(yuǎn)程監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)[D].南京大學(xué),2011.
[5]C TOWER.中國鐵塔動(dòng)環(huán)監(jiān)控系統(tǒng)統(tǒng)一互聯(lián)B接口技術(shù)規(guī)范(試行)V1.0[S].2014.
[6]ENGELEN R A V,GALLIVAN K A.The gSOAP Toolkit for Web Services and Peer-to-Peer Computing Networks; proceedings of the Ieee/acm International Symposium on CLUSTER Computing and the Grid, F, 2002[C].
[7]VAN ENGELEN R, GUPTA G, PANT S.Developing Web services for C and C++[J].IEEE Internet Computing,2003,7(2):53-61.
本文來源于《電子產(chǎn)品世界》2017年第8期第49頁,歡迎您寫論文時(shí)引用,并注明出處。
評論