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