秦園春 李建軍
(作者單位:安徽廣播電視臺淮北發(fā)射臺)
基于IP網(wǎng)絡的廣播電視發(fā)射機監(jiān)控系統(tǒng)研究與實踐
秦園春 李建軍
(作者單位:安徽廣播電視臺淮北發(fā)射臺)
本文通過對第三方發(fā)射機遠程監(jiān)控系統(tǒng)的分析,詳細介紹當前基于IP Client/Server結構的廣播電視發(fā)射機遠控系統(tǒng)的實現(xiàn)機理,給出了具體發(fā)射機的通信數(shù)據(jù)及數(shù)據(jù)結構。針對其通信數(shù)據(jù)及其結構的特點,設計了可用于廣播電視發(fā)射機遠控系統(tǒng)故障查處的分析測試軟件。結合具體故障查處實例介紹了該分析測試軟件的使用方法。
發(fā)射機通信數(shù)據(jù);Client/Server結構;發(fā)射機測試器;虛擬發(fā)射機
安徽廣播電視臺淮北發(fā)射臺現(xiàn)采用HX發(fā)射機遠程監(jiān)控平臺的遠程監(jiān)控系統(tǒng),將本臺各發(fā)射機以IP通信方式連接到控制室,來實現(xiàn)對發(fā)射機的遠程監(jiān)控。目前,主要實現(xiàn)對發(fā)射機入射功率和反射功率的監(jiān)測以及對各發(fā)射機的開、關機控制。該監(jiān)控平臺在一定程度上實現(xiàn)了對各發(fā)射機的遠程監(jiān)控,但也存在一些問題,如無法連接或連接異常、誤報警、不能有效開關機等情況。出現(xiàn)這些情況有可能是發(fā)射機端通信接口或者是接口轉(zhuǎn)換器件問題,也有可能是IP連接線路或者是交換機問題,還可能是監(jiān)控端計算機問題或監(jiān)控平臺軟件問題,如何確定問題所在,成為解決和處理問題的關鍵。針對上述情況,對HX發(fā)射機監(jiān)控系統(tǒng)進行了深入研究并開發(fā)設計了專門的分析測試軟件。通過該軟件,可以對各發(fā)射機進行基于IP的單獨手動監(jiān)控及對各發(fā)射機系統(tǒng)進行模擬,所有通信數(shù)據(jù)全部顯示出來,以便研究和分析。為解決和處理問題提供準確依據(jù)。
現(xiàn)在本臺被監(jiān)控的發(fā)射設備有8臺電視發(fā)射機和12臺調(diào)頻廣播發(fā)射機,大部分是吉兆公司的GME產(chǎn)品。另外,也有個別其他發(fā)射機廠家的產(chǎn)品。目前,由于國內(nèi)廣播電視系統(tǒng)尚未制定廣播電視發(fā)射機通信接口協(xié)議的統(tǒng)一規(guī)范,所以各發(fā)射機通信接口及通信協(xié)議也存在很大差異。吉兆GME機器都是通過RS485轉(zhuǎn)RS232,再由串口服務器向上提供IP通信服務,其他機器有的可以直接向上提供IP通信、有的則通過專門的采集系統(tǒng)向上提供IP通信服務。
根據(jù)上述情況,可以確定發(fā)射機遠程監(jiān)控系統(tǒng)是一個基于TCP/IP的Client/ Server結構的通信系統(tǒng)。就可以用int connect (int sockfd,struct sockaddr * serv_ addr,int addrlen)和int listen(int sockfd,int backlog)函數(shù)分別與發(fā)射機和監(jiān)控計算機構成連接,截獲其相關通信數(shù)據(jù)。
吉兆GME各發(fā)射機:
讀取機器數(shù)據(jù)指令0x01,0x27,0x00,0x00,0x26。
開機指令 0x01,0x3c,0x00,0x00,0x3d。
關機指令 0x01,0x3e,0x00,0x00,0x3f。
讀取成功都返回一個如下結構的數(shù)據(jù)。
Struct MachineData
{1 byte 0x01;
1 byte Year;
1 byte Month;
1 byte Day
1 byte Hour;
1 byte Minute;
1 byte Second;
2 byte Fwd
2 byte Refl
.
.
.
};
其中,GME1114、GME1114E、GME1014J及GME1F33B的Sizeof(MachineData)為1026;GME113D、GME 1153C的Sizeof(MachineData)為258;GME1053F的Sizeof(MachineData)為514。數(shù)據(jù)的第1個字節(jié)為0x01、第2~7個字節(jié)分別為發(fā)射機當時的年,月,日,時,分,秒的BCD碼。GME1114、GME1114E、GME1014J 10 kW電視發(fā)射機(淮北二套、安徽衛(wèi)視 主備、淮北一套)、GME113D 1 kW電視發(fā)射機(中央七套)、GME1053F 5 kW電視發(fā)射機(安徽影視主)、GME 1153C 5 kW電視發(fā)射機(淮北教育)的第8~9兩個字節(jié)為發(fā)射機的入射功率、10~11兩個字節(jié)為發(fā)射機的電壓駐波比; GME1F33B 3 kW調(diào)頻發(fā)射機的第633~634兩個字節(jié)為發(fā)射機的入射功率、635~636兩個字節(jié)為發(fā)射機的反射功率。其他型號發(fā)射機限于篇幅就不再列出。
該測試軟件整體為Client/Server結構的通信系統(tǒng),不依賴任何數(shù)據(jù)庫。分開設計為2個部分:發(fā)射機測試器部分和虛擬發(fā)射機部分。其中,發(fā)射機測試器可以提供對各發(fā)射機的單獨地手動開關機和數(shù)據(jù)讀取操作;虛擬發(fā)射機部分可以向上位系統(tǒng)(HX發(fā)射機遠程監(jiān)控平臺等所有可以監(jiān)控發(fā)射機的系統(tǒng)統(tǒng)稱為上位系統(tǒng),包括本發(fā)射機測試器)提供可以人為修改的模擬發(fā)射機的有關數(shù)據(jù)。用Visual C++分別編譯成兩個可以獨立運行的文件,便于測試使用。
限于篇幅,這里只給出主要程序結構圖和描述性程序代碼。
2.1發(fā)射機測試器部分
發(fā)射機測試器主要程序結構見圖1。
圖1 發(fā)射機測試器程序結構
為方便使用,將本臺現(xiàn)有的被監(jiān)控的發(fā)射機的IP地址和使用的端口也設計到發(fā)射機測試器軟件中,由COMBOBOX控件供用戶選擇,見圖2。
圖2 COMBOBOX控件顯示界面
由于從發(fā)射機返回的數(shù)據(jù)并不是標準的ASCII碼,直接顯示將是一堆亂碼,所以需要進行十六進制的轉(zhuǎn)換,以方便對數(shù)據(jù)的觀察和分析。
其中:szBufferRecv為接收發(fā)射機數(shù)據(jù)緩沖區(qū),szBuffer為轉(zhuǎn)換后帶特定格式的數(shù)據(jù)緩沖區(qū),recvsize為接收數(shù)據(jù)的長度。
圖3 虛擬發(fā)射機程序結構
圖4 虛擬發(fā)射機Scroll Bar控件顯示界面
除了對所有的返回數(shù)據(jù)以十六進制形式顯示之外,還把入射功率、駐波比和反射功率單獨解析出來以大家熟悉的十進制形式顯示。從前文分析知道,發(fā)射機返回的數(shù)據(jù)結構存在很大差異,特別是反射指標,有的發(fā)射機是以反射功率形式返回的、有的則是以駐波比形式返回的。對于以駐波比形式返回的數(shù)據(jù),需要用如下公式,將駐波比換算成反射功率。
Pr/Po = [(VSWR-1)/(VSWR+1)]^2
Po:入射功率 、Pr:反射射功率、VSWR:駐波比
用sprintf(szBuffer,"%.2f",P);
SetDlgItemText(hDlg,EDIT_ID,szBuffer aa);
實現(xiàn)帶2位小數(shù)的十進制形式顯示。其中,EDIT_ID為顯示功率(入或反)的編輯框的ID。
2.2虛擬發(fā)射機部分
虛擬發(fā)射機部分主要程序結構見圖3。
主要功能就是接受上位系統(tǒng)的相關指令,做出狀態(tài)顯示,并將符合該發(fā)射機數(shù)據(jù)結構規(guī)范的數(shù)據(jù)發(fā)送給上位系統(tǒng)。用它可以代替真實發(fā)射機對上位系統(tǒng)進行測試,如越限報警測試,就不需要將真實發(fā)射機的有關指標開到報警的程度。對于上位系統(tǒng)來說,它就是一臺入射功率、反射功率等參數(shù)可以任意調(diào)整的發(fā)射機。由兩個滾動條控件Horizontal Scroll Bar和Vertical Scroll Bar分別提供對入射功率和駐波比的調(diào)節(jié),反射功率由Pr/Po = [(VSWR-1)/(VSWR+1)]^2計算得出,并顯示出來。如圖4所示。
創(chuàng)建數(shù)據(jù)是虛擬發(fā)射機設計的主要內(nèi)容,要把每臺發(fā)射機的特征數(shù)據(jù)、入射功率、反射功率等參數(shù)組織成一個完整的數(shù)據(jù)塊,它必須嚴格遵守對應發(fā)射機的數(shù)據(jù)結構規(guī)范,否則,上位系統(tǒng)將無法識別。需要強調(diào)的是,發(fā)射機的數(shù)據(jù)結構規(guī)范是發(fā)射機固有的,HX監(jiān)控平臺要遵守這個規(guī)范、任何上位系統(tǒng)都必須遵守這個規(guī)范。
特征數(shù)據(jù)是發(fā)射機生產(chǎn)廠家定義的,在監(jiān)控系統(tǒng)分析一節(jié)中,已經(jīng)通過發(fā)射機與HX監(jiān)控平臺的通信截獲到,也即是Struct MachineData中,前面若干位的數(shù)據(jù),其中除吉兆發(fā)射機以外的各發(fā)射機都已取得了具體數(shù)據(jù)。吉兆發(fā)射機特征數(shù)據(jù)為0x01及后面年、月、日、時、分、秒的BCD碼。這里使用GetSystemTime(&tm)獲得計算機的系統(tǒng)時間,并轉(zhuǎn)換為BCD碼,來為其創(chuàng)建特征數(shù)據(jù)。
void int2bcd(int tmdata)
{char temp[2];
wsprintf(buff,"%02d",tmdata);
temp[0]=(buff[0]-0x30)<<4;
temp[1]=buff[1]-0x30;
buff[0]=temp[0]|temp[1];
buff[1]=0;
}
void int2bcd(int tmdata)為兩位整數(shù)轉(zhuǎn)BCD碼的子程序。
最后用memcpy(MachineData+n,&P,sizeP)將入射功率、駐波比或反射功率填入相應位置(n為偏移值)。
圖5 對比圖
圖6 淮北教育電視發(fā)射機數(shù)據(jù)
本分析測試軟件,需要依托計算機運行。在用于對發(fā)射機進行測試時(使用發(fā)射機測試器)要將測試用計算機的IP設置在與被測發(fā)射機相同網(wǎng)段、在用作虛擬發(fā)射機時要將測試用計算機的IP設置為對應發(fā)射機的IP。
下面通過幾個故障查處實例來說明該分析測試軟件的使用方法。
3.1安徽綜藝電視發(fā)射機無法實現(xiàn)遠程開關機
自HX發(fā)射機遠程監(jiān)控平臺投入使用以來,就不能對安徽綜藝電視發(fā)射機實現(xiàn)遠程開關機。由于監(jiān)控系統(tǒng)可以正常顯示發(fā)射機的功率參數(shù),因此可以排除網(wǎng)絡連通性問題和硬件接口問題。
拔下連接到發(fā)射機的網(wǎng)線,插在測試用筆記本電腦上,并將其IP設置為安徽綜藝電視發(fā)射機的IP。運行虛擬發(fā)射機軟件,將發(fā)射機選擇為“DS安徽綜藝192.168.1.205:1024”,按下界面上的“開始”按鈕,可以看到從HX監(jiān)控系統(tǒng)不斷發(fā)來讀數(shù)據(jù)指令“0x55,0xaa,0x00,0x07,0 x06,0x00,0x00,0x00,0x00,0x01,0x00”。調(diào)節(jié)界面上的“Fwd調(diào)節(jié)”滾動條和“VSWR調(diào)節(jié)”滾動條,HX監(jiān)控系統(tǒng)監(jiān)控界面上的安徽綜藝的入射功率和反射功率也作相應變化。執(zhí)行“關機”操作,同時觀察虛擬發(fā)射機,沒有出現(xiàn)任何變化的數(shù)據(jù)。同樣方法,對安徽衛(wèi)視測試,則可以收到對應的關機指令。如圖5所示。再將入射功率和反射功率調(diào)成零,執(zhí)行“開機”操作測試,一樣是收不到開機指令。對安徽衛(wèi)視測試就可以收的到。由此可以得出如下結論:HX監(jiān)控系統(tǒng)對安徽廣播電視臺淮北發(fā)射臺安徽綜藝發(fā)射機的遠程開關、機只是做了個界面而已,實質(zhì)上沒有發(fā)出任何指令,不可能實現(xiàn)遠程開、關機。
處理方法(思路):要求HX公司在監(jiān)控軟件中加上該發(fā)射機的開、關機功能;聯(lián)系廠家,獲取到該機的開、關機指令,設計一專門線程注入到HX監(jiān)控軟件中實現(xiàn)遠程開、關機。
3.2淮北教育電視發(fā)射機連接異常
HX監(jiān)控系統(tǒng)服務器的“淮北教育電視”中出現(xiàn)“已連接”很快又斷開的現(xiàn)象,導致不斷報警。出現(xiàn)報警說明讀到了功率信息,再由于斷開后失去功率信息而造成的?;旧峡梢耘懦W(wǎng)絡連通性問題和硬件接口問題。
按上面實例的方法設置好相應的IP,選擇并連上虛擬發(fā)射機,一切正常。將測試用筆記本電腦的IP設置為192.168.1.100并連接到淮北教育電視發(fā)射機上,運行發(fā)射機測試器軟件,將發(fā)射機選擇為“DS淮北教育 192.168.1.207:4001”,按下界面上的“連接”按鈕,可以正常連接。按下界面上的“讀取數(shù)據(jù)”按鈕,讀取到該發(fā)射機的完整數(shù)據(jù),如圖6。這樣就可以徹底排除網(wǎng)絡連通性問題和硬件接口問題了,問題應該出在發(fā)射機的數(shù)據(jù)結構上。觀察01后面數(shù)據(jù),對應為67年2月13日13時39分15秒,是發(fā)射機的時間信息,對HX監(jiān)控系統(tǒng)來說是特征數(shù)據(jù)。該發(fā)射機是2000年以后生產(chǎn)的,年份就應該是2067年。這顯然是一個錯誤的數(shù)據(jù)。
處理方法:把發(fā)射機的TIME調(diào)整為當前正常日期和時間,連接HX監(jiān)控系統(tǒng),一切正常。
結論:HX監(jiān)控系統(tǒng)對吉兆發(fā)射機的時間信息有判斷,超出它認定的范圍就認為是錯誤的特征數(shù)據(jù)。所以出現(xiàn)讀取數(shù)據(jù)(包括功率信息,報警原因))發(fā)現(xiàn)不是有效的特征數(shù)據(jù),斷開再連接,如此反復的現(xiàn)象。
3.3淮北經(jīng)濟調(diào)頻發(fā)射機無法連接
淮北經(jīng)濟調(diào)頻發(fā)射機和HX監(jiān)控系統(tǒng)無法連接。按實例1.1的方法設置好相應的IP,連上虛擬發(fā)射機,一切正常,說明問題出在發(fā)射機或硬件接口上。按實例1.2的方法連上發(fā)射機測試器,可以正常連接,但讀不到數(shù)據(jù),由于該發(fā)射機是吉兆機器,采用的是串口服務器向上提供IP通信的,可以構成正常的IP連接,說明串口服務器是正常的。那么問題只有RS485-RS232轉(zhuǎn)換器和發(fā)射機本身了。
處理方法:更換RS485-RS232轉(zhuǎn)換器,可以讀取發(fā)射機完整數(shù)據(jù)。連接HX監(jiān)控系統(tǒng),一切正常。
結論:接口硬件RS485-RS232轉(zhuǎn)換器損壞。
該分析測試軟件完全可以在不影響發(fā)射機正常播出的情況下對監(jiān)控系統(tǒng)進行測試,為監(jiān)控系統(tǒng)的故障查處提供數(shù)據(jù)層面的依據(jù)。由于在設計當中對發(fā)射機的IP及其端口的選擇最終歸類于發(fā)射機的類型,所以,對于所有相同類型的發(fā)射機,改變一下相對應的IP及其端口也同樣可以適用。
[1]張之超, 等. Windows程序設計[M].北京:人民郵電出版社,1999.
[2]蔣東興,林鄂華.Windows Socket網(wǎng)絡程序設計指南[M].北京:清華大學出版社,1995.
[3]此書編寫組.新編Windows API參考大全[M].北京:電子工業(yè)出版社,2000.
[4]李建軍.internet遠程監(jiān)控軟件設計[J].微計算機信息,2003(3).
秦園春(1970-),男,工程師,從事廣播電視技術及監(jiān)控軟件設計工作。