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