白小軍,楊 軍,喻 鈞
(西安工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,陜西 西安 710032)
隨著廣播電視事業(yè)的發(fā)展,廣播電臺(tái)對(duì)電視發(fā)射機(jī)的監(jiān)控要求越來越高,從原有的本機(jī)自動(dòng)化提高到臺(tái)內(nèi)的自動(dòng)化監(jiān)控,進(jìn)而發(fā)展到遠(yuǎn)距離的發(fā)射臺(tái)自動(dòng)化監(jiān)控。另一方面,網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展也引發(fā)了控制領(lǐng)域深刻的技術(shù)變革,網(wǎng)絡(luò)化的遠(yuǎn)程控制以及基于Web的遠(yuǎn)程控制已成為技術(shù)發(fā)展的主流方向。開發(fā)基于Web的集中監(jiān)控系統(tǒng),可以有效提高管理效率,節(jié)約人力,真正實(shí)現(xiàn)“有人值班、無人值守”的管理目標(biāo)[1-3]。
遠(yuǎn)程監(jiān)控系統(tǒng)要解決的首要問題是管理主機(jī)和控制設(shè)備間的通信問題,即設(shè)備的運(yùn)行狀態(tài)如何傳遞給管理主機(jī),管理者的控制命令如何發(fā)送給被控設(shè)備。傳統(tǒng)的控制設(shè)備一般都通過串口(RS-232和RS-485)與上位機(jī)通信,這種方式通信距離很短,難以進(jìn)行遠(yuǎn)程控制;借助新興的設(shè)備服務(wù)器技術(shù),可以方便地將串口設(shè)備接入網(wǎng)絡(luò),實(shí)現(xiàn)串口協(xié)議與網(wǎng)絡(luò)協(xié)議之間的轉(zhuǎn)換,從而為串口設(shè)備的網(wǎng)絡(luò)化控制創(chuàng)造了條件。
在文獻(xiàn)[4]中,描述了如何通過CGI方式,在設(shè)備服務(wù)器上編程實(shí)現(xiàn)基于Web的設(shè)備監(jiān)控;在文獻(xiàn)[5]中,描述了如何通過XML與XSL技術(shù)將監(jiān)控系統(tǒng)的頁(yè)面展示邏輯轉(zhuǎn)移到客戶端,有效減輕設(shè)備服務(wù)器的負(fù)荷。兩篇文獻(xiàn)都存在一個(gè)局限,即都是針對(duì)單臺(tái)設(shè)備的監(jiān)控,無法實(shí)現(xiàn)整個(gè)發(fā)射臺(tái)甚至多個(gè)發(fā)射臺(tái)的集中監(jiān)控。
在控制系統(tǒng)中引入設(shè)備服務(wù)器后,可將一臺(tái)控制設(shè)備當(dāng)作一個(gè)網(wǎng)絡(luò)設(shè)備來使用,設(shè)備服務(wù)器充當(dāng)了被管設(shè)備代理的角色;這樣,控制系統(tǒng)管理的問題就可以轉(zhuǎn)化為網(wǎng)絡(luò)管理的問題來解決。而在網(wǎng)絡(luò)管理領(lǐng)域已有了一系列成熟的協(xié)議,SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)成為不錯(cuò)的選擇。
SNMP是網(wǎng)絡(luò)管理領(lǐng)域中的一項(xiàng)標(biāo)準(zhǔn)協(xié)議,用于實(shí)現(xiàn)路由器等網(wǎng)絡(luò)設(shè)備的信息采集和管理。SNMP采用“管理者—代理”的工作模式,如圖1所示。管理者負(fù)責(zé)發(fā)出管理操作的指令,并接收來自代理的響應(yīng)或事件通告。代理位于被管設(shè)備一側(cè),充當(dāng)管理者和設(shè)備之間的中介,把來自管理者的命令或信息請(qǐng)求轉(zhuǎn)換為本設(shè)備特有的指令以執(zhí)行,然后返回設(shè)備的信息;另外,代理也可以將設(shè)備系統(tǒng)中發(fā)生的事件主動(dòng)通知給管理者。
圖1 SNMP的管理模型[5]
SNMP協(xié)議中的三大要素是管理信息結(jié)構(gòu)(SMI)、管理信息庫(kù)(MIB)和SNMP通信協(xié)議。SMI定義了SNMP框架中可用的管理信息的類型和語(yǔ)法,為描述被管對(duì)象以及如何交換管理信息奠定了基礎(chǔ);MIB以層次化的方式組織設(shè)備的管理信息,樹中的每一個(gè)節(jié)點(diǎn)都代表著設(shè)備的某項(xiàng)運(yùn)行狀態(tài)數(shù)據(jù),都有其唯一的標(biāo)識(shí)號(hào)(OID),管理站就是通過OID來指定要訪問的數(shù)據(jù)項(xiàng);SNMP通信協(xié)議定義了管理者和代理之間通信的消息類型和消息格式,常用的5種消息類型是GetRequest,GetNextRequest,Get?Response,SetRequest,Trap[6-8]。
將SNMP引入設(shè)備監(jiān)控領(lǐng)域,可以在設(shè)備服務(wù)器上編程實(shí)現(xiàn)SNMP代理的功能,管理者通過Get原語(yǔ)可以采集設(shè)備的運(yùn)行數(shù)據(jù),通過Set原語(yǔ)可以控制設(shè)備執(zhí)行指定的動(dòng)作,當(dāng)設(shè)備發(fā)生重大告警時(shí),代理可以通過Trap原語(yǔ)及時(shí)上報(bào)給管理者。這樣,監(jiān)控系統(tǒng)中的數(shù)據(jù)采集、命令控制等功能都得以實(shí)現(xiàn)。
基于SNMP協(xié)議的發(fā)射臺(tái)集中監(jiān)控系統(tǒng)總體結(jié)構(gòu)如圖2所示。
監(jiān)控系統(tǒng)中的主要部件有:
1)被管設(shè)備。發(fā)射機(jī)控制器作為實(shí)際的被管設(shè)備,實(shí)現(xiàn)發(fā)射機(jī)內(nèi)部各部件的運(yùn)行控制。它通過串口與設(shè)備服務(wù)器通信,接收SNMP代理發(fā)送的控制命令,執(zhí)行該命令,并返回設(shè)備的運(yùn)行狀態(tài)數(shù)據(jù)。
2)設(shè)備代理。設(shè)備服務(wù)器作為被管設(shè)備的代理。一方面通過串口與被管設(shè)備相連,采集設(shè)備的運(yùn)行數(shù)據(jù),并向設(shè)備發(fā)送控制命令;另一方面通過網(wǎng)口與集中監(jiān)控服務(wù)器相連,實(shí)現(xiàn)SNMP的Get,Set,Trap等原語(yǔ)操作。在代理中,需要針對(duì)控制設(shè)備特有的管理信息項(xiàng)定制MIB,維護(hù)設(shè)備的狀態(tài)信息。
3)集中監(jiān)控服務(wù)器。作為集中監(jiān)控系統(tǒng)的服務(wù)端,該服務(wù)器具有數(shù)據(jù)采集、客戶響應(yīng)以及設(shè)備控制三項(xiàng)核心職能:一是采用輪詢的方式從代理處采集設(shè)備的運(yùn)行狀態(tài)數(shù)據(jù),保存到數(shù)據(jù)庫(kù)中,供前臺(tái)程序使用;二是接收客戶端發(fā)送的查詢指令,動(dòng)態(tài)構(gòu)造設(shè)備的運(yùn)行狀態(tài)顯示界面;三是接收客戶端發(fā)送的控制命令,轉(zhuǎn)換成SNMP Set指令發(fā)送給代理,控制設(shè)備執(zhí)行指定的動(dòng)作。
4)管理客戶端。監(jiān)控人員使用客戶端連接到監(jiān)控服務(wù)器,查詢?cè)O(shè)備狀態(tài),并向設(shè)備發(fā)送控制命令。
5)手機(jī)客戶端。在用戶不方便上網(wǎng)的情況下,可以通過手機(jī)短信的方式,查詢?cè)O(shè)備的運(yùn)行狀態(tài),或向設(shè)備發(fā)送控制命令。
6)GSM調(diào)制器。作為手機(jī)短信收發(fā)設(shè)備,可以將設(shè)備的運(yùn)行狀態(tài)信息發(fā)送給手機(jī)客戶端(例如當(dāng)設(shè)備發(fā)生重大告警或故障時(shí)向管理手機(jī)發(fā)送告警短信),也可以接收手機(jī)客戶端發(fā)送過來的查詢或控制短信,并交給監(jiān)控服務(wù)器做進(jìn)一步的處理。
設(shè)備服務(wù)器作為被管設(shè)備的代理,在系統(tǒng)中起著至關(guān)重要的作用。在管理者一側(cè),它要維護(hù)設(shè)備特有的MIB信息,并實(shí)現(xiàn)SNMP的Get,Set及Trap等原語(yǔ)操作;在設(shè)備一側(cè),它要通過串口與設(shè)備通信,實(shí)現(xiàn)數(shù)據(jù)采集與命令控制。
本系統(tǒng)選擇美國(guó)Lantronix公司生產(chǎn)的UDS1100設(shè)備服務(wù)器,它提供了簡(jiǎn)單、廉價(jià)的串口設(shè)備聯(lián)網(wǎng)方案,內(nèi)置精簡(jiǎn)的多任務(wù)操作系統(tǒng),支持ARP,IP,TCP,UDP等常用的網(wǎng)絡(luò)通信協(xié)議,可以透明地實(shí)現(xiàn)串口數(shù)據(jù)與網(wǎng)絡(luò)數(shù)據(jù)之間的協(xié)議轉(zhuǎn)換;同時(shí),它還提供了CGI,SNMP等編程接口,可以方便地?cái)U(kuò)展功能。這里將使用其SNMP API,開發(fā)電視發(fā)射機(jī)設(shè)備的SNMP代理。
設(shè)備代理軟件的總體結(jié)構(gòu)如圖3所示。
1)數(shù)據(jù)采集進(jìn)程:設(shè)備代理上運(yùn)行的主進(jìn)程,控制系統(tǒng)以指定的時(shí)間間隔不斷向控制器發(fā)送查詢消息(調(diào)用命令處理組件的功能),獲取設(shè)備的運(yùn)行狀態(tài)信息,并將這些信息保存到MIB中供SNMP組件訪問。
2)SNMP組件:實(shí)現(xiàn)SNMP協(xié)議的各項(xiàng)原語(yǔ)操作。處理網(wǎng)管應(yīng)用程序發(fā)來的Get和Set指令,返回設(shè)備的運(yùn)行狀態(tài)(訪問MIB變量獲得),或通過命令處理組件向設(shè)備發(fā)送控制命令;當(dāng)設(shè)備有重大告警時(shí),也通過該組件向管理者發(fā)送Trap。
3)命令處理組件:處理SNMP組件發(fā)出的Set指令,以及數(shù)據(jù)采集進(jìn)程發(fā)出的Get指令;調(diào)用串口通信組件的功能,向設(shè)備控制器發(fā)送查詢或控制命令,并接收設(shè)備的運(yùn)行狀態(tài)數(shù)據(jù)以更新MIB。
4)串口通信組件:封裝了串口消息的構(gòu)造和收發(fā)操作,使得命令處理組件可以很方便地通過串口向控制器發(fā)送消息,獲取設(shè)備運(yùn)行參數(shù)或控制設(shè)備動(dòng)作。
代理系統(tǒng)設(shè)計(jì)時(shí)要注意兩個(gè)方向的接口:在被控設(shè)備一側(cè),要明確控制器支持的消息接口,即串口命令及響應(yīng)的數(shù)據(jù)包格式,針對(duì)每一條串口命令設(shè)計(jì)相應(yīng)的命令處理組件,實(shí)現(xiàn)被控設(shè)備的數(shù)據(jù)采集以及命令控制;在網(wǎng)絡(luò)管理一側(cè),要明確管理信息結(jié)構(gòu),合理設(shè)計(jì)私有MIB,并針對(duì)MIB變量設(shè)計(jì)SNMP組件,實(shí)現(xiàn)Get,Set及Trap等原語(yǔ)操作。
為方便串口消息的收發(fā),串口通信組件中設(shè)計(jì)了兩個(gè)核心的函數(shù):
1)根據(jù)要發(fā)送的控制命令構(gòu)造串口消息包,并保存到發(fā)送緩沖區(qū),即:
2)發(fā)送串口消息并接收響應(yīng),即:
根據(jù)用戶的監(jiān)控要求,本系統(tǒng)需實(shí)現(xiàn)發(fā)射機(jī)配置信息、運(yùn)行狀態(tài)信息及PA運(yùn)行數(shù)據(jù)、日志數(shù)據(jù)等基本信息查詢功能,同時(shí)還要實(shí)現(xiàn)開/關(guān)機(jī)、重啟、激勵(lì)器切換等常用的控制功能。為此,設(shè)計(jì)如下的命令處理組件:
被控設(shè)備的管理信息維護(hù)在MIB中,這里需要針對(duì)發(fā)射機(jī)的運(yùn)行狀態(tài)和控制要求定制MIB,如圖4所示。
其監(jiān)控?cái)?shù)據(jù)分類保存到txQry(運(yùn)行狀態(tài)信息)、txCfg(配置信息)、txSet(控制命令)、fpaTable(功放運(yùn)行狀態(tài)信息,表格結(jié)構(gòu))、txLogs(日志信息)幾個(gè)節(jié)點(diǎn)下。通過SNMP Get或GetNext操作可獲取MIB中保存的信息數(shù)據(jù);若要控制設(shè)備執(zhí)行某項(xiàng)動(dòng)作,則通過SNMP Set原語(yǔ),設(shè)置txSet節(jié)點(diǎn)下的某個(gè)變量的值,這樣SNMP組件將自動(dòng)調(diào)用命令處理組件的相關(guān)函數(shù),完成指定的控制操作。
遠(yuǎn)程監(jiān)控服務(wù)器的總體結(jié)構(gòu)如圖5所示。該系統(tǒng)具有3個(gè)核心進(jìn)程,即數(shù)據(jù)采集進(jìn)程、集中監(jiān)控進(jìn)程和短信監(jiān)控進(jìn)程。
1)數(shù)據(jù)采集進(jìn)程。該進(jìn)程隨系統(tǒng)的啟動(dòng)而啟動(dòng),并一直在后臺(tái)運(yùn)行,按一定的時(shí)間間隔定期采集各設(shè)備的運(yùn)行數(shù)據(jù)并保存到數(shù)據(jù)庫(kù)中備用。
2)集中監(jiān)控進(jìn)程。該進(jìn)程在前臺(tái)運(yùn)行,接收并處理用戶的請(qǐng)求。若是查詢請(qǐng)求,則從數(shù)據(jù)庫(kù)中檢索設(shè)備的運(yùn)行狀態(tài)信息反饋給用戶;若是命令請(qǐng)求,則轉(zhuǎn)化為SET指令發(fā)送給設(shè)備代理。由于采用了基于Web的監(jiān)控方案,該進(jìn)程演變?yōu)閃eb服務(wù)器進(jìn)程。
3)短信監(jiān)控進(jìn)程。該進(jìn)程一直在后臺(tái)運(yùn)行,監(jiān)聽本機(jī)的串行端口(連接GSM調(diào)制器);當(dāng)收到管理員發(fā)送的短信命令時(shí),解析并執(zhí)行該命令,將結(jié)果反饋給管理手機(jī);當(dāng)數(shù)據(jù)采集進(jìn)程發(fā)現(xiàn)重大告警信息,或設(shè)備代理發(fā)來Trap消息時(shí),該進(jìn)程還要自動(dòng)構(gòu)造告警短信,并通過短信操作組件發(fā)送給管理手機(jī)。
服務(wù)器系統(tǒng)設(shè)計(jì)的難點(diǎn)在于數(shù)據(jù)采集部分,它要周期性地輪詢所有代理以采集設(shè)備的運(yùn)行數(shù)據(jù);根據(jù)實(shí)時(shí)性要求,輪詢間隔不應(yīng)超過10 s??紤]到系統(tǒng)中監(jiān)控的設(shè)備數(shù)量眾多,每臺(tái)設(shè)備的數(shù)據(jù)采集都會(huì)產(chǎn)生一定的延遲,若按順序逐個(gè)采集,時(shí)延就會(huì)累積起來,根本不能滿足實(shí)時(shí)性的要求。為解決這一問題,必須采用多線程采集。
數(shù)據(jù)采集模塊的運(yùn)作過程如圖6所示。它由一個(gè)定時(shí)器(圖中的Timer組件)觸發(fā)運(yùn)行,每當(dāng)定時(shí)事件到來時(shí),自動(dòng)檢索采集組件(Qry_Task)的實(shí)例并調(diào)用其execu?teTask()方法啟動(dòng)數(shù)據(jù)采集;在executeTask()方法中,首先要獲得所有設(shè)備的列表(調(diào)用QryDAO的getTXList()方法),然后針對(duì)每個(gè)設(shè)備分別啟動(dòng)采集線程;Poll_Thread為線程類,它調(diào)用SNMP組件的功能以訪問代理,并將采集到的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。
Web應(yīng)用的用戶界面一般在服務(wù)器端動(dòng)態(tài)生成,然后將產(chǎn)生的HTML代碼傳遞給客戶端,由瀏覽器展示給用戶。將這種工作模式應(yīng)用到集中監(jiān)控系統(tǒng)中存在兩個(gè)問題:首先,監(jiān)控界面的生成邏輯比較復(fù)雜,要根據(jù)設(shè)備的配置信息及運(yùn)行狀態(tài)動(dòng)態(tài)構(gòu)造并不斷刷新,大大增加了服務(wù)器的處理負(fù)荷;其次,傳統(tǒng)的Web界面一般都采用模板的方式構(gòu)造,界面形式相對(duì)固定,而監(jiān)控系統(tǒng)中往往同時(shí)并存多種不同型號(hào)的設(shè)備,其監(jiān)測(cè)參數(shù)有所區(qū)別,進(jìn)而監(jiān)控界面也會(huì)有所區(qū)別,模板的方式很難適應(yīng)。這樣,如何動(dòng)態(tài)構(gòu)造監(jiān)控界面就成為一項(xiàng)具有挑戰(zhàn)性的工作。
使用XML與XSLT相結(jié)合的技術(shù)可以較好的解決這一難題。XML作為描述數(shù)據(jù)的語(yǔ)言,擴(kuò)展性極強(qiáng),允許用戶自定義標(biāo)記,從而可以簡(jiǎn)潔、自然地組織數(shù)據(jù)。XSLT可以對(duì)XML進(jìn)行轉(zhuǎn)換,改變其輸出方式,一種常用的轉(zhuǎn)換方法是將XML轉(zhuǎn)換為HTML以便在瀏覽器中展示,這樣可以將數(shù)據(jù)的表示與數(shù)據(jù)本身相分離,提供更大的處理靈活性?;谶@樣的思路,可以將監(jiān)控?cái)?shù)據(jù)與監(jiān)控界面的生成邏輯分離開來,在服務(wù)器端獲取監(jiān)控?cái)?shù)據(jù),然后交給客戶端構(gòu)造用戶界面。
Web監(jiān)控界面的生成過程如圖7所示。在服務(wù)器端,Web組件將設(shè)備的配置參數(shù)及實(shí)時(shí)運(yùn)行數(shù)據(jù)包裝到一個(gè)XML文檔中,然后根據(jù)設(shè)備的型號(hào)選擇一個(gè)合適的XSLT文檔,作為樣式表附加給XML。這兩個(gè)文檔會(huì)隨響應(yīng)一起發(fā)送給客戶端,由瀏覽器中的XML處理程序進(jìn)行轉(zhuǎn)換,生成最終的HTML展示給用戶。
這樣處理的好處顯而易見:首先,充分發(fā)揮了分布式計(jì)算的優(yōu)勢(shì),有效降低了服務(wù)器的負(fù)荷;其次,將數(shù)據(jù)的表示與數(shù)據(jù)本身相分離會(huì)提供更好的擴(kuò)展性,例如,若以后想引入WAP客戶端,那么,Web組件中生成監(jiān)控?cái)?shù)據(jù)的代碼將不用作任何改動(dòng),只需針對(duì)WAP界面設(shè)計(jì)新的XSL即可。
在控制系統(tǒng)中引入設(shè)備服務(wù)器,可以方便地將串口的控制設(shè)備接入網(wǎng)絡(luò);若在設(shè)備服務(wù)器上編程實(shí)現(xiàn)代理的功能,則可以使用網(wǎng)絡(luò)管理領(lǐng)域的技術(shù)和方法來實(shí)現(xiàn)設(shè)備監(jiān)控。本文針對(duì)某電視設(shè)備有限公司電視發(fā)射機(jī)遠(yuǎn)程集中監(jiān)控系統(tǒng)的實(shí)際需求,將SNMP協(xié)議引入設(shè)備監(jiān)控領(lǐng)域,設(shè)計(jì)了基于Web的發(fā)射臺(tái)遠(yuǎn)程集中監(jiān)控系統(tǒng)。本系統(tǒng)已在國(guó)內(nèi)外很多家電視臺(tái)中投入使用,穩(wěn)定運(yùn)行,驗(yàn)證了方案的有效性。
[1]吳升恒.廣播電視發(fā)射中心綜合監(jiān)控與管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué)軟件學(xué)院,2009.
[2]劉行兵,牟占生,孫斌.電視發(fā)射臺(tái)遠(yuǎn)程監(jiān)控系統(tǒng)的實(shí)現(xiàn)[J].電視技術(shù),2008,32(11):70-71.
[3]周春來,趙成安,孫芳.基于嵌入式Web的發(fā)射機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)[J].控制工程,2008(9):605-609.
[4]白小軍,羅鈞旻.基于WEB的發(fā)射機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)[J].通信技術(shù),2008(9):59-61.
[5]蘇振濤,羅鈞旻,白小軍.基于設(shè)備服務(wù)器的電視發(fā)射機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)[J].計(jì)算機(jī)測(cè)量與控制,2009(10):1883-1886.
[6]岑賢道,安常青.網(wǎng)絡(luò)管理協(xié)議及應(yīng)用開發(fā)[M].北京:清華大學(xué)出版社,1999.
[7]CASE J,F(xiàn)EDOR M,SCHOFFSTALL M,et al.IETF RFC1157,A simple network management protocol(SNMP)[S].1990.
[8]王曉東,楊學(xué)海.SNMP在C/S模式遠(yuǎn)程監(jiān)控管理系統(tǒng)設(shè)計(jì)中的應(yīng)用[J].電訊技術(shù),2010(1):87-91.