白小軍,楊 軍
(西安工業大學 計算機科學與工程學院,陜西 西安 710032)
為了保證廣播電視節目的穩定播出,需要對電視發射機的運行狀態進行監測和控制[1]。目前,網絡化的遠程監控已成為控制技術發展的一個主流方向,已有很多文獻介紹基于Web的發射臺遠程控制方案[2-5]。但有一個實際困難是:很多電視發射臺都建立在山頂,難以接入Inter?net,而人工現場監控又費時費力,難以做到全天候監控。這樣就要求有一種不依賴于Internet的便捷監控手段。
短消息服務(Short Messaging Service,SMS)作為移動網絡的一項基本業務,以其實現簡單、成本低廉、可靠性高等優勢,在各行各業得到了廣泛的應用[6-7]。目前,工業領域中的很多數據采集及遠程維護系統都用到了短消息服務。
將短消息服務引入發射臺遠程集中監控系統,可以將發射機的運行狀態以短信的形式發送給管理人員,也可以接收管理人員發來的短信命令以控制發射機執行指定的動作,從而實現完整的控制與反饋,真正做到“無人值守,24小時監控”。
傳統的控制設備一般都通過串口(RS-232和RS-485)與上位機通信,數據傳輸距離很短,難以實現遠程控制。借助近些年出現的設備服務器技術,可以方便地將串口設備接入網絡,從而為網絡化監控創造了條件。
現代的電視發射機多配有控制器,可以采集各部件的運行參數并控制其動作。控制器一般都預留串口,并內置了應用層通信協議。上位機只要按協議格式向串口發送特定的消息,控制器就可以識別并執行相應的動作。借助一臺設備服務器,就可以將一臺發射機接入網絡。
短信收發設備又稱GSM Model(短信貓),也設計有串口與上位機通信,可以使用AT指令來控制短信收發。同理,借助設備服務器,也可以將短信收發設備接入網絡,從而與控制設備并網,如圖1所示。從圖1中可以看出,一組控制設備最終通過短信收發設備接入了GSM網絡,為短信集中監控創造了條件。

圖1 電視發射臺短信控制系統總體結構
設備服務器一般有兩種工作模式:一是透明傳輸模式,即串口數據不作任何處理打包成網絡數據(一般使用TCP或UDP包),而網絡數據也在解包后不作任何處理發往串口;二是網關模式,即在設備服務器上編程,實現定制的處理功能。顯然,第二種模式提供了更大的靈活性,可以滿足本系統的設計要求。
本系統選擇美國Lantronix公司的UDS1100設備服務器,設備代理及短信服務器軟件都運行在該平臺上。該平臺內置有精簡的多任務操作系統,使用時間片輪轉的方式進行并發處理;支持RS-232及RS-485接口,也支持TCP/IP協議棧中的常用協議;在此基礎上,提供了應用程序開發工具包,即一系列C語言的API,可以編程訪問串口和網絡接口。本系統中的串口通信采用RS-232協議,網絡消息收發則采用UDP協議。
設備服務器上的軟件結構如圖2所示。上層的應用軟件主要分為3個模塊:串口通信模塊、網絡通信模塊和主控模塊。前兩個模塊封裝了串口和網絡通信數據收發的常用函數,以方便主控程序調用;主控程序作為系統的主進程,實現核心處理功能。

圖2 設備服務器上的軟件體系結構
從總體上看,本系統采用了“管理者—代理”的體系結構。靠近發射機的設備服務器充當代理的角色,它要維護發射機的運行狀態數據以便管理者查詢,當管理者發來控制命令時,它還要控制發射機執行指定的動作。而靠近短信收發器的設備服務器則充當了管理者的角色,管理所有的代理,并為手機用戶提供服務。
設備代理是系統設計的關鍵,其主要功能體現在4個方面:1)定期采集并維護設備的運行狀態數據;2)處理管理者發來的查詢請求,返回請求數據;3)處理管理者發來的命令請求,控制設備執行指定的動作;4)當設備的關鍵信息項發生變化時,主動通知管理者。
針對電視發射機的管理要求,需要定制管理信息結構,以維護設備的運行數據,所以定義了如下的數據結構:

在串口一側,為采集設備數據或控制設備動作,需要通過串口向控制器發送特定的消息,并接收反饋,所以設計如下的串口通信組件:

