秦虹 陳浩君 尹春光

摘要 目前在上海各區縣氣象局共安裝有約10部風廓線雷達,它們對上海市的天氣預報和氣象研究有重要作用。上海市氣象信息與技術支持中心承擔對這些風廓線雷達的日常維護工作,該系統通過使用Delphi6.0語言環境和多線程技術編程,將這些風廓線雷達的實時狀態信息錄入MySQL數據庫,實現對其中4部敏視達公司生產的風廓線雷達狀態信息進行統一管理和實時監控,提供研究者將其中的重要信息進行動態比較與分析,提高了管理效率。
關鍵詞 風廓線雷達;實時監控;Delphi6.0語言;多線程編程;MySQL數據庫
中圖分類號 S126 文獻標識碼 A 文章編號 0517-6611(2015)34-337-04
隨著氣象預報與氣象研究的深入發展,各類氣象觀測與探測手段也不斷更新。從自動氣象站到氣象雷達再到氣象衛星,形成了多方位、多尺度、多層次的立體觀測網。風廓線雷達是通過向高空發射不同方向的電磁波束,接收并處理這些電磁波束因大氣垂直結構不均勻而返回的信息進行高空風場探測的一種遙感設備。風廓線雷達利用多普勒效應能夠探測其上空風向、風速等氣象要素隨高度的變化情況,具有探測時空分辨率高、自動化程度高等優點。在風廓線雷達基礎上增加聲發射裝置構成無線電-聲探測系統,可以遙感探測大氣中溫度的垂直廓線。近年來,隨著我國氣象事業的發展,風廓線雷達逐步被引進并國產化,對氣象預報和氣象研究做出了新的貢獻。上海氣象局從1999年至今,總共安裝了10部風廓線雷達,其中既有芬蘭Visala公司的產品,也有國產敏視達公司的產品,對于這些產品的維護工作就落在上海市氣象信息與技術支持中心。為了實現統一管理和運維保障,需要開發一套對現有風廓線雷達運行狀態進行實時監控的軟件[1]。該軟件需的主要功能就是要實時讀取并記錄風廓線雷達的運行態信息、對不同風廓線雷達信息讀取相互獨立、界面清晰并有一定告警功能。該程序開發采用Delphi6.0語言環境和多線程編程技術。目前僅將敏視達公司生產的松江區、奉賢區、金山區和世博園區的4部風廓線雷達的狀態數據接入,今后將逐步接入所有風廓線雷達。
1 需求分析和總體設計
1.1 需求
目前對于上海氣象信息與技術支持中心而言,對全市范圍內10部風廓線雷達的運行維護工作非常重要也非常復雜。由于這些風廓線雷達的生產廠家和安裝時間均有不同,以往對于它們的運行狀態要么靠定期檢修時獲取,要么直到產品輸出發現問題時再臨時檢查獲取。故此,一款能實時記錄和監控所有風廓線雷達工作運行狀態的軟件十分重要,既能從中及時發現問題,也能通過歷史數據的比較與分析中預判故障,從而顯著地提高工作效率[2]。
1.2 軟件的預期功能
該軟件預期由5大功能模塊組成,分別為時鐘、風廓線雷達狀態文件處理、當前重要狀態信息顯示、日志信息查詢、告警信息處理。
時鐘顯示功能設計,因為氣象信息對時效的要求非常高,而該程序的設計主要依賴運行該程序計算機的時鐘,既有利于對該程序定時獲取風廓線雷達數據的監視,也有利于對遠程各站點雷達狀態信息計算機的時間對比。因為目前未對所有計算機的時間進行同步處理,這一步必不可少。
風廓線雷達的狀態信息讀取與記錄都采用多線程編程,這樣做的好處就是相互間隔離,一旦某個風廓線雷達的狀態信息處理過程出現問題,不會影響到其他風廓線雷達狀態信息的處理。狀態信息文件的傳輸日志、狀態信息文件的解碼日志、狀態信息入庫日志需可逆向查詢至少30 d,并且保留1年,如此可保證1年內對網絡傳輸狀態、程序運行狀態、數據庫運行狀態做到有據可查。
告警功能非常重要,幾乎任意一個系統程序都需要告警模塊,監控系統更是如此。由于在上海市信息與技術支持中心對風廓線運行狀態并非由專人進行7×24 h監控,故此聲音警告功能不必加入,但面板文字警告則不可省去。面板文字告警顯示實時告警信息,內容包括數據傳輸異常、文件處理異常、系統運行狀態異常,并以顯眼方式滾動顯示。同時建立出錯信息歷史查詢功能,其中數據同樣可逆向查詢30 d并保留數據1年。
所有這些風廓線雷達的狀態數據用一個MySQL數據庫支持,MySQL是個小型關系型數據庫系統,擁有體積小、速度快、開放源碼的特點。數據庫的字段則嚴格按照狀態數據文件中的各參數來設置,為避免今后由于時間推移而導致的數據量龐大、查詢速度慢的問題,采用多表分區的方法來解決,由于敏視達公司生產的風廓線雷達狀態文件是每5 min生成一個,故每年每部雷達有105 120條記錄,10部雷達共1 051 200條記錄,因此按年來分表即可很好地解決此問題。
1.3 數據控制及各功能模塊流程
1.3.1
主程序與各功能子模塊流程。主程序運行后,各功能子模塊以多線程方式并行運行。提高運行速度的同時,也不會因為某一個功能模塊卡死而導致其他功能模塊不能運行。主程序與各線程關系流程見圖1。
1.3.2
風廓線雷達狀態數據處理與顯示子模塊數據流程示意。各個風廓線雷達狀態數據處理與顯示子模塊數據流程都完全相同。首先讀入配置文件;之后按照相應的配置文件內容進行遠程狀態信息文件讀??;文件成功讀取后進行解碼;成功解碼后將狀態信息記錄入數據庫,在此期間將過程信息記錄入相應日志文件,如果有異常信息則記入出錯信息文件并同時觸發告警程模塊;最后等待下一個循環時間再次重復。具體流程見圖2。
1.4.1
狀態數據處理互不影響。每個風廓線雷達狀態數據處理相對獨立,當某個處理過程出現問題導致卡住時,不影響其他風廓線雷達處理程序運行,最大限度保證所有正常的風廓線雷達狀態信息數據的正常錄入。
1.4.2
可靠性高。確保各功能模塊級數據資源運行可靠,將軟件運行的故障率降至最低限度。軟件運行需要穩定可靠,要求長時間連續運行不出錯以確保今后的維護監控工作安全有效進行。
1.4.3
時鐘信息處理。由于多部風廓線雷達狀態信息文件需要從不同的服務器上讀取,時效性要求比較高,但是各服務器的時鐘并未作統一處理。確保從每一臺服務器上都能取到最新的數據文件是一個非常關鍵的問題,如果處理不好就會導致取數據文件的重復或失敗。
1.4.4
運行狀態明了。清晰顯示所有風廓線雷達運行狀態數據處理各個模塊的信息,能按照用戶要求在第一時間明確獲取程序運行的狀態,如有故障則能快速進行處理。
1.4.5
界面清晰。各功能模塊界面應簡便、規范,對用戶友好。避免復雜操作與顯示信息的混亂而導致降低使用該軟件的界面障礙。
1.4.6
告警信息明確。告警處理必須謹慎,模糊的告警非但不能起到警示作用,還會降低監控工作效率。該軟件的告警信息包括數據傳輸異常、文件處理異常、系統運行狀態異常,并滾動顯示。
2 軟件開發工具簡介
2.1 Delphi簡介
Delphi是著名的Borland(現在已和Inprise合并)公司開發的可視化軟件開發工具?!罢嬲某绦騿T用C語言,聰明的程序員用Delphi”,這句話是對Delphi最經典、最實在的描述。Delphi被稱為第四代編程語言,它具有簡單、高效、功能強大的特點。和VC相比,Delphi更簡單、更易于掌握,而在功能上卻絲毫不遜色;和VB(Visual Basic)相比,Delphi則功能更強大、更實用??梢哉fDelphi同時兼備了VC(Visual C++)功能強大和VB簡單易學的特點。它一直是程序員至愛的編程工具。
Delphi具有以下的特性:基于窗體和面向對象的方法,高速的編譯器,強大的數據庫支持,與Windows編程緊密結合,強大而成熟的組件技術。但最重要的還是Object Pascal語言,它才是一切的根本。 Object Pascal語言是在Pascal語言的基礎上發展起來的,簡單易學。
Delphi提供了各種開發工具,包括集成環境、圖像編輯(Image Editor),以及各種開發數據庫的應用程序,如DesktopDataBase Expert等。除此之外,還允許用戶掛接其他的應用程序開發工具,如Borland公司的資源編輯器(Resourse Workshop)。
2.2 MySQL數據庫簡介
MySQL是最受歡迎的開源SQL數據庫管理系統,它由MySQL AB開發、發布和支持。它是一個快速的、多線程、多用戶和健壯的SQL數據庫服務器。MySQL服務器支持關鍵任務、重負載生產系統的使用,也可以將它嵌入到一個大配置(massdeployed)的軟件中去。
MySQL是一個關系數據庫管理系統,關系數據庫就是把數據存放在分立的表格中,這比把所有數據存放在一個大倉庫中要好得多,這樣做將增加數據獲取的速度和靈活性。“MySQL”中的SQL代表“Structured Query Language”(結構化查詢語言)。SQL是用于訪問數據庫的最通用的標準語言,它是由ANSI/ISO定義的SQL標準。SQL標準發展自1986年以來,已經存在多個版本,如SQL86、SQL92、SQL:1999、SQL:2003,其中SQL:2003是該標準的當前版本。
MySQL是開源的,開源意味著任何人都可以使用和修改該軟件,任何人都可以從Internet上下載和使用MySQL而不需要支付任何費用。MySQL服務器是一個快捷、可靠和易于使用的數據庫服務器,盡管MySQL仍在開發中,但它已經提供一個豐富和極其有用的功能集。它的連接性、速度和安全性使MySQL非常適合訪問在Internet上的數據庫。
MySQL數據庫服務器是一個客戶/服務器系統,它由多線程SQL服務器組成,支持不同的后端、多個不同的客戶程序和庫、管理工具和廣泛的應用程序接口(APIs)。MySQL也可以是一個嵌入的多線程庫,用戶可以把它連接到自己的應用中而得到一個小、快且易于管理的產品。
3 程序內容實現
3.1 主程序界面設計
主程序界面如設計原則中所提,要求界面清晰且顯示內容完整。主界面中上方中間是當前時鐘信息,左邊欄目是監控的各風廓線站點名稱和站號信息,右邊是當前選擇的風廓線站點當天的連接與解碼狀態信息,下方是滾動告警信息,如果雙擊運行信息框,則彈出歷史信息瀏覽選項。主程序界面見圖3。
圖3 主程序界面
3.2 MySQL數據庫字段設計
數據庫的設計根據索要監控的要素而定,包括風廓線雷達基本數據和運行狀態數據。其中基本數據有:臺站代碼、臺站名、型號、經緯度、海拔、天線增益、饋線損耗、波束夾角、掃描波束數、發射波長、低模式脈沖重復頻率、高模式脈沖重復頻率、低模式脈沖寬度、高模式脈沖寬度等。而狀態數據包括:發射機輸入功率、發射機輸出功率、發射機反射功率、發射機溫度、發射機各種電源電壓、發射機各類故障告警、各類速度與譜寬的標定期望與實測值、噪聲、雜波抑制、靈敏度等,總共有80項指標。
3.3 編程使用的主要技術
3.3.1
Delphi Indy控件集中的 Idftp控件。INDY的全名是Internet Direct(也叫Winshoes),它是一套開放源代碼的Internet控件集,它支持大部分流行的Internet協議,包括TCP、UDP、DNS、ICMP、FINGER、FTP、GOPHER、HTTP、POP3、SMTP、TELNET、WHOIS等,支持BASE64、MD2、MD4、MD5等編解碼,提供INTERNET流行協議的客戶端和服務器控件[2]。在該編程軟件中,主要用到的是Idftp控件的Get函數與List函數,其中Get函數功能是獲取文件,其原型為:
Function Get(const ASourceFile:String,Const ADest:string;Const AAppend:Boolean);overload;
而List是獲取遠程FTP服務器上指定目錄下的文件列表[3],從而對其內容進行各種判斷,其原型為:
procedure List(ADest:TStrings;Const ASpecifier:String;const ADetails:Boolean);
3.3.2
二進制文件讀取。由于敏視達公司風廓線產品的運行狀態是以二進制文件方式記錄,所以在Delphi6.0中必須以讀取記錄型文件的方式進行順序讀取[1]。為了提高速度,事先按照一定數據格式自定義數據結構,然后按結構讀取。其中,自定義數據結構方法為:
自定義數據結構名=record
具體數據類型
……
End;
讀取二進制文件用TFileStream的方法,具體為:
TFileStream.Create(filename,fmOpenRead);
之后用數據結構讀取,原型為:
DataSruct.Read(DataStruct,sizeof(DataStruct));
3.3.3
數據庫語言SQL。SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是專為數據庫而建立的操作命令集,是一種功能齊全的數據庫語言。SQL功能強大、使用方便,已經成為了數據庫操作的基礎,并且現在幾乎所有的數據庫均支持SQL[4]。該程序中主要用到的是其中的replace語句及其擴展用法。其原型為:
replace into 表名 (字段名1,字段名2,…,字段名n) values (值1,值2………,值n);
3.3.4
多線程技術。隨著分布式系統的興起,并發多任務技術變得越來越重要。在現有基于多線程的操作系統上開發并發多任務程序已經成為程序設計的熱點。根據需要在應用程序中創建線程,多個線程可以并發地運行在同一個進程中,操作系統的多任務特性使得線程之間能獨立運行,但彼此共享存儲空間。盡管多線程能提高CPU利用率,但也不能太多,同時,在多個線程操作同一個內存地址時需處理好它們之間的同步關系[4]。
43卷34期 秦 虹等 風廓線雷達運行體征實時監控與管理
3.4 軟件的測試與維護
為保證軟件的可靠運行,需要針對各種情況進行測試。首先對各個功能模塊進行分別測試,包括對正確數據讀取測試、錯誤數據讀取測試、容錯性測試,接著將所有功能模塊聯合在一起做總體調試,最后在工作平臺進行實際運行測試。
在實際測試的同時,該程序也已進入運行維護階段,改正在特定使用條件下會暴露的潛在程序錯誤或設計缺陷。在軟件使用過程中數據環境發生變化或處理環境發生變化時進行及時修改。若有工作人員提出改進意見時,及時對軟件做出修正。通過一段時間的測試,未出現重大錯誤。
4 結語
現代氣象預報制作對獲取各種氣象信息的要求越來越高,而風廓線雷達通過向高空發射不同方向的電磁波束,接收并處理這些電磁波束因大氣垂直結構不均勻而返回的信息進行高空風場探測的一種新型遙感設備。在安裝了新型設備后,對其進行有效的管理監控是當務之急。
該程序通過對4部敏視達公司生產風廓線雷達的狀態數據文件進行實時解碼并將關鍵信息及時錄入數據庫,從而在一個固定的時間段對其歷史特征數據進行分析,作出相應的評估和應用,因此大大提高了對這些風廓線雷達的監控與運行維護的效率。
由于Visala公司的狀態文件數據結構未對我國公開,故此其他幾部風廓線雷達到目前為止并未納入該程序的監控管理范圍,但該程序也預留了擴展空間,一但該公司公開了相關信息,也將很方便地將其加入該研究程序監控之中。
參考文獻
[1] 秦虹.氣象實時數據監控程序的設計與開發[J].安徽農業科學,2014,42(27):9434-9436,9439.
[2] 鄧莉,王伯民,尹新懷.地面氣象資料統計分析系統的研制[J].安徽農業科學,2013,41(6):2584-2587.
[3] 張曜,張青,李彬.Delphi函數使用手冊[M].北京:冶金工業出版社,2002.
[4] 張世明.Delphi程序設計基礎[M].北京:電子工業出版社,2010.