高秋燕 姚舜才 李 健 閆 穎
(中北大學(xué) 信息與通信工程學(xué)院,山西 太原 030051)
串行通行是工業(yè)監(jiān)控系統(tǒng)中直觀重要的環(huán)節(jié),而且,在通常的控制系統(tǒng)中,上位機與下位機之間實現(xiàn)通信的方法和應(yīng)用平臺很多,而且不同的方法具有不同的特點[1]。在眾多集成可視化開發(fā)環(huán)境中,Visual C++是編程環(huán)境的最佳選擇,其中MFC它提供了相當齊備的類和友好的界面環(huán)境,應(yīng)用Visual C++可以輕松開發(fā)出功能強大、速度快、應(yīng)用廣泛、占用資源少的應(yīng)用程序。本文主要是在Visual C++環(huán)境下,借助iUSBDAQ - U120816采集卡和NTC熱敏溫度傳感器進行連接來進行數(shù)據(jù)采集的,在這里使用的是熱敏溫度傳感器的模塊,經(jīng)過熱敏溫度傳感器后,溫度信號轉(zhuǎn)換成相應(yīng)的電壓信號,然后經(jīng)過iUSBDAQ- U120816采集卡,把該電壓信號送進AI0,即模擬量輸入的第一個通道,進過采集卡的信號然后進過串口送給USB接口直接與PC機連接,通過對Visual C++編程來進行溫度采集、曲線的繪制,以及采集數(shù)據(jù)的存儲[2-3]。
Visual C++是Windows平臺上的C++編程環(huán)境,VC作為一個主流的開發(fā)平臺一直深受編程愛好者的喜愛,VC++應(yīng)用程序的開發(fā)主要有兩種模式,一種是WIN API方式,另一種則是MFC方式,傳統(tǒng)的WIN API開發(fā)方式比較繁瑣,而MFC則是對WIN API再次封裝,所以MFC相對于WIN API開發(fā)更具備效率優(yōu)勢,MFC是Win32API的包裝類,需要理解文檔視圖類的結(jié)構(gòu),窗口類的結(jié)構(gòu),消息流向等等[4]。
MFC借助C++的優(yōu)勢為Windows開發(fā)開辟了一片新天地,同時也借助ApplicationWizzard使開發(fā)者擺脫離了那些每次都必寫基本代碼,借助ClassWizard和消息映射使開發(fā)者擺脫了定義消息處理時那種混亂和冗長的代碼段。更令人興奮的是利用C++的封裝功能使開發(fā)者擺脫Windows中各種句柄的困擾,只需要面對C++中的對象,這樣一來使開發(fā)更接近開發(fā)語言而遠離系統(tǒng)[5]。
正因為MFC是建立在C++的基礎(chǔ)上,所以我強調(diào)C/C++語言基礎(chǔ)對開發(fā)的重要性。利用C++的封裝性開發(fā)者可以更容易理解和操作各種窗口對象;利用C++的派生性開發(fā)者可以減少開發(fā)自定義窗口的時間和創(chuàng)造出可重用的代碼;利用虛擬性可以在必要時更好的控制窗口的活動。而且C++本身所具備的超越C語言的特性都可以使開發(fā)者編寫出更易用,更靈活的代碼。在MFC中對消息的處理利用了消息映射的方法,該方法的基礎(chǔ)是宏定義實現(xiàn),通過宏定義將消息分派到不同的成員函數(shù)進行處理[6-7]。
室內(nèi)環(huán)境測試系統(tǒng)的溫度采集的硬件部分如下圖1所示:
圖1 溫度數(shù)據(jù)采集硬件連接圖
在上圖1中,小的那個模塊是NTC熱敏溫度傳感器的模塊,MF52 型熱敏電阻器是采用新材料、新工藝生產(chǎn)的小體積的樹脂包封型NTC 熱敏電阻器,具有高精度和快速反應(yīng)等優(yōu)點.在實際中,我們使用的是該溫度傳感器的模塊,經(jīng)過溫度傳感器后,溫度信號轉(zhuǎn)換成了相應(yīng)的電壓信號,模擬量輸出的電壓0-3.5V之間,并且該傳感器模塊需要5V的直流電源進行供電。NTC 熱敏電阻器特點:測試精度高;體積小、反應(yīng)速度快;.能長時間穩(wěn)定工作;互換性、一致性好。
USBDAQ – U120816可用于工業(yè)過程監(jiān)控,,它的主要功能有一下幾點:
1.USB 2.0/1.1 全 速 界 面(full speed interface)以及USB電纜線供電;
2.8 個單端(Single-Ended),12-Bit 模擬輸入(Analog Inputs),100Ks/s ADC ;
3.0 -4.096 V 模擬輸入電壓范圍(Analog Input Range),解析度為 1mv ;
4.在連續(xù)STREAMING模式下能實時將數(shù)據(jù)不間斷的采集到PC,總通過率多至32 kSamples/Sec,單通道的通過率多至13 kSamples/Sec for Streaming Mode多 至13kSamples/Second for Streaming Mode采集輸入。
5.一個外部觸發(fā)線供給STREAMING模式下數(shù)據(jù)采集和一個16-Bit計數(shù)器(Counter);
在這里設(shè)計的是工程名為“單通道溫度數(shù)據(jù)采集”的單文檔應(yīng)用程序,其中在MFC AppWizard-Step 6 of 6 對話框中,我們選擇的CMyView的基類是CFormView。
(1)用戶登錄界面的設(shè)計
系統(tǒng)登錄模塊用于驗證用戶登錄系統(tǒng)時輸入的用戶名、密碼是否正確,只有合法的用戶才可以進入系統(tǒng)。
圖2 用戶登錄界面
首先點擊視圖欄中ResourceView按鈕,單擊Dialog樹狀文件夾展開,右擊,插入一個Dialog子對話框,用于繪制用戶登錄對話框,可以按照如下圖對登錄界面對按鈕進行編程。
圖3 登錄界面流程圖
(2)主界面的設(shè)計
通過采集卡的USB數(shù)據(jù)線實現(xiàn)模擬量到數(shù)字量的轉(zhuǎn)換,輸入到計算機,通過該系統(tǒng)對輸入的信號進行處理,其中包括實時動態(tài)曲線顯示模塊,均值、最大值、最小值模塊,采集個數(shù),數(shù)據(jù)存儲模塊。繪制流程圖如圖3.1所示:
圖4 標準的軟件流程圖
根據(jù)上面如圖所示的流程圖來進行對每個區(qū)域的編程,下面介紹詳細的如何進行數(shù)據(jù)采集以及實時曲線繪制:
第一,先將iUsbApi.h和iUSBDAQ.h加入到工程文件中。
第二,在“單通道溫度數(shù)據(jù)采集View.cpp”的開 頭 處 添 加 #include“iUsbApi.h”和 #include“iUSBDAQ.h”。
第三,在開始對數(shù)據(jù)采集前,必須先視類的初始 化 時 OnInitialUpdate()中 添 加 LoadLibrary(“iUSBDAQ”),加載 iUSBDAQ - U120816采集卡的庫函數(shù)、打開采集卡以及打開要采集的數(shù)據(jù)通道,之后在該函數(shù)中讀取該采集卡和打開設(shè)備。
第四,開始對數(shù)據(jù)進行采集是還得先用IUSBDAQReadChannels,來設(shè)置打開的通道是哪個通道,在該采集系統(tǒng)中設(shè)計的是用第一個通道,來進行該通道數(shù)據(jù)的讀取。
第五,在讀取數(shù)據(jù)時,還必須定義一個時鐘,在這里設(shè)計的是每1000ms采集一次數(shù)據(jù),我們設(shè)計了兩個采集數(shù)據(jù)的按鈕,一個連續(xù)采集的按鈕,一個間斷采集的按鈕,可以根據(jù)需要來選擇使用哪種方式進行數(shù)據(jù)的采集[8]。
第六,對界面進行編程時,對實時數(shù)據(jù)采集的顯示,在對溫度進行采集時,得到的是單位為V的對應(yīng)的電壓值,方便及直觀我們,在圖像上的縱坐標顯示的是1400-1000*m_caiji(MV);橫坐標對應(yīng)的是時間[9]。
第七,界面設(shè)計中包括圖像顯示區(qū)、按鈕選擇區(qū)、實時數(shù)據(jù)顯示區(qū)和上下限指示區(qū),在界面的右下角我們還設(shè)計了一個當時的時間顯示。每一個區(qū)都分為一個模塊,使得我們的界面更加清晰,漂亮。
最后,我們還對所采集的數(shù)據(jù)進行了數(shù)據(jù)的存儲等的編程,以便為了以后對數(shù)據(jù)進行分析研究。下面為數(shù)據(jù)存儲的代碼,可以在0nPaint()函數(shù)中添加:
{
CString strTmp;
strTmp.Format(“%d“,m_caiji);
str += strTmp;
CStdioFile file(“d :data.txt “,CFile::modeWrite);
// 數(shù)據(jù)存儲位置
file.WriteString(str);// 數(shù)據(jù)寫入
file.Close(); // 關(guān)閉文件夾
}
數(shù)據(jù)采集界面以及實時曲線如圖5所示:
圖5 溫度數(shù)據(jù)采集的界面顯示
使用NTC熱敏溫度傳感器對室內(nèi)的溫度進行采集,再使用USB數(shù)據(jù)采集板與基于VC++6.0的PC機進行通信。通過溫度傳感器將溫度信號轉(zhuǎn)換成電壓信號,通過采集板的AI0通道將模擬信號輸進來,經(jīng)過采集板將該模擬信號轉(zhuǎn)換成數(shù)字量傳輸?shù)接嬎銠C上在界面中顯示出來。利用MFC的編程思想,在可視化的界面中,可以直觀的看見我們需要采集的數(shù)據(jù)。
在該系統(tǒng)中,我們使用的USB數(shù)據(jù)采集卡是多通道輸入的,而在這里我們只是利用單通道對室內(nèi)環(huán)境溫度進行測試,很有很多需要改進的地方,在以后的工作中,可以利用多通道對室內(nèi)的多個量進行采集分析,然后做出更加多功能的可視化界面,并且可以對采集到的數(shù)據(jù)來借助MATLAB進行濾波等的數(shù)據(jù)分析與研究。
[1] 陳天華.面向?qū)ο蟪绦蛟O(shè)計與Visual C++6.0教程.北京:清華大學(xué)出版社,2006.7-20.
[2] 孫鑫 .VC++深入詳解.[M].北京: 電子工業(yè)出版社,2012;100-160.
[3] 田敏,鄭瑤,李江全.Visual C++數(shù)據(jù)采集與串口通信測試應(yīng)用實踐.人民郵電出版社.2010.7-81.
[4] 陳志泊,王春玲,孟偉.北京.面對對象的程序設(shè)計語言,人民郵電出版社.2007.8-20.
[5] 鄭阿奇,丁有和.Visual C++應(yīng)用教程.北京:人民郵電出版社,2008.100-123.
[6] 張立科.Visual C++6.0程序設(shè)計與開發(fā)技術(shù)大全.北京:人民郵電出版社,2004.70-81.
[7] 幸長安,梅林.VC++編程技術(shù)與難點剖析.北京:清華大學(xué)出版社,2002.32-45.
[8] 羅斌.Visual C++編程技巧精選.北京:中國水利水電出版社,2005.101-132.
[9] 湛為芳.高效實用Visual C++庫函數(shù)設(shè)計.北京:清華大學(xué)出版社.2010.50-54.