在網絡一側,要接收管理者發送的查詢或命令請求,并將設備狀態或告警信息發送給管理者,所以設計了如下的UDP通信組件:

主控程序的運行流程如圖3所示。在系統初始化完成后,就進入一個永真循環,保證程序一直運行而不退出。循環內部有兩個代碼塊,分別負責串口通信異常和正常兩種情況下的數據處理。代理首先通過串口向發射機發送查詢配置信息的命令,若正常返回結果,則說明設備連接正常;否則,進入異常處理流程,向短信服務器發送設備離線消息(短信服務器會將該消息通過GSM Mod?el發送到管理員手機上),并繼續測試串口,直到通信正常。在正確獲取發射機配置信息的前提下,程序將進入正常處理的循環,按順序執行兩項處理:一是通過串口采集設備的運行數據,更新內存中維護的數據集,若發現設備的運行狀態發生變化,則發送告警消息;二是檢測有沒有收到新的短信命令,若有,則處理該命令(對于查詢指令,直接向短信服務器發送狀態數據包;而對于控制指令,則通過串口向設備發送控制消息)。
短信服務器的主要功能體現在3個方面:1)后臺維護。集中管理所有設備信息,維護其代理地址、管理員手機號及操作密碼等;2)命令處理。接收管理手機發送的短信命令,轉化成UDP消息發往指定的代理;3)消息處理。接收代理發送的告警消息和狀態消息,轉化為短信發送到指定的手機上。

圖3 設備代理上的主控程序流程
為同時監控多臺發射機,需要為每臺設備指定一個設備號、設備名稱和代理地址;為實現系統的訪問控制,需要設置一組管理手機號碼,并為每個號碼分別設置查詢密碼和操作密碼。顯然,這些信息需要長期存儲,所以保存在UDS1100內置的Flash存儲器中,當短信服務器啟動時,自動將這些信息讀入內存以便主控進程訪問。為方便維護這些管理信息,可以在UDS1100上進行CGI編程,提供Web接口進行操作[4-5]。
短信服務器上的主控程序流程如圖4所示。系統初始化完成后就進入主控循環,不斷處理來自設備代理的UDP消息以及來自GSM Model的短消息。當檢測到UDP消息到來時,根據該代理的IP地址檢索其連接的發射機名稱及管理員手機號,并根據消息體構造短信內容,通過GSM Model發送短信到該手機。當檢測到短信命令到來時,首先要從消息體中獲取手機號及操作密碼進行驗證,以確保操作的合法性;然后再解析短信內容得到目標主機的代碼及控制命令;最后根據主機代碼查到該代理的IP地址,并向其發送UDP消息。

圖4 短信服務器上的主控程序流程
該模塊設計的一個難點是解決串口爭用問題:在網絡一側,一個短信服務器可以連接多個設備代理,但在串口上,它只能連接一個短信收發器,這就存在爭用串口的可能;另外,Model發送一條短信的時延很長,通常都在10 s以上,這就意味著,當短時間內有多條UDP消息到來時,串口將來不及處理,很容易造成消息丟失。使用消息隊列可以有效解決該問題。消息隊列是一塊內存緩沖區,用以對UDP消息進行排隊處理。該隊列設有兩個指針,分別指向隊頭和隊尾;當一個UDP消息到來時,自動被壓入隊尾;而在主控程序中,每輪循環都要檢測隊列頭指針,若有新消息,并且串口狀態為就緒,則處理該消息,否則跳過該步驟,等待下一輪循環處理。
從圖1可以看出,本系統中有發射機、作為發射機代理的設備服務器、作為短信代理的設備服務器、短信收發設備及用戶手機等多種部件,各部件之間密切配合,需要制定一系列的通信規約。
1)設備服務器和發射機之間的串口通信規約
發射機的控制器和設備服務器之間使用RS-232通信,其消息結構如表1。

