摘 要:主要闡述了自動站溫濕度傳感器數(shù)據(jù)采集及處理系統(tǒng)的軟件設(shè)計(jì),分析了其功能、結(jié)構(gòu)、界面設(shè)計(jì),介紹了數(shù)據(jù)的采集、存儲、查詢、證書打印等的實(shí)現(xiàn)算法。經(jīng)實(shí)踐驗(yàn)證,該系統(tǒng)提高了傳感器的檢定速度,節(jié)省了檢定人力。
關(guān)鍵詞:溫濕傳感器批量檢定系統(tǒng);軟件設(shè)計(jì);用戶界面;數(shù)據(jù)管理
目前對于國內(nèi)氣象站溫度、濕度及氣壓傳感器的檢定主要還是依靠自動站采集器,通過采集器監(jiān)控軟件顯示傳感器讀數(shù),由于受自動站采集器通道的限制,各傳感器的批量檢定還不能實(shí)現(xiàn),校準(zhǔn)數(shù)據(jù)和證書還是以人工輸入為主,在這種條件下使得傳感器的檢定耗時長、占用人力多[1]。為了改善這種狀況,在VC6.0環(huán)境下使用MSComm通信控件和SQL Sever 2000數(shù)據(jù)庫技術(shù),開發(fā)了自動站溫濕度傳感器數(shù)據(jù)采集及處理系統(tǒng),實(shí)現(xiàn)多路溫濕傳感器的數(shù)據(jù)批量采集,實(shí)現(xiàn)對于溫濕傳感器的批量檢定。
1 軟件的主要功能、結(jié)構(gòu)和界面設(shè)計(jì)
本系統(tǒng)主要通過對溫濕度傳感器的數(shù)據(jù)采集,實(shí)現(xiàn)對溫濕傳感器批量檢定。整個系統(tǒng)在Visual C++ 6.0環(huán)境下開發(fā),總共包括五大模塊:溫濕度傳感器數(shù)據(jù)檢測模塊、溫濕度傳感器數(shù)據(jù)存儲模塊、溫濕度傳感器合格與否自動判定模塊、溫濕度傳感器數(shù)據(jù)查詢模塊、相關(guān)證書的打印模塊。
軟件的各功能菜單采用統(tǒng)一格式的用戶串口界面。其中,屏幕顯示的是以下幾個方面:⑴主界面,由背景界面和主菜單組成;⑵點(diǎn)擊檢測菜單時,顯示溫濕度傳感器的信息界面,所填的信息包括所測傳感器的信息和標(biāo)準(zhǔn)器的信息。⑶該系統(tǒng)的查詢功能可對檢測數(shù)據(jù)和檢測結(jié)論分別查詢。
2 數(shù)據(jù)的采集、存儲和查詢
2.1 串口通信實(shí)現(xiàn)數(shù)據(jù)的批量采集
串行通信應(yīng)用廣泛,在數(shù)據(jù)通信、計(jì)算機(jī)網(wǎng)絡(luò)以及分布式工業(yè)控制系統(tǒng)中,經(jīng)常采用串行通信來交換數(shù)據(jù)和信息[2]。在Visual C++ 6.0環(huán)境下,一般使用控件‘MSComm’控件進(jìn)行串行通信開發(fā)。通過MSComm控件,上位機(jī)也可以實(shí)現(xiàn)對下位機(jī)的操作,比如實(shí)時顯示數(shù)據(jù),更改需要檢測的傳感器個數(shù)等。
2.1.1 檢測數(shù)據(jù)的實(shí)時顯示
該系統(tǒng)要求每隔3秒鐘一次顯示1號,2號,…,n號傳感器所檢測的溫度/濕度數(shù)據(jù),即要求實(shí)現(xiàn)數(shù)據(jù)的實(shí)時顯示。具體算法為:設(shè)置一個3秒定時器,每隔3秒向下位機(jī)發(fā)送一個數(shù)據(jù),用于通知單片機(jī)需要幾號傳感器的測量值,并且根據(jù)不同的數(shù)據(jù)告知單片機(jī)需要的是溫度值,還是濕度值,進(jìn)而可以區(qū)別測量溫濕度的值。在本系統(tǒng)中,當(dāng)需要傳感器檢測的溫度值時,上位機(jī)會向下位機(jī)發(fā)送0xF0-0xF7;需要傳感器檢測的濕度值時,上位機(jī)會向下位機(jī)傳送0xF8-0xFF。下位機(jī)根據(jù)上位機(jī)的數(shù)據(jù),選擇輸出不同的傳感器的溫度/濕度值。上位機(jī)接受到數(shù)據(jù)之后,顯示在相應(yīng)的編輯框中。
2.1.2 傳感器有效個數(shù)的更改
執(zhí)行更改需要檢測的傳感器個數(shù)的程序,具體的算法:根據(jù)用戶在下拉列表中選擇的個數(shù),調(diào)用CWnd中的子函數(shù)GetDlgItem()和EnableWindow()函數(shù)使得被選中的所有的傳感器相應(yīng)的編輯框有效。
2.2 SQL-Server 2000數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)的存儲和查詢
SQL-Server 2000是微軟公司開發(fā)的中型數(shù)據(jù)庫,它的可視化方面做得很好,在安全性等方面功能非常強(qiáng)大,并且有微軟的強(qiáng)大技術(shù)支持。連接和使用SQL Server數(shù)據(jù)庫有多種不同方法,包括ODBC,DAO和RDO等。ADO是Microsoft的主要數(shù)據(jù)訪問方法,故本系統(tǒng)采用ADO方法。ADO與OLE DB是Microsoft的Universal Data Access(UDA)策略中的關(guān)鍵組件。OLE DB定義一組COM接口,包括數(shù)據(jù)訪問服務(wù)。ADO是個高級對象模型,將OLE DB提供的數(shù)據(jù)提供給應(yīng)用程序。UDA(universal data access,通用數(shù)據(jù)訪問,也叫全局?jǐn)?shù)據(jù)訪問)是microsoft為企業(yè)應(yīng)用范圍內(nèi)各種類型信息存取所制定的一項(xiàng)新戰(zhàn)略,它提供對多種數(shù)據(jù)源進(jìn)行存取的一致界面。
利用Microsoft OLE DB Provider for SQL Server(SQLOLEDB),可不必訪問另一ODBC API和驅(qū)動器層,可以直接訪問數(shù)據(jù)源。要使用這個數(shù)據(jù)提供者,經(jīng)連接字符串的Provider變元設(shè)置為SQLOLEDB。
與DAO和RDO等數(shù)據(jù)訪問庫相比,ADO對象模型很簡單,主要有五個對象,可以實(shí)例化更多底層集合和對象。Connection對象,表示打開的數(shù)據(jù)源連接;Command對象,可以對SQL Server執(zhí)行命令;Recordset對象,是從SQL Server返回的一組記錄,但Recordset對象還提供了客戶機(jī)應(yīng)用程序中讀取、更新和操縱數(shù)據(jù)的機(jī)制[3]。本系統(tǒng)較多使用了Recordset對象對數(shù)據(jù)庫進(jìn)行操作;Record對象,表示層次式機(jī)構(gòu)中存放的數(shù)據(jù),Record對象也可表示Recordset中的行,利用這個對象可以管理文件系統(tǒng)中的目錄和文件,或e-mail系統(tǒng)中的文件夾與消息。
本系統(tǒng)共需要三個表格:溫濕傳感器的信息(HTSensorI nfo)、溫濕傳感器濕度檢測數(shù)據(jù)(HTHSensorData)、溫濕傳感器溫度檢測數(shù)據(jù)(HTTSensorData),每個表格中包含所需要存儲的各個變量。這三個表格同在HTSensor數(shù)據(jù)庫中。
使用SQLOLEDB連接SQL Server數(shù)據(jù)庫,連接字符串如下:
\"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=HTSensor\";
2.2.1 數(shù)據(jù)的存儲
對于數(shù)據(jù)庫的存儲主要有兩個方面,一個是在沒有數(shù)據(jù)的情況下進(jìn)行數(shù)據(jù)的插入,另一個是原來存在數(shù)據(jù),則進(jìn)行數(shù)據(jù)的更新。
插入數(shù)據(jù)用到的是SQL Server中的INSERT語句,例如:
\"INSERT INTO HTSensorInfo(ChuChangNum,… …,Conclusion)VALUES('\"+ChuChangNum+\"',… …,'\"+Conclusion+\"')\";
更新數(shù)據(jù)用到的是SQL Server中的UPDATE語句,例如:
\"UPDATE HTSensorInfo SET SensorName='\"+SensorName+\"',… …,Conclusion='\"+Conclusion+\"'WHERE ChuChangNum='\"+ss+\"'\";//ss是參變量。
2.2.2 數(shù)據(jù)的查詢
數(shù)據(jù)的查詢主要用到了Visual C++的三個控件:ADO Data控件;DataGrid控件;DataCombo控件。
⑴ADO Data控件:使用ADO Data控件可以快速地創(chuàng)建一個到數(shù)據(jù)庫的連接,并且它調(diào)用Recordset對象提供對存儲在數(shù)據(jù)庫中的數(shù)據(jù)的訪問,并允許從一個記錄移動到另一個記錄,顯示和操縱記錄數(shù)據(jù)。ADO Data可以執(zhí)行大部分對數(shù)據(jù)庫的操作,但是它不能夠顯示數(shù)據(jù)庫中的數(shù)據(jù),一般會和數(shù)據(jù)察覺控件搭配使用,比如DataGrid控件、DataCombo控件、DataList控件。當(dāng)ADO Data控件中的當(dāng)前記錄發(fā)生變化時,數(shù)據(jù)查詢控件中的數(shù)據(jù)也隨之發(fā)生變化。
本文中,對于每個用到的數(shù)據(jù)表格都關(guān)聯(lián)了相應(yīng)的ADO Data控件。這樣,就可以實(shí)現(xiàn)了將數(shù)據(jù)庫中的數(shù)據(jù)與數(shù)據(jù)察覺控件相聯(lián)系,顯示數(shù)據(jù)庫中的數(shù)據(jù)。
⑵DataGrid控件:DataGrid控件以表格的形式顯示結(jié)果集中的數(shù)據(jù),它需要ADO Data控件提供數(shù)據(jù)源。與關(guān)練了數(shù)據(jù)庫中相關(guān)表格大ADO Data控件相結(jié)合,DataGrid控件中便可以顯示測量的數(shù)據(jù)。
⑶DataCombo控件:DataCombo控件是數(shù)據(jù)綁定組合框。其外表是一個組合框的形式,它與一般的組合框的不同之處在于它需要一個ADO Data控件指定數(shù)據(jù)源,并且使用數(shù)據(jù)源中的一個字段填充。而這個字段將是顯示在這個組合框中的內(nèi)容。鑒于本系統(tǒng)的查詢要求,本系統(tǒng)用到的所有DataCombo控件都是和數(shù)據(jù)源中的儀器編號相聯(lián)系。
本系統(tǒng)中的查詢界面由數(shù)據(jù)查詢和檢驗(yàn)結(jié)論查詢兩部分組成。使用兩個Adodc控件分別為DataCombo控件和DataGrid控件提供數(shù)據(jù)。利用SELECT語句實(shí)現(xiàn)查詢功能。舉例如下:
CString strSql=\"SELECT Sensor_id,ChuChangNum AS 出廠編號,… …,Time AS檢校時間FROM HTSensorInfo\";
3 調(diào)用EXCEL實(shí)現(xiàn)數(shù)據(jù)、證書的輸出打印
因?yàn)樽C書有一定的格式,所以實(shí)現(xiàn)證書的打印,用到的算法為:預(yù)先設(shè)定好相應(yīng)的模板,在Visual C++環(huán)境中調(diào)用一定格式的Excel表格進(jìn)行數(shù)據(jù)的導(dǎo)出、證書的打印等。
在Visual C++中根據(jù)模板創(chuàng)建EXCEL的程序?yàn)椋?/p>
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!m_App.CreateDispatch(\"Excel.Application\",NULL))
{
AfxMessageBox(\"創(chuàng)建Excel服務(wù)失??!\");
return;
}
m_App.SetVisible(1);
//利用模板文件建立新文檔
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += \"\\\"+moban;//‘moban’為參變量?!甿oban’不同,創(chuàng)建出的EXCEL表格便不相同。
m_Books.AttachDispatch(m_App.GetWorkbooks(),true);……
4 結(jié)束語
該系統(tǒng)集數(shù)據(jù)采集、數(shù)據(jù)存貯、證書打印于一體,適用于鉑電阻溫度表、氣壓傳感器(模擬信號輸出)、濕度、風(fēng)向(模擬信號輸出)傳感器的批量校準(zhǔn),為自動氣象站傳感器室內(nèi)檢定、校準(zhǔn)發(fā)揮了重要作用。
[參考文獻(xiàn)]
[1]李光忠.基于單片機(jī)的溫濕度檢測系統(tǒng)的設(shè)計(jì)[D].山東大學(xué),2007.
[2]李長林,高潔.Visual C++串口通信技術(shù)與典型實(shí)例[M].北京:清華大學(xué)出版社.2006,20-25.
[3]孫鑫.VC ++深入詳解[M].北京:電子工業(yè)出版社.2008,752-767.