高秋燕 姚舜才 李 健 閆 穎
(中北大學 信息與通信工程學院,山西 太原 030051)
串行通行是工業監控系統中直觀重要的環節,而且,在通常的控制系統中,上位機與下位機之間實現通信的方法和應用平臺很多,而且不同的方法具有不同的特點[1]。在眾多集成可視化開發環境中,Visual C++是編程環境的最佳選擇,其中MFC它提供了相當齊備的類和友好的界面環境,應用Visual C++可以輕松開發出功能強大、速度快、應用廣泛、占用資源少的應用程序。本文主要是在Visual C++環境下,借助iUSBDAQ - U120816采集卡和NTC熱敏溫度傳感器進行連接來進行數據采集的,在這里使用的是熱敏溫度傳感器的模塊,經過熱敏溫度傳感器后,溫度信號轉換成相應的電壓信號,然后經過iUSBDAQ- U120816采集卡,把該電壓信號送進AI0,即模擬量輸入的第一個通道,進過采集卡的信號然后進過串口送給USB接口直接與PC機連接,通過對Visual C++編程來進行溫度采集、曲線的繪制,以及采集數據的存儲[2-3]。
Visual C++是Windows平臺上的C++編程環境,VC作為一個主流的開發平臺一直深受編程愛好者的喜愛,VC++應用程序的開發主要有兩種模式,一種是WIN API方式,另一種則是MFC方式,傳統的WIN API開發方式比較繁瑣,而MFC則是對WIN API再次封裝,所以MFC相對于WIN API開發更具備效率優勢,MFC是Win32API的包裝類,需要理解文檔視圖類的結構,窗口類的結構,消息流向等等[4]。
MFC借助C++的優勢為Windows開發開辟了一片新天地,同時也借助ApplicationWizzard使開發者擺脫離了那些每次都必寫基本代碼,借助ClassWizard和消息映射使開發者擺脫了定義消息處理時那種混亂和冗長的代碼段。更令人興奮的是利用C++的封裝功能使開發者擺脫Windows中各種句柄的困擾,只需要面對C++中的對象,這樣一來使開發更接近開發語言而遠離系統[5]。
正因為MFC是建立在C++的基礎上,所以我強調C/C++語言基礎對開發的重要性。利用C++的封裝性開發者可以更容易理解和操作各種窗口對象;利用C++的派生性開發者可以減少開發自定義窗口的時間和創造出可重用的代碼;利用虛擬性可以在必要時更好的控制窗口的活動。而且C++本身所具備的超越C語言的特性都可以使開發者編寫出更易用,更靈活的代碼。在MFC中對消息的處理利用了消息映射的方法,該方法的基礎是宏定義實現,通過宏定義將消息分派到不同的成員函數進行處理[6-7]。
室內環境測試系統的溫度采集的硬件部分如下圖1所示:

圖1 溫度數據采集硬件連接圖
在上圖1中,小的那個模塊是NTC熱敏溫度傳感器的模塊,MF52 型熱敏電阻器是采用新材料、新工藝生產的小體積的樹脂包封型NTC 熱敏電阻器,具有高精度和快速反應等優點.在實際中,我們使用的是該溫度傳感器的模塊,經過溫度傳感器后,溫度信號轉換成了相應的電壓信號,模擬量輸出的電壓0-3.5V之間,并且該傳感器模塊需要5V的直流電源進行供電。NTC 熱敏電阻器特點:測試精度高;體積小、反應速度快;.能長時間穩定工作;互換性、一致性好。
USBDAQ – U120816可用于工業過程監控,,它的主要功能有一下幾點:
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.在連續STREAMING模式下能實時將數據不間斷的采集到PC,總通過率多至32 kSamples/Sec,單通道的通過率多至13 kSamples/Sec for Streaming Mode多 至13kSamples/Second for Streaming Mode采集輸入。
5.一個外部觸發線供給STREAMING模式下數據采集和一個16-Bit計數器(Counter);
在這里設計的是工程名為“單通道溫度數據采集”的單文檔應用程序,其中在MFC AppWizard-Step 6 of 6 對話框中,我們選擇的CMyView的基類是CFormView。
(1)用戶登錄界面的設計
系統登錄模塊用于驗證用戶登錄系統時輸入的用戶名、密碼是否正確,只有合法的用戶才可以進入系統。

圖2 用戶登錄界面
首先點擊視圖欄中ResourceView按鈕,單擊Dialog樹狀文件夾展開,右擊,插入一個Dialog子對話框,用于繪制用戶登錄對話框,可以按照如下圖對登錄界面對按鈕進行編程。