表1 發射機控制器與設備服務器之間的串口通信消息結構
表1中STX和ETX分別代表起始位和結束位;KEY表示消息類別,例如0x80代表上位機發往下位機的控制命令,0x81代表下位機向上位機返回的數據等;LENGTH表示消息正文的長度;MESSAGE為消息正文內容,包含控制命令以及反饋數據等;BCC為校驗碼,用于驗證消息的完整性。
在消息正文中,又定義了一系列的控制命令,例如TXC:CFG命令用于獲取發射機的配置信息,TXC:QRY命令用于獲取發射機的運行狀態信息,TXC:CNTTX0代表關機命令,TXC:CNTTX1代表開機命令。
2)短信服務器和短信收發器之間的串口通信規約
GSM Model通過串口連接到短信服務器,標準的Model都可以使用AT指令來進行控制。由于AT指令涉及到通信的細節和交互過程,編程不夠方便,所以本系統選用的GSM Model又對AT指令做了一層封裝,使用約定好的文本消息結構收發短信。
發送短信的串口消息格式為“%SSMS”+“字符編碼方式”+“手機號”+“短信內容”。
其中:%SSMS為消息起始標記;字符編碼方式為一個數字字符,0代表本短信內容采用UTF編碼,1代表采用ASCII編碼;手機號為目標手機的號碼。
例如,短信服務器向串口發送消息“%SSMS0,18999999999,TX01串口通信中斷”,表示向手機號為18999999999的用戶發送“TX01串口通信中斷”的短信。
短信服務器接收的串口消息格式為“$SMS”+“手機號碼”+“字符編碼方式”+“內容長度”+“短信內容”。
例 如 ,收 到“ $SMS+8618999999999,ASC,14,TX01#ON#123456”串口消息,表示號碼為18999999999的手機發來一條短信,要求控制代號TX01的發射機執行開機指令,在短信內容中還附有該用戶的操作密碼,為“123456”。
3)設備代理和短信服務器之間的UDP通信規約
設備代理和短信服務器之間使用UDP Socket通信。
從設備代理到短信服務器要發送3種消息,分別是設備運行狀態信息、設備告警信息、串口通信狀態信息。這里使用3個字母代表消息類別,一串數字字符代表消息內容。例如COM0代表串口通信中斷、COM1代表串口通信恢復;又如ALM0100102代表一條設備告警信息,ALM后面的每位數字分別代表發射機一個關鍵部件的告警狀態,0表示正常,1表示告警,2表示重大告警。設備代理將消息代碼傳遞給短信服務器,后者再將代碼轉換為文字內容發送給管理手機。
短信服務器發給設備代理的消息主要有兩種,一是查詢命令,二是控制命令,都使用簡寫的命令字表示。例如QRY表示查詢設備當前工作參數,ON表示開機,OFF表示關機等。
4)用戶手機到短信收發器之間的短信格式規約
管理人員可以通過手機發送短信命令,格式為“Pass?word1”+“#”+發射機編碼+“#”+命令字+“#”+“Password2”。
其中Password1為GSM Model的驗證口令;Password2為用戶的操作口令;發射機編碼代表了不同的發射機;命令字代表本次要執行的命令。GSM Model收到短信后,首先驗證Password1是否合法,若驗證通過,則將后面的內容打包后通過串口發送給短信服務器,否則丟棄該短信。在短信中使用“#”分隔命令參數,以便于短信服務器切分各參數。例如,發送短信“123456#TX01#QRY#654321”表示向TX01發射機發送一條查詢指令,短信貓的驗證口令為“123456”,該手機用戶的操作口令為“654321”。
本文將短消息服務引入遠程監控領域,徹底解決了偏遠環境中的數據采集和遠程控制問題;在對時延要求不太嚴格的應用背景下,提出了一種非常廉價的遠程監控方案。實際運行結果表明:在GSM信號能夠覆蓋到的范圍,該系統都能夠穩定、高效的運行。
[1]吳升恒.廣播電視發射中心綜合監控與管理系統的設計與實現[D].廈門:廈門大學軟件學院,2009.
[2]劉行兵,牟占生,孫斌.電視發射臺遠程監控系統的實現[J].電視技術,2008,32(11):70-71.
[3]周春來,趙成安,孫芳.基于嵌入式Web的發射機遠程監控系統[J].控制工程,2008(5):605-609.
[4]白小軍,羅鈞旻.基于WEB的發射機遠程控制系統設計[J].通信技術,2008(9):59-61.
[5]蘇振濤,羅鈞旻,白小軍.基于設備服務器的電視發射機遠程監控系統[J].計算機測量與控制,2009,17(10):1883-1886.
[6]葛永明,程文鋒,饒琨.基于SMS通用型遠程無線監控系統的實現[J].計算機測量與控制,2009,17(5):869-871.
[7]于立娟,于海業,張志平.基于 GSM的遠程環境監控系統[J].儀表技術與傳感器,2007(3):69-70.