崔明 盧會國 裴翀 胡學(xué)英 劉銀鋒
摘要:在Microsoft Visual Studio 2008開發(fā)環(huán)境下,通過用C#語言連接SQL SERVER2000數(shù)據(jù)庫,實(shí)現(xiàn)了五個(gè)試驗(yàn)自動氣象站的分鐘狀態(tài)文件統(tǒng)計(jì)入庫。系統(tǒng)可以對各試驗(yàn)自動氣象站的分鐘運(yùn)行狀態(tài)進(jìn)行查詢和統(tǒng)計(jì),以便及時(shí)發(fā)現(xiàn)樣機(jī)設(shè)計(jì)和運(yùn)行中存在的問題。為試驗(yàn)階段對樣機(jī)的評估提拱了一定的幫助。
關(guān)鍵詞:自動氣象站;運(yùn)行狀態(tài);查詢統(tǒng)計(jì);系統(tǒng)設(shè)計(jì)
中圖分類號:TP315文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)16-3764-05
Design and Implementation of Automatic Weather Stations Query and Statistics System in Running Status
CUI Ming1, LU Hui-guo1, PEI Chong2, HU Xue-ying2, LIU Yin-feng2
(1. Chengdu University of Information Technology, Chengdu 610225, China; 2.Atmospheric Observation Technology Center CMA, Bei jing 100081, China)
Abstract: The system realizes the minute operation and automatic data that from five test automatic weather stations analysis and storage f by using C # to connect SQL SERVER2000 database in the development environment of Microsoft Visual Studio 2008. And the system provides function like query and statistics minute operation information that from each test automatic weather station, so that timely discov ery the existing problems prototype designs and operations. It provides some help for evaluation of the prototype in the test stage.
Key words: automatic weather station; running status; query and statistics; system design
我國自動氣象站站點(diǎn)數(shù)量龐大,其中包括2400多個(gè)基本業(yè)務(wù)站和30000多個(gè)區(qū)域站點(diǎn)。如此多的站點(diǎn)設(shè)備維護(hù)是異常困難的。而設(shè)備正常無故障運(yùn)行是保障探測數(shù)據(jù)的質(zhì)量狀況、氣象預(yù)報(bào)準(zhǔn)確性和決策服務(wù)有效性的前提。氣象行業(yè)專項(xiàng)項(xiàng)目“地面觀測網(wǎng)自動化運(yùn)行監(jiān)控技術(shù)研究”在現(xiàn)有自動站的基礎(chǔ)上通過對設(shè)備進(jìn)行改造設(shè)計(jì),實(shí)現(xiàn)了對自動站各部件運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控。改造后的樣機(jī)除了上傳正常的觀測要素?cái)?shù)據(jù)外,還每10分鐘上傳樣機(jī)的運(yùn)行狀態(tài)文件,文件按一定的格式記錄該10分鐘內(nèi)自動站各部件的運(yùn)行狀態(tài)和其它參數(shù)信息。在SQL SERVER2000數(shù)據(jù)庫支持下,采用C#語言,在Microsoft Visual Studio 2008開發(fā)環(huán)境下設(shè)計(jì)的自動氣象站運(yùn)行狀態(tài)查詢和統(tǒng)計(jì)系統(tǒng)就是對試驗(yàn)樣機(jī)上傳的分鐘狀態(tài)文件進(jìn)行解析入庫,并實(shí)現(xiàn)對樣機(jī)運(yùn)行狀態(tài)的查詢和統(tǒng)計(jì)。
1系統(tǒng)框架設(shè)計(jì)
為了對樣機(jī)的設(shè)計(jì)改造進(jìn)行檢驗(yàn),項(xiàng)目在全國范圍內(nèi)選取了五個(gè)試驗(yàn)場地進(jìn)行為期一年的外場試驗(yàn)。分鐘數(shù)據(jù)文件和狀態(tài)文件每隔10分鐘由臺站上傳到國家局服務(wù)器。在試驗(yàn)階段將數(shù)據(jù)由服務(wù)器下載到本地計(jì)算機(jī)后在進(jìn)行解析入庫,為系統(tǒng)的查詢統(tǒng)計(jì)提供支持。查詢界面通過對分鐘數(shù)據(jù)進(jìn)行訪問和統(tǒng)計(jì),實(shí)現(xiàn)對自動站運(yùn)行狀態(tài)的查詢和故障部件的統(tǒng)計(jì)分析。系統(tǒng)結(jié)構(gòu)圖如圖1。
2 C#和SQL SEVER數(shù)據(jù)庫
2.1 C#語言概述[1]
C# (C SHARP)是一種最新的、面向?qū)ο蟮木幊陶Z言。它使得程序員可以快速地編寫各種基于MICROSOFT .NET平臺的應(yīng)用程序。使用C#開發(fā)應(yīng)用程序比使用C++簡單,因?yàn)槠湔Z法簡單。但C#是一種強(qiáng)大的語言,C++能完成的任務(wù)利用C#也能完成。C#的優(yōu)點(diǎn)是,它是唯一為.NET Framework設(shè)計(jì)的語言,是在移植到其他操作系統(tǒng)上的.NET版本的主要語言。用C#編寫Windows應(yīng)用程序具有我們熟悉的Windows外觀和操作方式,利用VS2008的Windows Forms模塊就能生成這樣的應(yīng)用程序。Windows Forms模塊是一個(gè)控件庫,其中的控件(如按鈕、工具欄、菜單欄等)可以用以建立Windows用戶界面。
另外,在進(jìn)行數(shù)據(jù)庫訪問是,可以通過Active Data Objects.NET(ADO.NET)部分或C#得LINQ功能。
2.2 SQL SERVER數(shù)據(jù)庫相關(guān)概念[2-3]
SQL2000是一個(gè)高性能的客戶端/服務(wù)器結(jié)構(gòu)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。SQL的一個(gè)主要有待你就是與主流客戶端/服務(wù)器開關(guān)工具和桌面應(yīng)用程序的緊密集成??梢栽赩isual Basic.NET,Visual C#.NET和Visual C++中訪問SQL Server2000數(shù)據(jù)庫。
2.2.1表
SQL Server2000數(shù)據(jù)庫的所有數(shù)據(jù)包含在稱為表的對象中。每個(gè)表代表某類對用戶有意義的對象。SQL Server中的表有行和列兩個(gè)主要組件,如圖2所示。
圖2 SQL Server2000表實(shí)例
2.2.2 SELECT查詢語句
數(shù)據(jù)查詢是用來描述從數(shù)據(jù)庫中獲得數(shù)據(jù)和操縱數(shù)據(jù)的過程,是對已經(jīng)存在與數(shù)據(jù)中的數(shù)據(jù)按照指定條件檢索的過程。SE LECT語句從數(shù)據(jù)庫中檢索出數(shù)據(jù),然后以一個(gè)或多個(gè)結(jié)果集的形式將其返回給用戶。SELECT語句的完整語法比較復(fù)雜,其主要子句可總結(jié)為:
SELECT select_list [DISTINCT] [TOP n]
[INTO new_table_name]
[FROM able_list]
[WHERE search_conditions]
[GROUP BY group_by_list]
[HAVING search_conditions]
[ORDER BY order_list [ASC | DESC]]
雖然SELECT語句的完整語法比較復(fù)雜,但該系統(tǒng)中主要應(yīng)用SELECT語句描述結(jié)果集的4個(gè)主要屬性,即,結(jié)果集的列的數(shù)量和屬性、結(jié)果集從中檢索數(shù)據(jù)的表、條件語句、結(jié)果集得分組。
3數(shù)據(jù)庫主要數(shù)據(jù)表
分鐘觀測數(shù)據(jù)表(odata_OM):該表存儲5個(gè)試驗(yàn)站點(diǎn)的分鐘觀測數(shù)據(jù),每個(gè)站點(diǎn)每分鐘一條記錄,是通過上傳的分鐘數(shù)據(jù)文件進(jìn)行解析后導(dǎo)入數(shù)據(jù)庫的;10分鐘觀測數(shù)據(jù)表(odata_OT):此數(shù)據(jù)表內(nèi)存儲站點(diǎn)每十分鐘的觀測數(shù)據(jù),每個(gè)站點(diǎn)每十分鐘一條記錄,是后期數(shù)據(jù)質(zhì)量控制的基礎(chǔ)數(shù)據(jù)表;小時(shí)觀測數(shù)據(jù)表(odata_OH):表內(nèi)存有試驗(yàn)站點(diǎn)的小時(shí)觀測數(shù)據(jù),每個(gè)站點(diǎn)每小時(shí)一條記錄,是與基本業(yè)務(wù)站進(jìn)行數(shù)據(jù)對比的基礎(chǔ)數(shù)據(jù)表;分鐘狀態(tài)數(shù)據(jù)表(rdata_OM_JY、rdata_OM_NC、rdata_OM_NJ、rdata_OM_XN、rdata_OM_ZQ):每個(gè)實(shí)驗(yàn)站點(diǎn)各一個(gè)分鐘狀態(tài)數(shù)據(jù)表,表內(nèi)存有個(gè)站點(diǎn)的分鐘運(yùn)行狀態(tài),這5個(gè)表是“狀態(tài)查詢”和“狀態(tài)統(tǒng)計(jì)”功能的基礎(chǔ),具有相同的表結(jié)構(gòu)。除了這些主要表外,還有文件名錯(cuò)誤表(files_Namecheck)、數(shù)據(jù)格式錯(cuò)誤表(element_Check):表內(nèi)分別存有在進(jìn)行文件名格式檢查是發(fā)現(xiàn)的錯(cuò)誤信息和數(shù)據(jù)格式錯(cuò)誤信息;站點(diǎn)信息表(site_Info):存放五個(gè)實(shí)驗(yàn)站點(diǎn)的基本信息。
4主要程序設(shè)計(jì)
4.1數(shù)據(jù)庫操作類
class DataCon
{public SqlConnection getcon()
{string M_str_sqlcon = "Data Source=.;Initial Catalog=db_SAMTR;Integrated Security=True";
SqlConnection myCon = new SqlConnection(M_str_sqlcon);
return myCon;
}public DataSet getds(string M_str_sqlstr, string M_str_table)
{SqlConnection sqlcon = this.getcon();
SqlDataAdapter sqlda = new SqlDataAdapter(M_str_sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlda.Fill(myds, M_str_table);
return myds;
}}
其中方法getcon()用來建立數(shù)據(jù)庫連接,M_str_sqlcon為連接字符串;方法getds(string M_str_sqlstr, string M_str_table)創(chuàng)建DetSet對象,將數(shù)據(jù)顯示到窗體的DataGridView控件中,參數(shù)M_str_sqlstr為SQL語句。
4.2主要數(shù)據(jù)操作
string sqlstatus = @"INSERT INTO "+station+"(臺站號,觀測時(shí)間,部件數(shù)量,FRU數(shù)量,系統(tǒng)部件狀態(tài),FRU狀態(tài),采集狀態(tài),采集信息,地溫狀態(tài),地溫信息,溫濕度狀態(tài),溫濕度信息,風(fēng)狀態(tài),風(fēng)信息,雨?duì)顟B(tài),雨量信息,供電狀態(tài),供電信息) VALUES(@臺站號,@觀測時(shí)間,@部件數(shù)量,@FRU數(shù)量,@系統(tǒng)部件狀態(tài),@FRU狀態(tài),@采集狀態(tài),@采集信息, @地溫狀態(tài),@地溫信息,@溫濕度狀態(tài),@溫濕度信息,@風(fēng)狀態(tài),@風(fēng)信息,@雨?duì)顟B(tài),@雨量信息,@供電狀態(tài),@供電信息)";
SqlCommand command = new SqlCommand(sqlstatus, conn);
上述sqlstatus為狀態(tài)數(shù)據(jù)入庫時(shí)的SQL語句,通過執(zhí)command.ExecuteNonQuery()將處理后的數(shù)據(jù)存入不同的數(shù)據(jù)表中。
DataCon dataconn = new DataCon();
DataSet myds = dataconn.getds("select * from " + station + " where觀測時(shí)間>=" + strbegin + " and觀測時(shí)間<=" + strend + "", ""+ station + "");
dgvShow.DataSource = myds.Tables["" + station + ""];
DataSet myds1 = dataconn.getds("select系統(tǒng)部件狀態(tài),count(*)as總數(shù)from " + strstation + " where觀測時(shí)間>=" + strbegin + " and觀測時(shí)間<" + strend + " group by系統(tǒng)部件狀態(tài)", "" + station + "");
dataGridView1.DataSource = myds1.Tables["" + station + ""];
執(zhí)行上述程序分別實(shí)現(xiàn)對運(yùn)行狀態(tài)的查詢顯示及統(tǒng)計(jì)顯示。其中station對應(yīng)站點(diǎn)的數(shù)據(jù)表名稱;strbegin、strend要查詢的開始時(shí)間和結(jié)束時(shí)間,通過DateTimePicker控件來選擇。查詢結(jié)果會顯示在窗體的DataGridView控件中。
系統(tǒng)采用C/S(Client/Server)結(jié)構(gòu),初步主要有數(shù)據(jù)入庫、狀態(tài)查詢、故障統(tǒng)計(jì)、設(shè)被參數(shù)查詢顯示等功能(如圖3所示。)。通過公用數(shù)據(jù)庫操作類實(shí)現(xiàn)對數(shù)據(jù)庫的連接及對數(shù)據(jù)庫中數(shù)據(jù)表的操作。
5.1數(shù)據(jù)入庫界面
點(diǎn)擊主界面中的“數(shù)據(jù)入庫”按鈕進(jìn)入數(shù)據(jù)入庫界面。首先通數(shù)據(jù)庫操作公用類建立與數(shù)據(jù)庫的連接。在選擇站點(diǎn)數(shù)據(jù)庫后,通過System.IO名稱空間提供的文件讀寫類StreamReader對數(shù)據(jù)文件進(jìn)行解析入庫。在將數(shù)據(jù)文件讀取并按照規(guī)定的格式處理后,通過執(zhí)行SQL語句將處理后的數(shù)據(jù)存入已有的數(shù)據(jù)表中。在處理不同類型(觀測數(shù)據(jù)、狀態(tài)數(shù)據(jù))、不同時(shí)間(分鐘、10分鐘、小時(shí))的數(shù)據(jù)時(shí)程序會執(zhí)行不同的SQL語句,將數(shù)據(jù)存入對應(yīng)的表中。同時(shí)在解析文件時(shí)會對文件名的格式和數(shù)據(jù)格式進(jìn)行初步的判斷。如果存在錯(cuò)誤,錯(cuò)誤信息會存入已有的表文件名錯(cuò)誤表(files_Namecheck)、數(shù)據(jù)格式錯(cuò)誤表(element_Check)中。此外還實(shí)現(xiàn)了對數(shù)據(jù)文件的備份處理,見圖3。
5.2狀態(tài)查詢界面
在該查詢界面中選擇查詢站點(diǎn)和時(shí)間段后,查詢結(jié)果會顯示到窗體的DataGridView控件中。點(diǎn)擊DataGridView數(shù)據(jù)單元格,此時(shí)的系統(tǒng)部件和FRU(可更換單元)的數(shù)據(jù)和解析后的結(jié)果會會顯示到相應(yīng)的位置,如圖5所示。實(shí)現(xiàn)了對任意時(shí)間樣機(jī)運(yùn)行狀態(tài)的查詢。為試驗(yàn)階段樣機(jī)的階段性評估及改進(jìn)維護(hù)提供了幫助。
5.3故障統(tǒng)計(jì)界面
該界面根據(jù)選擇的站點(diǎn)和時(shí)間,對數(shù)據(jù)庫表進(jìn)行檢索并按照系統(tǒng)部件狀態(tài)和RRU狀態(tài)進(jìn)行統(tǒng)計(jì),將查詢結(jié)果顯示到窗體中。通過點(diǎn)擊顯示結(jié)果,可以將統(tǒng)計(jì)的故障信息和故障總數(shù)顯示在界面中,如圖6所示。
6結(jié)束語
由于該系統(tǒng)是在項(xiàng)目試驗(yàn)階段為分析數(shù)據(jù)提供幫助而設(shè)計(jì)的,在設(shè)計(jì)和功能上還存在許多不足。在后期的的開發(fā)中會逐步增加觀測數(shù)的查詢顯示、數(shù)據(jù)質(zhì)量控制、對比分析、到報(bào)率統(tǒng)計(jì)等功能,以便為樣機(jī)的運(yùn)行評估提供必要的支持。但是該系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)了對試驗(yàn)驗(yàn)機(jī)觀測數(shù)據(jù)、狀態(tài)數(shù)據(jù)的解析入庫、狀態(tài)查詢及故障統(tǒng)計(jì)分析,為監(jiān)控樣機(jī)運(yùn)行和維護(hù)保障提供了一定的幫助。同時(shí)通過對數(shù)據(jù)的分析統(tǒng)計(jì)可以成項(xiàng)目階段性報(bào)告為項(xiàng)目順利完成提供幫助。
參考文獻(xiàn):
[1] Waston K. C#入門經(jīng)典[M].齊立波,譯.北京:清華大學(xué)出版社,2008:3-457.
[2]姜力,高群.SQLServer數(shù)據(jù)庫設(shè)計(jì)與管理[M].北京:北京大學(xué)出版社,2006:22-170
[3]格魯夫.SQL完全手冊[M].3版.北京:電子工業(yè)出版社,2010:48-178.
[4] Johansen B.Windows應(yīng)用高級編程—C#篇[M].張哲峰,譯.北京:清華大學(xué)出版社,2002:172-248.