彭顯鋒,王 橋,杜龍彩
(1.貴州省興仁縣氣象局,貴州 興仁 562300;2.貴州省貴陽市氣象局,貴州 貴陽 550001)
縣級自動站監(jiān)控系統(tǒng)研究
彭顯鋒1,王 橋1,杜龍彩2
(1.貴州省興仁縣氣象局,貴州 興仁 562300;2.貴州省貴陽市氣象局,貴州 貴陽 550001)
隨著氣象觀測業(yè)務的現(xiàn)代化,觀測設備、業(yè)務軟件、網(wǎng)絡故障以及供電系統(tǒng)不穩(wěn)定已成為影響觀測質(zhì)量的主要因素。利用計算機對觀測系統(tǒng)進行自動監(jiān)控,發(fā)現(xiàn)異常及時通知工作人員處理,可有效提高業(yè)務質(zhì)量和工作效率。該文介紹了“縣級自動站監(jiān)控系統(tǒng)”的主要功能和工作原理,并重點對多線程編程、數(shù)據(jù)庫訪問、GSM/GPRS Modem的使用、文件自動備份等方面用到的關鍵編程技巧進行了詳細說明。
自動站;監(jiān)控系統(tǒng);工作原理;編程技巧
隨著氣象綜合觀測業(yè)務的現(xiàn)代化,人工觀測已基本被自動觀測代替。但自動觀測系統(tǒng)結(jié)構(gòu)復雜,出現(xiàn)故障的概率較大。當系統(tǒng)出現(xiàn)故障后,一般工作人員很難第一時間找出原因,并及時排除故障。據(jù)統(tǒng)計,設備、軟件、網(wǎng)絡故障以及供電不穩(wěn)定對業(yè)務質(zhì)量的影響,已超過人為原因,成為影響觀測質(zhì)量的主要因素。
縣級自動站監(jiān)控系統(tǒng)能對影響綜合觀測質(zhì)量的主要因素進行自動監(jiān)控,發(fā)現(xiàn)異常及時報警,以便故障得到及時處理,在網(wǎng)絡主通道中斷時,自動連接3G、Vpn從輔通道上傳數(shù)據(jù),能有效提高業(yè)務質(zhì)量和工作效率。
為了實現(xiàn)系統(tǒng)的快速開發(fā)和應用,并適用于所有自動站業(yè)務計算機系統(tǒng),本軟件在Vs2012平臺上基于 .NET Framework 4 開發(fā)。
設備功能及布局如“圖1”:
圖1 設備功能及布局圖Fig.1 Equipment function and layout
2.1 系統(tǒng)功能概述
本系統(tǒng)適用于所有氣象臺站地面氣象自動站業(yè)務平臺。能對自動站計算機、自動站軟件、采集器是否正常工作,網(wǎng)絡、市電是否中斷,長Z文件數(shù)據(jù)是否有缺測、是否進行人工質(zhì)控、上傳是否及時等進行判斷。發(fā)現(xiàn)異常后,根據(jù)情況的緊急程度,通過文字、音箱、發(fā)送短信或撥打電話報警。還能通過短信遠程獲取系統(tǒng)監(jiān)控情況、查詢部分觀測數(shù)據(jù)。當網(wǎng)絡主通道中斷時,能自動連接3G、Vpn從輔通道上傳數(shù)據(jù)。系統(tǒng)還具有自動站數(shù)據(jù)自動備份、分發(fā)省局告警信息功能。
2.2 工作原理
2.2.1 判斷市電、自動站計算機工作狀態(tài) 利用兩臺計算機(一臺為使用UPS供電的自動站主機,一臺為直接連接市電的其它計算機)互相監(jiān)測,不僅能達到設計目標,還能使該系統(tǒng)運行更為可靠:
通過端口掃描(139號端口)的方式,自動站主機通過檢測另一臺計算機是否在線來確定市電是否中斷,另一臺計算機以同樣的方式判斷自動站主機是否正常工作;
兩臺計算機通過參數(shù)傳遞,確定對方計算機上的綜合監(jiān)測程序是否都已啟動運行。
2.2.2 判斷網(wǎng)絡是否連通、自動站軟件以及采集器是否正常工作
①通過掃描服務器端口,檢測“自動站”計算機與“報文上傳服務器(IP:10.203.72.30)”的連通狀態(tài),確定網(wǎng)絡是否正常。
②通過檢查業(yè)務軟件(采集、傳輸、業(yè)務軟件)是否在進程列表中、分鐘數(shù)據(jù)文件是否得到更新,綜合判斷自動氣象站軟件及采集器工作狀態(tài)。如業(yè)務軟件未運行,通過Process.Start命令將其啟動。
2.2.3 監(jiān)測長Z文件是否上傳、是否進行質(zhì)控、數(shù)據(jù)是否有缺測。
①定時檢查傳輸日志,判斷長Z文件是否已及時上傳;
②通過長Z文件第1行的“質(zhì)控碼”,判斷需要人工質(zhì)控時段的長Z文件是否經(jīng)過人工質(zhì)控;
③根據(jù)臺站觀測項目設置情況,判斷長Z文件中的當前時次應該觀測的項目數(shù)據(jù)是否有缺測。
2.2.4 大風監(jiān)測 目前,當出現(xiàn)大風時,新型自動站不會自動報警。為避免遲發(fā)、漏發(fā)重要天氣報,本系統(tǒng)通過分析分鐘數(shù)據(jù),判斷是否有大風出現(xiàn),如發(fā)現(xiàn)某日風速第1次達到17 m/s、24 m/s,會立即報警。
2.2.5 自動站數(shù)據(jù)實時自動備份 利用文件系統(tǒng)監(jiān)視控件,對指定的目錄進行監(jiān)視,當發(fā)現(xiàn)被監(jiān)視的目錄中新增文件、文件屬性(大小、修改時間等)發(fā)生變化時,就把相關文件復制到目標磁盤,實現(xiàn)有選擇的自動站數(shù)據(jù)實時備份。
2.2.6 自動連接3G無線網(wǎng)絡和Vpn 通過Shell、Process.Start指令調(diào)用已有的網(wǎng)絡連接,實現(xiàn)自動連接與斷開3G和Vpn。
2.2.7 手機報警、遠程短信獲取系統(tǒng)監(jiān)控狀態(tài)和觀測數(shù)據(jù) 為了確保在網(wǎng)絡中斷的情況下,能發(fā)出短信和撥打電話報警,需采用獨立、可靠的通信設備。本系統(tǒng)采用了使用“TC35i”芯片的GSM/GPRS Modem(簡稱短信貓,下同)通過USB接口與計算機連接,通過AT指令實現(xiàn)自動收發(fā)送短信和撥打電話。
通過手機向短信貓發(fā)送短信(即事先約定的指令),自動站主機讀取該短信后按要求進行相關統(tǒng)計,并通過AT指令將統(tǒng)計結(jié)果以短信方式發(fā)送給手機。
3.1 多線程編程
本系統(tǒng)實現(xiàn)的功能較多,且大多數(shù)功能需同時執(zhí)行,網(wǎng)絡狀態(tài)檢查、手機通信、網(wǎng)絡通信、文件上傳、數(shù)據(jù)自動備份等功能耗時較多,使用單一的線程無法實現(xiàn)。因此,本系統(tǒng)采用多線程技術(shù),耗時較多的功能分別另開線程實現(xiàn),主程序只需按一定周期獲取運行結(jié)果并開啟線程完成相關任務,不僅系統(tǒng)運行的可靠性得到了保證,系統(tǒng)運行也會很流暢。
在線程的使用過程中,需注意以下兩點:
①當一個線程未結(jié)束時,不能再次開啟該線程,不然會出現(xiàn)同一線程的多個副本同時訪問同一數(shù)據(jù)或設備的情況,導致數(shù)據(jù)訪問或設備使用沖突的現(xiàn)象。因此,需判斷線程運行狀態(tài)再決定下一步執(zhí)行的功能。
②退出或重新啟動系統(tǒng)時,應安全關閉已開啟的所有線程,以釋放內(nèi)存資源,并可避免同一線程多次啟動。
3.2 SyncLock 語句的使用
為簡化系統(tǒng)結(jié)構(gòu),本系統(tǒng)所有相關數(shù)據(jù),如系統(tǒng)參數(shù)、待備份文件信息、報警信息、報警日志等,均保存在同一個Mdb數(shù)據(jù)庫中。程序采用多線程實現(xiàn)不同的功能,因此可能出現(xiàn)多個線程同時訪問數(shù)據(jù)庫同一數(shù)據(jù)表而產(chǎn)生異常。
使用SyncLock語句可確保多個線程不在同一時間執(zhí)行相同的語句塊,避免數(shù)據(jù)庫訪問沖突。下面以訪問Basedata.mdb數(shù)據(jù)庫為例說明其使用方法:
Imports System.Data.OleDb '引用對象
Private DataBaseLock As New Object'聲明變量
Private Sub AddOrSaveRecord(ByVal SqlStr As String)'SqlStr為SQL語句字符串
SyncLock DataBaseLock
Try
Conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= "D:Basedata.mdb")
Conn.Open()
Dim SqlCmd As OleDbCommand
SqlCmd = New OleDbCommand(SqlStr, Conn)
SqlCmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
Conn.Close()
End Try
End SyncLock
End Sub
當一個線程調(diào)用AddOrSaveRecord過程后, SyncLock就會防止其它線程進入SyncLock與End SyncLock之間的語句塊,直到當前線程執(zhí)行完該語句,其它線程才能使用該語句塊。
3.3 運行異常處理
該系統(tǒng)程序需24 h不間斷穩(wěn)定運行,但任何一個異常都可能導致程序停止工作。由于系統(tǒng)功能較為復雜,難免出現(xiàn)異常情況。因此,除了認真檢查調(diào)試程序,主動消除程序的邏輯錯誤外,還必須在程序中進行異常處理,捕獲并處理運行時可能產(chǎn)生的各種錯誤,保證程序在任何情況下都能正常運行。
3.4 使用短信貓的注意事項
短信貓工作是否正常,是手機報警和遠程短信獲取監(jiān)控信息成敗的關鍵。計算機通過AT指令控制短信貓收發(fā)短信和撥打電話,但指令使用不當、設備連接異?;蛟O備使用環(huán)境信號差,常常會導致通信失敗。為保證短信貓的正常工作,需注意以下幾點:
①部分AT指令的執(zhí)行耗時較多(如打開設備、讀取短消息、清除緩沖區(qū)等),如果連續(xù)執(zhí)行多條指令,即使指令正確,也可能會得到錯誤的結(jié)果。因此,使用AT指令得不到正確的結(jié)果時,應考慮指令執(zhí)行時間不足的問題,在執(zhí)行一條指令后,進行適當?shù)难訒r等待,再執(zhí)行后面的指令。舉例如下:
SerialPort1.Open()'打開設備端口
System.Threading.Thread.Sleep(200)'延時0.2 s
SerialPort1.WriteLine("AT+CMGL=ALL" & vbCrLf)'讀取所有短消息
System.Threading.Thread.Sleep(5000)'延時5 s
Dim Txt As String = SerialPort1.ReadExisting.ToString()'得到短消息內(nèi)容
上述程序在執(zhí)行SerialPort1.Open后,如不延時,則后面的語句均可能無法正常執(zhí)行。在執(zhí)行SerialPort1.WriteLine("AT+CMGL=ALL" & vbCrLf)后,如等待時間過短,則讀取的短消息內(nèi)容可能不完整。
②短信存儲空間管理
短信貓接收信息的條數(shù)有限,不同生產(chǎn)批次的短信貓信息的存儲位置也不盡相同,通信運營商還會不定時發(fā)送一些短信給短信貓。因此,要保證軟件的通用性并能準確接收和讀取短信,程序必須對短信的存儲位置進行設置,并定時刪除已經(jīng)讀取的信息。
可以用AT+CPMS指令設置、讀取短信存儲位置。
可以用AT+CMGD指令刪除短信。該指令可以刪除一條指定的短信,也可以按已讀取、未讀取、全部信息等分類刪除短信。但不是所有短信貓都支持全部刪除方式,應針對不同的短信貓分別測試。
③短信貓的使用環(huán)境通信信號差或設備連接不當,可能導致通信失敗。因此,有必要定時對設備連接狀態(tài)、信號強度進行檢查,發(fā)現(xiàn)通信設備故障及時提醒值班員處理。方法如下:
發(fā)送任意At指令到短信貓所在端口,如返回值中包含字符“OK”,說明通信設備連接正常;
通過"AT+CSQ"指令獲取信號強度,執(zhí)行 SerialPort1.WriteLine("AT+CSQ" & vbCrLf)的返回值“SerialPort1.ReadExisting.ToString()”即包含信號強度信息。
3.5 自動備份自動站數(shù)據(jù)
使用FileSystemWatcher控件對文件進行監(jiān)視,可以找到發(fā)生變化(新增文件、大小或修改時間發(fā)生變化)的文件,實現(xiàn)有選擇的備份文件,減少數(shù)據(jù)備份所需的時間。
在實際業(yè)務中,有時業(yè)務軟件會幾乎同時生成或更新多個文件,個別文件還比較大(達數(shù)百兆)的情況,同時復制多個文件將會降低復制的效率,并可能導致備份失敗。為實現(xiàn)可靠備份,本系統(tǒng)先將需要備份的文件名登記到數(shù)據(jù)庫表,再由專門的文件復制線程逐個備份。
通過近半年的業(yè)務試運行,并對存在的問題進行了修正和完善,本系統(tǒng)于2016年6月30日正式投入業(yè)務運行。2016年9月1日截止,貴州省已有42個氣象臺站安裝使用。據(jù)各臺站使用后反饋的情況分析,系統(tǒng)運行穩(wěn)定,各項功能均能正常使用,效果良好,達到了預期研究目標。
縣級自動站監(jiān)控系統(tǒng)的開發(fā)和應用,能對影響綜合觀測質(zhì)量的主要因素,如自動站計算機、自動氣象站軟硬件、網(wǎng)絡、市電等工作情況進行較為全面的監(jiān)控。還提供了數(shù)據(jù)自動備份、自動連接備用網(wǎng)絡上傳數(shù)據(jù)等功能。有效地減少了業(yè)務人員工作量,提高了業(yè)務質(zhì)量。但系統(tǒng)尚有改進和優(yōu)化的空間,研發(fā)小組將努力探索,根據(jù)業(yè)務發(fā)展需要,不斷改進和完善。
[1] 李黃.自動氣象站實用手冊(第1版)[M].北京:氣象出版社,2007.
[2] Bill Sheldon,Billy Hollis,Rob Windsor,David McCarter等.NET 4.5與Visual Basic 2012 高級編程(第7版)[M].北京:清華大學出版社,2014.
[3] 鐘靜,李赟,陳海濤,等.基于SMS技術(shù)的氣象報文監(jiān)控設計與實現(xiàn)[J].貴州氣象,2011,35(4):42-43.
[4] 湯寧,方斌,王娟.貴州省氣象局實時業(yè)務管理及監(jiān)控平臺簡介[J].貴州氣象,2012,36(4):42-43.
[5] Zhang jianlou上傳.TC35 TC35i AT指令手冊. http://wenku.baidu.com/view/22efb7f4f61fb7360b4c652f.html(上傳日期:2011年3月19日)
Research on monitoring system of automatic station at county level
PENG Xianfeng1,WANG Qiao1,DU Longcai2
(1.Xingren Meteorological Bureau of Guizhou Province,Xingren 562300, China;2.Guiyang Meteorological Bureau of Guizhou Province, Guiyang 550001, China)
With the modernization of meteorological observation, observation apparatus, business software, network fault and power supply system instability have become the major factors affecting the quality of observation. Using the computer to observe the system for automatic monitoring, and timely notice to the staff to deal with abnormity, can effectively improve the service quality and efficiency. This paper introduces the main functions and working principle of the "automatic station monitoring system ", and focus on discussing the key programming techniques multi thread programming, database access, using of GSM/GPRS Modem and file automatic backup in detail.
automatic station monitoring system; working principle; programming skills
1003-6598(2017)01-0081-04
2016-10-26
彭顯鋒(1975—),男,副高,主要從事綜合氣象業(yè)務工作,E-mail:780398175@qq.com。
貴州省氣象局氣象科技開放研究基金項目(黔氣科合KF[2016]04號)。
TP311.52
B