圖3 登錄界面流程圖
(2)主界面的設計
通過采集卡的USB數據線實現模擬量到數字量的轉換,輸入到計算機,通過該系統對輸入的信號進行處理,其中包括實時動態曲線顯示模塊,均值、最大值、最小值模塊,采集個數,數據存儲模塊。繪制流程圖如圖3.1所示:

圖4 標準的軟件流程圖
根據上面如圖所示的流程圖來進行對每個區域的編程,下面介紹詳細的如何進行數據采集以及實時曲線繪制:
第一,先將iUsbApi.h和iUSBDAQ.h加入到工程文件中。
第二,在“單通道溫度數據采集View.cpp”的開 頭 處 添 加 #include“iUsbApi.h”和 #include“iUSBDAQ.h”。
第三,在開始對數據采集前,必須先視類的初始 化 時 OnInitialUpdate()中 添 加 LoadLibrary(“iUSBDAQ”),加載 iUSBDAQ - U120816采集卡的庫函數、打開采集卡以及打開要采集的數據通道,之后在該函數中讀取該采集卡和打開設備。
第四,開始對數據進行采集是還得先用IUSBDAQReadChannels,來設置打開的通道是哪個通道,在該采集系統中設計的是用第一個通道,來進行該通道數據的讀取。
第五,在讀取數據時,還必須定義一個時鐘,在這里設計的是每1000ms采集一次數據,我們設計了兩個采集數據的按鈕,一個連續采集的按鈕,一個間斷采集的按鈕,可以根據需要來選擇使用哪種方式進行數據的采集[8]。
第六,對界面進行編程時,對實時數據采集的顯示,在對溫度進行采集時,得到的是單位為V的對應的電壓值,方便及直觀我們,在圖像上的縱坐標顯示的是1400-1000*m_caiji(MV);橫坐標對應的是時間[9]。
第七,界面設計中包括圖像顯示區、按鈕選擇區、實時數據顯示區和上下限指示區,在界面的右下角我們還設計了一個當時的時間顯示。每一個區都分為一個模塊,使得我們的界面更加清晰,漂亮。
最后,我們還對所采集的數據進行了數據的存儲等的編程,以便為了以后對數據進行分析研究。下面為數據存儲的代碼,可以在0nPaint()函數中添加:
{
CString strTmp;
strTmp.Format(“%d“,m_caiji);
str += strTmp;
CStdioFile file(“d :data.txt “,CFile::modeWrite);
// 數據存儲位置
file.WriteString(str);// 數據寫入
file.Close(); // 關閉文件夾
}
數據采集界面以及實時曲線如圖5所示:

圖5 溫度數據采集的界面顯示
使用NTC熱敏溫度傳感器對室內的溫度進行采集,再使用USB數據采集板與基于VC++6.0的PC機進行通信。通過溫度傳感器將溫度信號轉換成電壓信號,通過采集板的AI0通道將模擬信號輸進來,經過采集板將該模擬信號轉換成數字量傳輸到計算機上在界面中顯示出來。利用MFC的編程思想,在可視化的界面中,可以直觀的看見我們需要采集的數據。
在該系統中,我們使用的USB數據采集卡是多通道輸入的,而在這里我們只是利用單通道對室內環境溫度進行測試,很有很多需要改進的地方,在以后的工作中,可以利用多通道對室內的多個量進行采集分析,然后做出更加多功能的可視化界面,并且可以對采集到的數據來借助MATLAB進行濾波等的數據分析與研究。
[1] 陳天華.面向對象程序設計與Visual C++6.0教程.北京:清華大學出版社,2006.7-20.
[2] 孫鑫 .VC++深入詳解.[M].北京: 電子工業出版社,2012;100-160.
[3] 田敏,鄭瑤,李江全.Visual C++數據采集與串口通信測試應用實踐.人民郵電出版社.2010.7-81.
[4] 陳志泊,王春玲,孟偉.北京.面對對象的程序設計語言,人民郵電出版社.2007.8-20.
[5] 鄭阿奇,丁有和.Visual C++應用教程.北京:人民郵電出版社,2008.100-123.
[6] 張立科.Visual C++6.0程序設計與開發技術大全.北京:人民郵電出版社,2004.70-81.
[7] 幸長安,梅林.VC++編程技術與難點剖析.北京:清華大學出版社,2002.32-45.
[8] 羅斌.Visual C++編程技巧精選.北京:中國水利水電出版社,2005.101-132.
[9] 湛為芳.高效實用Visual C++庫函數設計.北京:清華大學出版社.2010.50-54.