版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘 要摘 要當(dāng)今顯示器件在各行各業(yè)已經(jīng)得到了廣泛的應(yīng)用。在顯示器件研發(fā)和測(cè)試過(guò)程中,器件的發(fā)光光譜是一個(gè)重要參數(shù)。本文詳細(xì)闡述了一個(gè)光譜測(cè)試系統(tǒng)的軟件設(shè)計(jì)開(kāi)發(fā)過(guò)程,該軟件基于Windows平臺(tái)。系統(tǒng)通過(guò)控制研華公司PCI-1710L數(shù)據(jù)采集卡,采用中斷方式進(jìn)行采集光源光譜數(shù)據(jù),并達(dá)到實(shí)時(shí)顯示的目的。軟件利用Visual C+開(kāi)發(fā),采用單文檔結(jié)構(gòu)。界面友好,操作簡(jiǎn)便,現(xiàn)主要應(yīng)用于科研。關(guān)鍵字:光譜,軟件,PCI-1710,中斷,采集53AbstractABSTRACTNowadays, display devices are widely used everywhere. In the proc
2、ess of the development and reaserch, the spectrum is important parameter. The design of software of the spectrum measurement system, which is based on the Visual C+ of Windows platform, is described in this paper. The system controls the Advantech's PCI-1710L data acquisition card to sample and
3、display the spectral date real-time by interrupt mode. The software is a single document structure and has a friendly interface. Now, it is mainly used in scientific research.Key Words: spectra, software, PCI-1710, interrupt, acquisition目 錄目 錄第1章引言11.1 選題背景11.2 研究目標(biāo)和意義11.3 研究思路1第2章光譜測(cè)試系統(tǒng)的光學(xué)原理32.1 表色
4、系和色度圖32.1.1 CIE表色系32.1.2 光源(發(fā)光體)的表色42.1.3 非發(fā)光體的表色52.1.4 1931CIE-xy色度圖52.2 顯示色數(shù)6第3章編譯軟件概述73.1 Windows下程序設(shè)計(jì)方法與MS-DOS的區(qū)別73.2 Microsoft Visual C+簡(jiǎn)介83.3 MFC簡(jiǎn)介93.3.1 封裝103.3.2 MFC的宏觀框架體系10第4章光譜測(cè)試系統(tǒng)軟件設(shè)計(jì)124.1 硬件結(jié)構(gòu)及連接方案124.1.1 光譜測(cè)試系統(tǒng)124.1.2 研華PCI-1710L多功能數(shù)據(jù)采集卡介紹134.1.3 觸發(fā)方式的選擇154.1.4 采集系統(tǒng)信號(hào)連接方案164.1.5 使用的緩沖區(qū)
5、174.1.6 關(guān)于FIFO184.1.7 內(nèi)部緩沖區(qū)的使用方式194.1.8 循環(huán)(cycle) 和非循環(huán)(no_cycle)204.1.9 Raw Data(原始數(shù)據(jù))和voltage(電壓值)204.2 軟件設(shè)計(jì)214.2.1 測(cè)試系統(tǒng)開(kāi)發(fā)需要完成的任務(wù)214.2.2 程序的總體構(gòu)架214.2.3 數(shù)據(jù)采集及顯示程序流程圖224.2.4 數(shù)據(jù)采集模塊的編寫264.2.5 數(shù)據(jù)存儲(chǔ)模塊的編寫284.2.6 實(shí)時(shí)畫圖模塊的編寫294.2.7 軟件界面30結(jié)束語(yǔ)33參考文獻(xiàn)34致謝35附錄36附錄一:用來(lái)采集數(shù)據(jù)的線程函數(shù)36附錄二:進(jìn)行數(shù)據(jù)存儲(chǔ)和畫圖的WriteData()函數(shù)37附錄三:B
6、ufferChange事件發(fā)生時(shí)所響應(yīng)的adBufChangeEvent()函數(shù)39外文資料原文41翻譯文稿49第1章 引言第1章 引言1.1 選題背景隨著信息科學(xué)的飛速發(fā)展,數(shù)據(jù)采集和存儲(chǔ)技術(shù)已經(jīng)是數(shù)字信號(hào)處理中非常重要的環(huán)節(jié),將決定整個(gè)系統(tǒng)的性能。它廣泛應(yīng)用于雷達(dá),通信,遙測(cè)遙感等領(lǐng)域。它己經(jīng)成為人們獲得外界信息的重要手段。基于總線的數(shù)據(jù)采集與存儲(chǔ)系統(tǒng),由于可靠且易于實(shí)現(xiàn)、經(jīng)濟(jì)等優(yōu)點(diǎn),得到了廣泛的應(yīng)用。顯示器件研發(fā)過(guò)程中,光譜測(cè)試工作需要反復(fù)進(jìn)行,使用人工進(jìn)行測(cè)量不但費(fèi)時(shí)費(fèi)力,而且得不償失。利用數(shù)據(jù)采集系統(tǒng)來(lái)實(shí)現(xiàn)光譜數(shù)據(jù)的自動(dòng)化采集與分析對(duì)于顯示器件的開(kāi)發(fā)與研究非常有幫助,是科研中很有價(jià)值
7、的一種手段。實(shí)驗(yàn)室目前使用的光譜測(cè)試系統(tǒng)是上世紀(jì)90年代中期開(kāi)發(fā)的,系統(tǒng)中所采用的微機(jī)型號(hào)為80386,操作系統(tǒng)為MS-DOS,自制的采集卡接口為ISA插槽。隨著近年來(lái)Microsoft視窗平臺(tái)的普及與PC主機(jī)性能不斷地提高,功能不斷地強(qiáng)大,在科研中發(fā)揮的作用越來(lái)越大,該舊式光譜測(cè)試系統(tǒng)已顯得較為落后。1.2 研究目標(biāo)和意義針對(duì)以上情況,對(duì)現(xiàn)有光譜測(cè)試系統(tǒng)進(jìn)行升級(jí)已經(jīng)迫在眉睫。根據(jù)當(dāng)前微機(jī)系統(tǒng)的發(fā)展?fàn)顩r,通過(guò)購(gòu)買基于PCI接口的研華 PCI-1710L數(shù)據(jù)采集卡,在現(xiàn)今廣泛使用的PC機(jī)型上,開(kāi)發(fā)一套基于Windows的光譜測(cè)試系統(tǒng)已成為可能。而且舊式的光譜測(cè)試系統(tǒng)基于DOS方式生成光譜數(shù)據(jù),使
8、用3.5英寸軟盤進(jìn)行存儲(chǔ),并且打印功能基于舊式的打印驅(qū)動(dòng)程序,需針對(duì)每種打印機(jī)設(shè)計(jì)不同的驅(qū)動(dòng)程序,十分繁瑣;而新系統(tǒng)基于Windows平臺(tái),以上的問(wèn)題都迎刃而解了。即使微機(jī)出現(xiàn)問(wèn)題,也可方便地將系統(tǒng)遷移到另外的微機(jī)中。1.3 研究思路本次課題的任務(wù)就是光譜測(cè)試系統(tǒng)的軟件設(shè)計(jì),即基于Windows平臺(tái),以Windows Visual C+ 6.0作為開(kāi)發(fā)工具,使用研華公司出品的PCI-1710L數(shù)據(jù)采集卡,借助其內(nèi)部提供的部分庫(kù)函數(shù),設(shè)計(jì)一套可以實(shí)時(shí)采集、顯示光源光譜數(shù)據(jù)的軟件。第2章 光譜測(cè)試系統(tǒng)的光學(xué)原理第2章 光譜測(cè)試系統(tǒng)的光學(xué)原理2.1 表色系和色度圖表示光色系統(tǒng)的表示系以兩種方式:一種
9、是以加法混色為基礎(chǔ)的生物物理方式;另一種是顏色的色品(也稱色調(diào))、明度、飽和度三特征為基礎(chǔ)的純生物方式。前者是CIE(國(guó)際照明委員會(huì))表色系,后者是用顏色標(biāo)樣的孟賽爾(Munsell)表色系。本節(jié)重點(diǎn)介紹CIE表色系。由色視覺(jué)所產(chǎn)生的色光(色激勵(lì))范圍為380780nm的可見(jiàn)光范圍。2.1.1 CIE表色系 根據(jù)加法混色法則將三基色進(jìn)行適當(dāng)比例混合就能得到等能量單色光的一種色光。因此,任何一種顏色的光都可以有選擇的三基色光,按一定比例混合而成。三基色有許多選擇方案,CIE表色系規(guī)定三基色的單色光為紅光R(=700nm),綠光G(=541-6nm),藍(lán)光B(=435.8nm)。CIE表色系可分為
10、CIE-RGB表色系和CIE-XYZ表色系。前者使用規(guī)定得等量的R、G、B單色光作為三基色的表色系,而后者則由于CIE-XYZ表色系中要配置等能白光存在著負(fù)值混色,因而給測(cè)量和計(jì)算帶來(lái)許多不便。于是通過(guò)對(duì)CIE-RGB表色系的數(shù)學(xué)變換建立了CIE-XYZ表色系,欲配置任何一種似乎都能用三個(gè)虛設(shè)的基色X、Y、Z的正值混色而到。該色系在實(shí)際使用中非常方便,故又稱作CIE-XYZ標(biāo)準(zhǔn)表色系。圖2-1 CIE-XYZ標(biāo)準(zhǔn)表色系所示為在CIE-XYZ標(biāo)準(zhǔn)表色系中,用,表示等能光譜的三色分布系數(shù)(又稱光譜三刺激值)的混色曲線。圖中曲線與圖2-1所示的相對(duì)視感度曲線分布相同。2.1.2 光源(發(fā)光體)的表色
11、 光源光度測(cè)量是建立在色度學(xué)的基礎(chǔ)上。我國(guó)顏色標(biāo)準(zhǔn)采用國(guó)際照明委員會(huì)(CIE)推薦的1931CIE-XYZ系統(tǒng),是以一組“1931CIE-XYZ標(biāo)準(zhǔn)色度觀察者光譜三刺激值”數(shù)據(jù)為基礎(chǔ)。該數(shù)據(jù)是根據(jù)加混色定律在實(shí)驗(yàn)基礎(chǔ)上獲得的,加混色定律指出任何顏色都可以用線性無(wú)關(guān)的三原色適當(dāng)?shù)叵嗉踊旌吓c之匹配,并具有線性和可加性。光源的顏色是可見(jiàn)光輻射作用于人眼所形成顏色刺激的結(jié)果,假定進(jìn)入到人眼的相對(duì)光譜輻射功率為j(l),那么由它引起的CIE三刺激值X,Y,Z可以用下列方程組表示為: (2-1)式(2-1)中就是1931CIE-XYZ色度系統(tǒng)的光譜三刺激值。在實(shí)際計(jì)算三刺激值時(shí),常用式(2-2)求和來(lái)代替
12、式(2-1)的積分式: (2-2)式(2-2)中的稱為波長(zhǎng)間隔,通常為5nm或10nm。式(2-1)和式(2-2)中的k稱為調(diào)整系數(shù),它的選擇是把Y值調(diào)整為100,即: (2-3)式(2-2)計(jì)算得到X、Y、Z三刺激值后,再利用式(2-4)就可求得待測(cè)光源的色度坐標(biāo)。(2-4)2.1.3 非發(fā)光體的表色 非發(fā)光體(物體)表色的光譜三刺激值X、Y、Z可以用式(2-5)表示為: (2-5)式中,()是照射到物體的光輻射功率,()為該物體的光反射率或透射率。求出光譜三刺激值X、Y、Z后,再利用式(2-4)就可計(jì)算出其色度坐標(biāo)。2.1.4 1931CIE-xy色度圖各種顏色的色度都能夠在1931CIE
13、-xy色度圖上找到相對(duì)的色點(diǎn)位置;反之在色度圖上的任一色點(diǎn)都可以確定出它的色度坐標(biāo)。不同的光色,由色知覺(jué)命名與不同的色名。圖1-33表示了色度和色名的關(guān)系以及標(biāo)準(zhǔn)單色光的坐標(biāo)點(diǎn)位置。圖中將不同波長(zhǎng)的單色光色坐標(biāo)點(diǎn)連接起來(lái)的曲線叫做光譜軌跡曲線,連接軌跡首尾兩點(diǎn)的直線叫做純紫(非光譜色光軌跡)軌跡。兩軌跡所圍成的舌形曲線內(nèi)包括了一切物理上可能實(shí)現(xiàn)的顏色。舌形曲線上各點(diǎn)對(duì)應(yīng)著各光譜單色光。各點(diǎn)即可用波長(zhǎng)表示,又可用色坐標(biāo)表示。曲線內(nèi)各點(diǎn)為非單色的復(fù)合光。根據(jù)不同坐標(biāo)點(diǎn)的顏色不同又可劃分成若干小區(qū)域,形成色域。圖2-2也適用于明度Y值有著較寬變化范圍的發(fā)光體的色度量。對(duì)于非發(fā)光體的色,因?yàn)槊鞫萗值明
14、顯地受色知覺(jué)的變化,所以它的色名和色度坐標(biāo)的關(guān)系隨Y值而有所不同。圖2-2 色度和色名2.2 顯示色數(shù)顯示色數(shù)是指能夠顯示的顏色的總數(shù)。它用每個(gè)基色的灰度等級(jí)數(shù)相乘之積來(lái)表示。顯示色數(shù)除了取決于顯示器本身的性能之外,還取決于驅(qū)動(dòng)信號(hào)系統(tǒng)的水平。顯示色數(shù)是用來(lái)表示中間色的規(guī)定細(xì)度的,而不是直接表示顯示顏色的范圍和鮮明度。色域表示顯示顏色的范圍和鮮明度,通常用CIEl931國(guó)際標(biāo)準(zhǔn)色度圖表示,如圖2-2所示。在馬蹄形線框中,越接近外側(cè)顏色的飽和度越高,越接近中心就越靠近白色。所謂白色的表示方式,并沒(méi)有統(tǒng)一的規(guī)定說(shuō)明它是指何種程度的顏色再現(xiàn)能力。第3章 編譯軟件概述第3章 編譯軟件概述3.1 Win
15、dows下程序設(shè)計(jì)方法與MS-DOS的區(qū)別MS-DOS程序設(shè)計(jì)方法主要是過(guò)程驅(qū)動(dòng)的程序設(shè)計(jì)方法。在這種設(shè)計(jì)思想的指導(dǎo)下,一個(gè)程序會(huì)有一個(gè)明顯的開(kāi)始,明顯的執(zhí)行過(guò)程以及明顯的結(jié)束。在程序的執(zhí)行過(guò)程中,開(kāi)發(fā)者能直接控制程序執(zhí)行的順序。Windows程序設(shè)計(jì)方法與MS-DOS程序設(shè)計(jì)的不同就在于Windows程序是事件驅(qū)動(dòng)的。事件驅(qū)動(dòng)程序由事件發(fā)生來(lái)控制事件驅(qū)動(dòng)的。程序自始至終以一種非順序的方式處理事件。在Windows的這種運(yùn)行機(jī)制下,過(guò)程驅(qū)動(dòng)的程序設(shè)計(jì)方法明顯不適用。圖3-1 Windows消息處理的機(jī)制Windows程序的流程,消息處理的機(jī)制如圖3-1所示:事件驅(qū)動(dòng)的程序設(shè)計(jì)圍繞著消息的產(chǎn)生與
16、處理而展開(kāi)。Windows應(yīng)用程序所做的最主要的工作,就是對(duì)各種消息進(jìn)行處理。因此,應(yīng)用程序的執(zhí)行順序是無(wú)法完全預(yù)知的。每當(dāng)事件發(fā)生時(shí),Windows做出記錄并將消息發(fā)送到有關(guān)應(yīng)用程序中去,等待處理。Windows為應(yīng)用程序消息提供稱為消息隊(duì)列(Message Queue)的保留區(qū),在操作系統(tǒng)中每個(gè)正在執(zhí)行的程序都有自己的消息隊(duì)列,由操作系統(tǒng)以及其他應(yīng)用程序或用戶向應(yīng)用程序發(fā)送的全部消息都存儲(chǔ)在隊(duì)列中,等待被調(diào)用處理。Windows應(yīng)用程序以特定的循環(huán)調(diào)用Windows消息。消息循環(huán)是一個(gè)簡(jiǎn)單的while()循環(huán),它將一直運(yùn)行,直到接受終止執(zhí)行的消息,才使應(yīng)用程序結(jié)束循環(huán)。3.2 Micros
17、oft Visual C+簡(jiǎn)介只要提到在Windows(95/98/2000/XP等)下進(jìn)行32位的應(yīng)用程序開(kāi)發(fā),就不能不提到Visual C+。Visual C+ 是Microsoft Visual Studio開(kāi)發(fā)工具的組件之一。相比其他的編程工具而言,Visual C+ 在提供可視化的編程方法的同時(shí),也適用于編寫直接對(duì)系統(tǒng)進(jìn)行底層操作的程序,其生成代碼的質(zhì)量,也要優(yōu)于其他的很多開(kāi)發(fā)工具。Visual C+ 軟件包包含了許多單獨(dú)的組件,如編輯器、編譯器、鏈接器、exe生成用實(shí)用程序、調(diào)試器以及各種各樣為開(kāi)發(fā)Microsoft Windows下的C/C+ 程序而設(shè)計(jì)的工具。重要的是,它還包含
18、有一個(gè)名為Developer Studio的集成開(kāi)發(fā)環(huán)境(Integrated Developing Environment,IDE)。Microsoft Developer Studio用于Visual J+、Visual InterDev、Visual C+。Developer Studio把所有的Visual C+工具結(jié)合,并且集成為一個(gè)整體。通過(guò)一個(gè)由窗口、對(duì)話框、菜單、工具欄、快捷鍵及宏等組成的和諧系統(tǒng),開(kāi)發(fā)人員可以觀察和控制整個(gè)開(kāi)發(fā)進(jìn)程。該環(huán)境幾乎就是Visual C+ 中所能“看見(jiàn)”的所有東西。所有其他事情都在其管理下在幕后運(yùn)行。它有以下的特性:1) 自動(dòng)化和宏支持可以使用腳本來(lái)
19、自動(dòng)操縱例行的和重復(fù)的任務(wù)??梢詫isual Studio及其組件當(dāng)作對(duì)象來(lái)操縱,還可以使用Developer Studio對(duì)象模型創(chuàng)建集成的附加程序。2) ClassView組織C+ 中的類,包括使用MFC、ATL創(chuàng)建或自定義的新類??啥ㄖ频墓ぞ邨l和菜單3) 多功能調(diào)試器連接到正在運(yùn)行的程序并對(duì)其進(jìn)行調(diào)試,還可以使用宏語(yǔ)言來(lái)自動(dòng)操作調(diào)試器。4) 與瀏覽器集成可以在Developer Studio中查看Internet上的World Wide Web頁(yè)。5) 多工程支持可以在一個(gè)工作空間中包括多個(gè)不同類型的工程。工作空間文件使用擴(kuò)展名.dsw來(lái)代替過(guò)去的擴(kuò)展名.mdp,工程文件使用擴(kuò)展名.d
20、sp來(lái)代替過(guò)去的擴(kuò)展名.mak。6) 改進(jìn)的資源編輯器在Visual C+ 中,可以使用WizardBar來(lái)將代碼與程序中的可視元素掛鉤。7) 改進(jìn)的文本編輯器可以使用正確的句法顏色設(shè)置來(lái)顯示無(wú)擴(kuò)展名的頭文件??梢远ㄖ七x定頁(yè)邊距的顏色來(lái)更好地區(qū)分同一源代碼窗口中的控件和文本區(qū)域。Find in Files命令支持兩個(gè)單獨(dú)的窗格。3.3 MFC簡(jiǎn)介Visual C+ 的核心是Microsoft基礎(chǔ)類庫(kù),即通常所說(shuō)的MFC。盡管使用Visual C+ 進(jìn)行編程并不一定要使用MFC,使用MFC也不一定就要使用Visual C+,其他公司的很多軟件產(chǎn)品如Borland C+ 的新版本也提供了對(duì)MFC的
21、支持,然而事實(shí)上在大多數(shù)情況下,提到Visual C+ 時(shí)指的就是MFC,而提到MFC時(shí)指的也就是Visual C+。MFC (Microsoft Foundation Class Library)中的各種類結(jié)合起來(lái)構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來(lái)建立Windows下的應(yīng)用程序,這是一種相對(duì)SDK來(lái)說(shuō)更為簡(jiǎn)單的方法。因?yàn)榭傮w上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。Microsoft Visual C+提供了相應(yīng)的工具來(lái)完成這個(gè)工作:AppWizard可以用來(lái)生成初步的框架
22、文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口;ClassWizard用來(lái)協(xié)助添加代碼到框架文件;最后,編譯,則通過(guò)類庫(kù)實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。3.3.1 封裝 構(gòu)成MFC框架的是MFC類庫(kù)。MFC類庫(kù)是C+類庫(kù)。這些類或者封裝了Win32應(yīng)用程序編程接口,或者封裝了應(yīng)用程序的概念,或者封裝了OLE特性,或者封裝了ODBC和DAO數(shù)據(jù)訪問(wèn)的功能,等等,分述如下。1) 對(duì)Win32應(yīng)用程序編程接口的封裝用一個(gè)C+ Object來(lái)包裝一個(gè)Windows Object。例如:class CWnd是一個(gè)C+ window object,它把Windows window(HWND)和Win
23、dows window有關(guān)的API函數(shù)封裝在C+ window object的成員函數(shù)內(nèi),后者的成員變量m_hWnd就是前者的窗口句柄。2) 對(duì)應(yīng)用程序概念的封裝使用SDK編寫Windows應(yīng)用程序時(shí),總要定義窗口過(guò)程,登記Windows Class,創(chuàng)建窗口,等等。MFC把許多類似的處理封裝起來(lái),替程序員完成這些工作。另外,MFC提出了以文檔-視圖為中心的編程模式,MFC類庫(kù)封裝了對(duì)它的支持。文檔是用戶操作的數(shù)據(jù)對(duì)象,視圖是數(shù)據(jù)操作的窗口,用戶通過(guò)它處理、查看數(shù)據(jù)。3) 對(duì)COM/OLE特性的封裝OLE建立在COM模型之上,由于支持OLE的應(yīng)用程序必須實(shí)現(xiàn)一系列的接口(Interface),
24、因而相當(dāng)繁瑣。MFC的OLE類封裝了OLE API大量的復(fù)雜工作,這些類提供了實(shí)現(xiàn)OLE的更高級(jí)接口。4) 對(duì)ODBC功能的封裝以少量的能提供與ODBC之間更高級(jí)接口的C+類,封裝了ODBC API的大量的復(fù)雜的工作,提供了一種數(shù)據(jù)庫(kù)編程模式。3.3.2 MFC的宏觀框架體系 如前所述,MFC實(shí)現(xiàn)了對(duì)應(yīng)用程序概念的封裝,把類、類的繼承、動(dòng)態(tài)約束、類的關(guān)系和相互作用等封裝起來(lái)。這樣封裝的結(jié)果對(duì)程序員來(lái)說(shuō),是一套開(kāi)發(fā)模板(或者說(shuō)模式)。針對(duì)不同的應(yīng)用和目的,程序員采用不同的模板。例如,SDI應(yīng)用程序的模板,MDI應(yīng)用程序的模板,規(guī)則DLL應(yīng)用程序的模板,擴(kuò)展DLL應(yīng)用程序的模板,OLE/ACTIV
25、EX應(yīng)用程序的模板,等等。這些模板都采用了以文檔-視為中心的思想,每一個(gè)模板都包含一組特定的類。典型的MDI應(yīng)用程序的構(gòu)成將在下一節(jié)具體討論。為了支持對(duì)應(yīng)用程序概念的封裝,MFC內(nèi)部必須作大量的工作。例如,為了實(shí)現(xiàn)消息映射機(jī)制,MFC編程框架必須要保證首先得到消息,然后按既定的方法進(jìn)行處理。又如,為了實(shí)現(xiàn)對(duì)DLL編程的支持和多線程編程的支持,MFC內(nèi)部使用了特別的處理方法,使用模塊狀態(tài)、線程狀態(tài)等來(lái)管理一些重要信息。雖然,這些內(nèi)部處理對(duì)程序員來(lái)說(shuō)是透明的,但是,懂得和理解MFC內(nèi)部機(jī)制有助于寫出功能靈活而強(qiáng)大的程序。總之,MFC封裝了Win32 API,OLE API,ODBC API等底層函
26、數(shù)的功能,并提供更高一層的接口,簡(jiǎn)化了Windows編程。同時(shí),MFC支持對(duì)底層API的直接調(diào)用。MFC提供了一個(gè)Windows應(yīng)用程序開(kāi)發(fā)模式,對(duì)程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,預(yù)定義或?qū)崿F(xiàn)了許多事件和消息處理,等等??蚣芑蛘哂善浔旧硖幚硎录灰蕾嚦绦騿T的代碼;或者調(diào)用程序員的代碼來(lái)處理應(yīng)用程序特定的事件。MFC是C+類庫(kù),程序員就是通過(guò)使用、繼承和擴(kuò)展適當(dāng)?shù)念悂?lái)實(shí)現(xiàn)特定的目的。例如,繼承時(shí),應(yīng)用程序特定的事件由程序員的派生類來(lái)處理,不感興趣的由基類處理。實(shí)現(xiàn)這種功能的基礎(chǔ)是C+對(duì)繼承的支持,對(duì)虛擬函數(shù)的支持,以及MFC實(shí)現(xiàn)的消息映射機(jī)制。第4章 光譜測(cè)
27、試系統(tǒng)軟件設(shè)計(jì)第4章 光譜測(cè)試系統(tǒng)軟件設(shè)計(jì)4.1 硬件結(jié)構(gòu)及連接方案數(shù)據(jù)采集與控制系統(tǒng)的基本任務(wù)是物理信號(hào)(電壓/電流)的產(chǎn)生或測(cè)量。但是要使計(jì)算機(jī)系統(tǒng)能夠測(cè)量物理信號(hào),必須要使用傳感器把物理信號(hào)轉(zhuǎn)換成電信號(hào)(電壓或者電流信號(hào))。有時(shí)不能把被測(cè)信號(hào)直接連接到數(shù)據(jù)采集卡,而必須使用信號(hào)調(diào)理輔助電路,先將信號(hào)進(jìn)行一定的處理。總之,數(shù)據(jù)采集與控制系統(tǒng)是在硬件板卡/遠(yuǎn)程采集模塊的基礎(chǔ)上借助軟件來(lái)控制整個(gè)系統(tǒng)的工作包括采集原始數(shù)據(jù)、分析數(shù)據(jù)、給出結(jié)果等。4.1.1 光譜測(cè)試系統(tǒng)聚光鏡圖4-1 光譜測(cè)試系統(tǒng)框圖光電器件放大器入射狹縫出射狹縫光柵等光源穩(wěn)壓電源光譜測(cè)試系統(tǒng)的框圖如圖4-1所示,主要由光源、聚
28、光鏡、單色儀和電壓放大器組成。單色儀包含入射狹縫、出射狹縫、穩(wěn)壓電源和光電轉(zhuǎn)換器件及其它器件構(gòu)成。光源發(fā)出的光經(jīng)聚光鏡會(huì)聚后照在單色儀的入射狹縫上,入射的光經(jīng)光柵色散后,單色光由出射狹縫射出并照在光電轉(zhuǎn)換器件上,它所產(chǎn)生的光電壓信號(hào)經(jīng)高精度電壓放大器放大后,所得電壓值就可用采集設(shè)備獲取并處理。單色儀中的光電倍增管、放大器與電平接口電路共同組成模擬系統(tǒng)部分,采集卡及其接口設(shè)備與微機(jī)共同構(gòu)成數(shù)字系統(tǒng)部分。被測(cè)單色光射入單色儀后,經(jīng)光電管轉(zhuǎn)換成電壓信號(hào),再經(jīng)放大器放大至與A/D轉(zhuǎn)換相匹配的程度后,送入數(shù)字處理系統(tǒng),經(jīng)過(guò)采集卡內(nèi)置的A/D轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字量,再把離散后的數(shù)字信號(hào)送入微型計(jì)算機(jī)進(jìn)行處理及
29、分析。電平接口電路的功能是將單色儀步進(jìn)電機(jī)的輸出脈沖PMOS電平(-2至-10V)轉(zhuǎn)換為數(shù)據(jù)采集卡A/D轉(zhuǎn)換中所需的觸發(fā)電平,此電平為TTL電平(05V)。4.1.2 研華PCI-1710L多功能數(shù)據(jù)采集卡介紹在本次數(shù)據(jù)采集預(yù)處理系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)過(guò)程中,選用了研華(Advantech)公司生產(chǎn)的PCI-1710L多功能數(shù)據(jù)采集卡作為系統(tǒng)核心部件。PCI-1710L是一款基于PCI總線的多功能數(shù)據(jù)采集卡。其先進(jìn)的電路設(shè)計(jì)使得它具有更高的質(zhì)量和更多的功能:1) 即插即用PCI-1710L是即插即用設(shè)備,完全符合PCI總線規(guī)范版本2.1。在采集卡安裝過(guò)程中,基地址、中斷等有關(guān)總線的參數(shù)配置都可以通過(guò)即
30、插即用功能予以正確的自動(dòng)設(shè)置,不需要操作任何的跳線或者DIP開(kāi)關(guān)。2) 單端或差分混合的模擬量輸入PCI-1710L具備一個(gè)自動(dòng)的通道/增益掃描電路,可在采樣時(shí)負(fù)責(zé)控制多路復(fù)用器的轉(zhuǎn)換,而且卡中針對(duì)不同的通道內(nèi)置了多種增益值及配置參數(shù),使得多種輸入方式靈活組合。3) 板載先進(jìn)先出(FIFO)存儲(chǔ)器PCI-1710L提供板載先進(jìn)先出緩沖存儲(chǔ)器,最多可存儲(chǔ)4K個(gè)A/D采樣值。當(dāng)開(kāi)啟FIFO功能時(shí),每當(dāng)FIFO半滿或全滿時(shí),采集卡都會(huì)產(chǎn)生一個(gè)中斷,并進(jìn)行數(shù)據(jù)的轉(zhuǎn)移和存儲(chǔ),以防止數(shù)據(jù)丟失,因此有效的提高了數(shù)據(jù)采集速度和可靠性。4) 16通道數(shù)字輸入與16通道數(shù)字輸出PCI-1710L提供16個(gè)通道的數(shù)
31、字輸入與16個(gè)通道的數(shù)字輸出。這給用戶提供了很高的設(shè)計(jì)自由度與靈活性,可以按照需求設(shè)計(jì)所需的應(yīng)用方案5) 板載可編程計(jì)數(shù)器PCI-1710L搭載了一個(gè)可編程計(jì)數(shù)器,可用于產(chǎn)生A/D轉(zhuǎn)換所需的觸發(fā)信號(hào)。計(jì)數(shù)器芯片集成了以10MHz頻率工作的3個(gè)16位計(jì)數(shù)器,一個(gè)用作輸入通道的事件計(jì)數(shù)器或者用于產(chǎn)生脈沖,另外兩個(gè)被疊加成為一個(gè)32位計(jì)數(shù)器用于脈沖觸發(fā)。6) 短路保護(hù)PCI-1710L 在+12VDC/+5VDC電源引腳搭載了短路保護(hù)裝置。當(dāng)短路發(fā)生時(shí),保護(hù)裝置就會(huì)自動(dòng)地切斷輸出電流。在短路結(jié)束2分鐘左右以后,電源引腳會(huì)重新輸出電流。為了方便使用和拓展采集卡的使用范圍,PCI-1710L提供了68針
32、腳SCSI-2線纜PCI-10168(長(zhǎng)度1米)與68針腳SCSI-2接線終端板ADAM-3968。PCI-10168內(nèi)置的連接線全部為雙絞線,并且將模擬信號(hào)傳輸線與數(shù)字信號(hào)傳輸線互相屏蔽分離,這給線纜賦予了特殊的信號(hào)噪聲屏蔽功能,使信號(hào)具有最小的交叉串?dāng)_,最大限度地降低了EMI/EMC問(wèn)題。ADAM-3968用于將采集卡的所有的針腳引出為DIN連接方式的接線終端。總之,PCI-1710L具有以下鮮明的特點(diǎn):1) 支持PCI Bus Master方式的數(shù)據(jù)傳送2) 16通道單端或8通道差分模擬量輸入,或以組合方式輸入3) 12位A/D轉(zhuǎn)換器,采樣速率可達(dá)100千赫茲4) 可編程的每通道輸入增益
33、5) 可自由組合的單端或差分輸入6) 板載4千樣本FIFO緩沖器7) 16通道數(shù)字輸入8) 16通道數(shù)字輸出9) 可編程的計(jì)數(shù)器/定時(shí)器10) 自動(dòng)通道/增益掃描4.1.3 觸發(fā)方式的選擇在進(jìn)行數(shù)據(jù)采集時(shí),用戶可以設(shè)定某些信號(hào)的特定條件,例如一個(gè)數(shù)字信號(hào)的高電平(logic high)或低電平(logic low),或是一個(gè)電壓信號(hào)的特定值,一旦滿足這些特定條件,數(shù)據(jù)采集卡才真正開(kāi)始采集并將其傳送到系統(tǒng)中,這便是觸發(fā)的基本原理。一般地說(shuō)來(lái),對(duì)數(shù)據(jù)采集板卡的進(jìn)行編程使用的觸發(fā)方式主要有以下兩種:軟件觸發(fā)方式,外部中斷觸發(fā)方式。1) 軟件觸發(fā)方式實(shí)際上就是采用系統(tǒng)提供的時(shí)鐘在毫秒級(jí)的精確等級(jí)上,通
34、過(guò)對(duì)寄存器的查詢來(lái)實(shí)現(xiàn)數(shù)據(jù)采集,由于其采集速度比較慢,因此多用于低速數(shù)據(jù)采集場(chǎng)合。2) 外部中斷觸發(fā)方式使用外部中斷傳輸方式,你需要編寫中斷服務(wù)程序,將板卡上的數(shù)據(jù)傳輸?shù)筋A(yù)先定義好的內(nèi)存變量中,每次A/D轉(zhuǎn)換結(jié)束后都會(huì)產(chǎn)生一個(gè)硬件中斷,然后由中斷服務(wù)程序完成數(shù)據(jù)傳輸。當(dāng)轉(zhuǎn)動(dòng)單色儀的波長(zhǎng)手輪時(shí),在出射狹縫處將按順序射出各種波長(zhǎng)的單色光,同時(shí)單色儀內(nèi)的步進(jìn)電機(jī)隨著單色光波長(zhǎng)的變化同步地發(fā)出脈沖信號(hào),波長(zhǎng)隨步進(jìn)電機(jī)轉(zhuǎn)動(dòng)變化速度為1Å/45ms。軟件的設(shè)計(jì)要求,獲得的數(shù)據(jù)必須要與單色光波長(zhǎng)相匹配。比較兩種觸發(fā)方式:1)軟件觸發(fā)方式純粹以時(shí)間的對(duì)應(yīng)關(guān)系來(lái)使采集數(shù)據(jù)與波長(zhǎng)匹配:將采集數(shù)據(jù)的時(shí)間間
35、隔與波長(zhǎng)變化速度對(duì)應(yīng),設(shè)定間隔一定的時(shí)長(zhǎng)采集一次數(shù)據(jù)。這種方式可能存在一定的誤差,無(wú)法精準(zhǔn)地使采集的數(shù)據(jù)與光波長(zhǎng)變化相對(duì)應(yīng),而且由于軟件觸發(fā)采用內(nèi)部時(shí)鐘作為觸發(fā)源,在采集前必須使單色儀波長(zhǎng)手輪先轉(zhuǎn)動(dòng),內(nèi)部時(shí)鐘開(kāi)始計(jì)時(shí)并開(kāi)始采集數(shù)據(jù)時(shí),無(wú)法確定此時(shí)的波長(zhǎng)值(即單色儀波長(zhǎng)手輪轉(zhuǎn)動(dòng)的位置),因此無(wú)法準(zhǔn)確起始采集波長(zhǎng)。2)外部中斷觸發(fā)方式單色儀內(nèi)的步進(jìn)電機(jī)隨著單色光波長(zhǎng)的變化同步地發(fā)出脈沖信號(hào),只有當(dāng)沖來(lái)臨時(shí)才會(huì)采集數(shù)據(jù),因此可以通過(guò)脈沖實(shí)現(xiàn)波長(zhǎng)與采集數(shù)據(jù)之間的關(guān)系,也能很好的確定起始波長(zhǎng)值。因此,本設(shè)計(jì)采樣定時(shí)使用了單色儀步進(jìn)電機(jī)的輸出脈沖作為觸發(fā)信號(hào),通過(guò)PCI-1710L的中斷觸發(fā)功能,以及與它
36、配合的相應(yīng)的軟件程序來(lái)實(shí)現(xiàn)。4.1.4 采集系統(tǒng)信號(hào)連接方案該數(shù)據(jù)采集卡提供了強(qiáng)大的功能,為本次系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)提供了堅(jiān)實(shí)的支柱。設(shè)計(jì)方案中需要使用的主要是采集卡外部中斷觸發(fā)的模擬量輸入功能。圖4-2 PCI-1710L數(shù)據(jù)接口定義被測(cè)電壓信號(hào)信號(hào)地線步進(jìn)觸發(fā)信號(hào)光譜測(cè)試系統(tǒng)模擬電路為數(shù)字電路提供了三根信號(hào)接線:地線、光電壓信號(hào)線與用于觸發(fā)的脈沖信號(hào)線。只有光電壓信號(hào)線是真正的有效數(shù)據(jù)獲取端,因此采用單端輸入的方式,并且單端輸入以一個(gè)共同接地點(diǎn)為參考點(diǎn)。將地線、光電壓信號(hào)線與用于觸發(fā)的脈沖信號(hào)線分別連接至采集接口,同時(shí)根據(jù)設(shè)備使用手冊(cè),需要使用外部觸發(fā)時(shí)必須將對(duì)外部觸發(fā)使能端施以+5V以上的高電
37、平,即可以完成信號(hào)連接。PCI-1710L數(shù)據(jù)采集卡的數(shù)據(jù)接口定義如圖4-2所示:被測(cè)信號(hào)是單端輸入的電壓信號(hào),使用模擬輸入通道0(AI0)以單端信號(hào)輸入方式對(duì)其進(jìn)行采樣。最終的信號(hào)連接方案為:1) 將被測(cè)電壓信號(hào)接至AI0(第68腳)2) 將地線接至AIGND3) 將采集卡的+5V(第1腳)與TRI_GATE(第3腳)相連。4) 將外部脈沖,即步進(jìn)觸發(fā)信號(hào)接至EXT_TRG(第2腳)從信號(hào)源設(shè)備引出的這些線纜全部通過(guò)ADAM-3968接線終端與采集卡相連,完成本次設(shè)計(jì)任務(wù)的硬件連接。4.1.5 使用的緩沖區(qū)在驅(qū)動(dòng)程序進(jìn)行A/D或D/A轉(zhuǎn)換時(shí),有三個(gè)相關(guān)的概念需要分清楚:采集板上的FIFO,計(jì)
38、算機(jī)內(nèi)存中的內(nèi)部緩沖區(qū)和用戶緩沖區(qū)。1) FIFOFIFO為采集板卡上自帶的使用FIFO緩沖區(qū)可以達(dá)到更高的采集頻率,如 PCI-1710使用4K的FIFO緩沖區(qū)后最高采樣頻率可達(dá)到100KHZ。2) 內(nèi)部緩沖區(qū)內(nèi)部緩沖區(qū)是數(shù)據(jù)采集程序動(dòng)態(tài)分配給驅(qū)動(dòng)程序使用的一塊內(nèi)存區(qū)域。內(nèi)部緩沖區(qū)主要由驅(qū)動(dòng)程序使用,驅(qū)動(dòng)程序從板卡FIFO中或寄存器將數(shù)據(jù)通過(guò)中斷方式傳輸?shù)絻?nèi)部緩沖區(qū)。在例程中該BUFFER指針一般用hBuf命名。如果是非循環(huán)采集,采樣完設(shè)定好的數(shù)據(jù)個(gè)數(shù)后采集停止,驅(qū)動(dòng)停止往內(nèi)部緩沖區(qū)存放數(shù)據(jù)。如果循環(huán)采集,內(nèi)部緩沖區(qū)會(huì)循環(huán)使用,需要在BUFFERCHANGE事件用DRV_FAITransfe
39、r及時(shí)將數(shù)據(jù)取走,以免被新到的數(shù)據(jù)覆蓋??梢苑诺接脩艟彌_區(qū)中,或者進(jìn)行存到硬盤的其他數(shù)據(jù)操作。3) 用戶緩沖區(qū)用戶緩沖區(qū)是用戶自己用來(lái)存放數(shù)據(jù)的地方,實(shí)際應(yīng)用當(dāng)中,用戶可以根據(jù)需要開(kāi)辟用戶緩沖區(qū)的大小。例如開(kāi)辟一個(gè)較大的用戶緩沖區(qū),在循環(huán)采集中將每次采集的數(shù)據(jù)依次存放其中。采集結(jié)束后統(tǒng)一處理。在例程中該 BUFFER 指針一般用hUserBuf命名。這二者還有一個(gè)區(qū)別在于,內(nèi)部緩沖區(qū)中存放的是Raw Data(原始數(shù)據(jù)),用戶緩沖區(qū)中存放的可以是原始數(shù)據(jù)也可以是Float data(電壓值)。通過(guò)ptFAITransfer.DataType參數(shù)來(lái)確定轉(zhuǎn)換時(shí)是原始數(shù)據(jù)還是電壓值。關(guān)于原始數(shù)據(jù)和電
40、壓值的區(qū)別后面會(huì)有介紹。中斷觸發(fā)方式的A/D轉(zhuǎn)換中三種緩存區(qū)的使用方式如圖4-5所示:4.1.6 關(guān)于FIFO為了防止在高速數(shù)據(jù)采集時(shí)丟失數(shù)據(jù),特別是在像Windows這樣的多任務(wù)操作系統(tǒng)下.通常板卡完成A/D轉(zhuǎn)換后,將數(shù)據(jù)寫入到數(shù)據(jù)輸出寄存器中,接著使用中斷服務(wù)功能將數(shù)據(jù)傳輸?shù)紺PU/內(nèi)存。圖4-5 三種緩存區(qū)的使用方式FIFO內(nèi)部緩存區(qū)用戶緩存區(qū)DRV_FAIIntStartDRV_FAITransfer如果沒(méi)有FIFO功能,每次硬件完成A/D轉(zhuǎn)換后,會(huì)改寫保存在數(shù)據(jù)寄存器中的值,如果上次A/D的數(shù)據(jù)在新數(shù)據(jù)到來(lái)之前未被傳輸?shù)紺PU,那這個(gè)數(shù)據(jù)就丟失了。如果使用FIFO功能,新數(shù)據(jù)僅僅被添
41、加到FIFO緩沖區(qū)的第二個(gè)位置上,而不會(huì)覆蓋原先的數(shù)據(jù)。隨后的數(shù)據(jù)會(huì)依次排列到緩沖區(qū)中。當(dāng)你想從FIFO緩沖區(qū)中搬移數(shù)據(jù)時(shí)僅僅需要從數(shù)據(jù)寄存器種讀取一個(gè)數(shù)據(jù)即可,這樣將會(huì)將最初的數(shù)據(jù)取出,F(xiàn)IFO中的下以個(gè)位置的數(shù)據(jù)會(huì)取代數(shù)據(jù)寄存器中的值,你可以在任何時(shí)候傳輸來(lái)自FIFO緩沖區(qū)中的數(shù)據(jù),當(dāng)你在傳輸舊的數(shù)據(jù)時(shí),硬件會(huì)將最新的數(shù)據(jù)保存在FIFO中,從而防止數(shù)據(jù)丟失。你也可以在FIFO半滿或全滿時(shí),一次性的傳輸數(shù)據(jù)。由于這樣減少了CPU的時(shí)間,因此非常適合大量的高速數(shù)據(jù)傳輸。合理使用FIFO的方式:1) 軟件查詢方式下使用FIFO可以通過(guò)查詢狀態(tài)寄存器的狀態(tài)未來(lái)判斷FIFO緩沖區(qū)的狀態(tài),分別判斷空標(biāo)
42、志位(Empty flag),半滿標(biāo)志位(Half full flag)以及全滿標(biāo)志位(full flag)的狀態(tài)。2) 中斷狀態(tài)下如何使用FIFO為何說(shuō)FIFO可以防止數(shù)據(jù)丟失呢?通常情況下(沒(méi)有FIFO),硬件完成一次A/D轉(zhuǎn)換后就會(huì)向系統(tǒng)產(chǎn)生一次中斷請(qǐng)求,此時(shí)中斷服務(wù)程序會(huì)去傳輸數(shù)據(jù),現(xiàn)在問(wèn)題產(chǎn)生了:如果此時(shí)有一個(gè)優(yōu)先級(jí)高的系統(tǒng)中斷請(qǐng)求,你的中斷服務(wù)程序會(huì)等待系統(tǒng)中斷服務(wù)結(jié)束才會(huì)繼續(xù)響應(yīng)。如果等待的時(shí)間過(guò)長(zhǎng),硬件會(huì)進(jìn)行下一次A/D轉(zhuǎn)換(如果采用硬件觸發(fā)方式,A/D轉(zhuǎn)的速度會(huì)很快),并且在你的中斷服務(wù)程序傳輸舊的數(shù)據(jù)之前改寫數(shù)據(jù)寄存器中的值。新的A/D轉(zhuǎn)換會(huì)有啟動(dòng)你的中斷服務(wù)程序,而傳輸?shù)?/p>
43、數(shù)據(jù)是最新的采樣值。舊的數(shù)據(jù)已經(jīng)被新的數(shù)據(jù)覆蓋(丟失了)。FIFO功能解決了上述問(wèn)題。FIFO緩沖區(qū)會(huì)存儲(chǔ)連續(xù)采樣的數(shù)據(jù),如果中斷服務(wù)程序還未傳輸最初的采樣值,F(xiàn)IFO會(huì)將下一次采樣值放入到FIFO中的下一個(gè)位置。中斷方式下使用FIFO的方法與軟件查尋方法類似。4.1.7 內(nèi)部緩沖區(qū)的使用方式驅(qū)動(dòng)程序在操作內(nèi)部緩沖區(qū)時(shí)是將內(nèi)部緩沖區(qū)分為上下兩半緩沖區(qū)來(lái) 分別操作。通過(guò)這樣來(lái)保證高速連續(xù)采集時(shí),數(shù)據(jù)不會(huì)丟失。雙緩沖區(qū)模式,在工程上稱為“乒乓”緩沖區(qū)模式。跟常用的單緩沖區(qū)模式相比雙緩沖區(qū)模式的優(yōu)點(diǎn)是,它可以使用較小容量的內(nèi)存,不間斷地緩沖幾乎無(wú)限量的數(shù)據(jù)(輸入與輸出端需協(xié)同工作)。這種緩沖區(qū)模式的
44、工作原理是:在內(nèi)存里開(kāi)辟兩塊容量相等的緩沖區(qū)(以下將分別它們稱為第一緩沖區(qū)和第二緩沖區(qū))作為連續(xù)數(shù)據(jù)輸入的緩沖區(qū)。工作開(kāi)始時(shí),數(shù)據(jù)采集卡首先將數(shù)據(jù)寫入第一緩沖區(qū)中,在數(shù)據(jù)采集卡開(kāi)始把數(shù)據(jù)寫入第二緩沖區(qū)的同時(shí),用戶程序可以根據(jù)自身需要取出第一緩沖區(qū)中的數(shù)據(jù)做特定的處理。當(dāng)?shù)诙彌_區(qū)被寫滿后,數(shù)據(jù)采集卡回到第一緩沖區(qū)的起始處,以覆蓋舊數(shù)據(jù)的方式,把新數(shù)據(jù)寫入第一緩沖區(qū)中;與此同時(shí)用戶程序取出第二緩沖區(qū)中的數(shù)據(jù)。整個(gè)數(shù)據(jù)采集處理過(guò)程可以如此不斷地循環(huán)進(jìn)行下去。在采集時(shí)驅(qū)動(dòng)程序從寄存器中將數(shù)據(jù)傳輸?shù)絻?nèi)部緩沖區(qū)中,當(dāng)內(nèi)部緩沖區(qū)半滿時(shí)驅(qū)動(dòng) 程序發(fā)出BufferChange事件。用戶通過(guò)執(zhí)行DRV_FAIC
45、heck函數(shù)返回的HalfReady來(lái)判斷是上半部分還是下半部分緩沖滿了,然后執(zhí)行DRV_FAITransfer來(lái)將相應(yīng)的緩沖中的數(shù)據(jù)搬走。4.1.8 循環(huán)(cycle) 和非循環(huán)(no_cycle) 循環(huán)和非循環(huán)是指內(nèi)部緩沖區(qū)的使用方式。非循環(huán)方式下,內(nèi)部緩沖區(qū)作為一個(gè)整體使用。在非循環(huán)方式下執(zhí)行一次DRV_FAIIntScanStart/DRV_FAIIntStart函數(shù)只能進(jìn)行有限次(次數(shù)就是通過(guò)參數(shù)count設(shè)定的采樣個(gè)數(shù))的A/D轉(zhuǎn)換,DRV_FAIIntScanStart函數(shù)執(zhí)行過(guò)程中將所有數(shù)據(jù)都放到內(nèi)部緩沖區(qū);A/D轉(zhuǎn)換結(jié)束后,在 ADS_EVT_TERMINATED 事件的處理
46、函數(shù)中再用DRV_FAITransfer函數(shù)將數(shù)據(jù)傳送到用戶緩沖區(qū)中。循環(huán)方式下,內(nèi)部緩沖區(qū)分為兩個(gè)半?yún)^(qū)使用。執(zhí)行一次DRV_FAIIntScanStart/DRV_FAIIntStart函數(shù)可以進(jìn)行無(wú)限次的 A/D 轉(zhuǎn)換,直到調(diào)用DRV_FAI_Stop函數(shù)。這種方式下有限的內(nèi)部緩沖區(qū)不可能容納無(wú)限多的采集數(shù)據(jù)。因此,將內(nèi)部緩沖區(qū)分成前后對(duì)等的兩個(gè)半?yún)^(qū)。當(dāng)前半?yún)^(qū)填滿后產(chǎn)生一個(gè)ADS_EVT_BUFCHANGE事件,采集程序中的事件檢查循環(huán)捕獲這個(gè)事件,調(diào)用DRV_FAI_Transfer函數(shù)把數(shù)據(jù)傳送到用戶緩沖區(qū);與此同時(shí)DRV_FAIIntScanStart/DRV_FAIIntStart
47、函數(shù)將新轉(zhuǎn)換的數(shù)據(jù)放到內(nèi)部緩沖區(qū)的后半部分。當(dāng)后半?yún)^(qū)填滿后再產(chǎn)生一個(gè)ADS_EVT_BUFCHANGE事件,并用DRV_FAIIntScanStart/DRV_FAIIntStart函數(shù)將新轉(zhuǎn)換的數(shù)據(jù)放到數(shù)據(jù)傳輸完畢的前半緩沖區(qū),如此循環(huán)。4.1.9 Raw Data(原始數(shù)據(jù))和voltage(電壓值) PCI-1710L的轉(zhuǎn)換芯片是12位的,所以它可以把采集的電壓量程分為4096段,這種方式稱為量化,而Raw Data就是將被采集量量化后的整數(shù)值。驅(qū)動(dòng)程序?qū)⒘炕涤?位十六進(jìn)制數(shù)表示,所以Raw Data的示數(shù)范圍就是000-fff,在內(nèi)部緩沖區(qū)中的數(shù)值就是這種量化的原始數(shù)據(jù)。用戶緩沖區(qū)中
48、存放Voltage(電壓值),將Raw Data轉(zhuǎn)化為電壓值由CRVFAITransfer函數(shù)完成,當(dāng) PTFAITransfer 的DataType=0時(shí),不進(jìn)行Raw Data到電壓值的轉(zhuǎn)化,這時(shí)候在用戶緩沖區(qū)中得到的就是量化的12位十六進(jìn)制整數(shù)值。4.2 軟件設(shè)計(jì)4.2.1 測(cè)試系統(tǒng)開(kāi)發(fā)需要完成的任務(wù)本次測(cè)試系統(tǒng)的開(kāi)發(fā)任務(wù)主要有兩個(gè):一是根據(jù)具體情況確定信號(hào)連接方案,二是基于Windows,使用Microsoft Visual C+ 進(jìn)行光譜采集系統(tǒng)軟件的開(kāi)發(fā),這是核心任務(wù)。軟件需要實(shí)現(xiàn)以下幾個(gè)功能:1) 使用數(shù)據(jù)采集卡的軟件開(kāi)發(fā)工具包及LIB文件進(jìn)行通信,獲取所需光譜數(shù)據(jù);2) 光譜數(shù)
49、據(jù)的采集后實(shí)時(shí)存儲(chǔ)(最終存儲(chǔ)至TXT文檔);3) 光譜數(shù)據(jù)的采集后實(shí)時(shí)畫圖顯示。4.2.2 程序的總體構(gòu)架圖4-3 程序的設(shè)計(jì)步驟與基本框架數(shù)據(jù)存儲(chǔ)模塊數(shù)據(jù)采集制實(shí)時(shí)畫圖模塊人機(jī)交互模塊模塊整合與功能實(shí)現(xiàn)架構(gòu)設(shè)計(jì)及件裝配及調(diào)試影件連接模塊硬硬件裝配及調(diào)試是基于硬件的軟件程序設(shè)計(jì)的基礎(chǔ),程序設(shè)計(jì)的基本步驟與基本框架如圖4-3所示。本程序基于單文檔的文檔/視圖程序架構(gòu),運(yùn)行各種命令與操作主要依靠菜單來(lái)實(shí)現(xiàn)。菜單由以下項(xiàng)目組成:1) 文件菜單內(nèi)含多個(gè)命令的彈出式菜單,包括四個(gè)用于處理文件的命令:新建、打開(kāi)、保存、另存為;三個(gè)用于打印的命令:打印、打印預(yù)覽、頁(yè)面設(shè)置;最近處理過(guò)的文件列表以及退出程序的
50、命令。2) 編輯菜單內(nèi)含多個(gè)命令的彈出式菜單,包括撤消命令;以及Windows剪貼板相關(guān)的剪切、復(fù)制、粘貼三個(gè)命令。3) 查看菜單彈出式菜單,包括用于顯示、取消狀態(tài)欄的命令。4) 采集卡設(shè)置菜單非彈出式命令菜單,用于打開(kāi)采集卡設(shè)置對(duì)話框以設(shè)置采集卡參數(shù)。5) 采集菜單非彈出式命令菜單,用于啟動(dòng)數(shù)據(jù)采集卡進(jìn)行數(shù)據(jù)采集。6) 圖形菜單內(nèi)含多個(gè)命令的彈出式菜單,包括用于處理圖形的整體縮放、局部放大、圖像顏色三個(gè)命令。7) 幫助菜單彈出式菜單,包含關(guān)于命令,用于打開(kāi)一個(gè)顯示程序信息的對(duì)話框。人機(jī)交互模塊的編寫實(shí)際就是菜單界面編寫,因此最為簡(jiǎn)單。很多功能都是菜單生成時(shí)自動(dòng)添加的功能,因此只要添加“數(shù)據(jù)采
51、集”下拉條,并添加“開(kāi)始采集”和“停止采集”兩個(gè)按鈕分別進(jìn)行開(kāi)啟和關(guān)閉數(shù)據(jù)采集卡的功能即可。4.2.3 數(shù)據(jù)采集及顯示程序流程圖編寫基于研華PCI-1710L多功能數(shù)據(jù)采集卡的軟件程序,需要使用研華驅(qū)動(dòng)程序提供的DLL(動(dòng)態(tài)連接庫(kù),Dynamic Linked Library)1)象編寫一般的Windows應(yīng)用程序一樣創(chuàng)建您的應(yīng)用程序代碼,在這些代碼中可以象典型的函數(shù)調(diào)用一樣調(diào)用研華驅(qū)動(dòng)程序中提供的動(dòng)態(tài)連接庫(kù)中(DLL)的函數(shù)。2)聲明在您的程序中用到的函數(shù),即:包含動(dòng)態(tài)連接庫(kù)(DLL)的頭文件,該函數(shù)聲明了所有的動(dòng)態(tài)連接庫(kù)中的函數(shù),如下所示:#include“driver.h”3)將動(dòng)態(tài)連接
52、庫(kù)的(DLL)的導(dǎo)入庫(kù)(例如,“ADSAPI32.LIB”)加到工程模塊中。在Visual C+環(huán)境下,只要按照流程圖就可以完成數(shù)據(jù)的動(dòng)態(tài)采集及顯示,中斷傳輸流程圖如圖4-4所示:使用的驅(qū)動(dòng)函數(shù)說(shuō)明:1) DRV_DeviceGetList:有多種硬件設(shè)備時(shí),獲取設(shè)備列表。2) DRV_ DeviceOpen:打開(kāi)指定的數(shù)據(jù)采集卡。3) DRV_EnableEvent:開(kāi)啟事件響應(yīng)機(jī)制。4) DRV_FAIIntStart:開(kāi)始中斷觸發(fā)方式的A/D轉(zhuǎn)換。5) DRV_CheckEvent:檢查是否有設(shè)定的事件發(fā)生。6) DRV_FAICheck :檢查A/D轉(zhuǎn)換的狀態(tài)。在本例中用于檢查究竟是內(nèi)
53、部緩沖區(qū)的前半部分滿了,還是后半部分滿了。7) DRV_FAITransfer:將采集的數(shù)據(jù)從內(nèi)部緩沖區(qū)傳輸?shù)接脩艟彌_區(qū)。8) DRV_FAITerminate:結(jié)束A/D轉(zhuǎn)換。9) DRV_DeviceClose :關(guān)閉指定的數(shù)據(jù)采集卡。10) Buffer Change Event:該事件表示內(nèi)部緩沖區(qū)已經(jīng)半滿。可以將這部分?jǐn)?shù)據(jù)傳輸?shù)接脩艟彌_區(qū)中。測(cè)試步驟:1)點(diǎn)擊“開(kāi)始采集”按鈕,測(cè)試系統(tǒng)調(diào)用DRV_DeviceGetList函數(shù)獲取設(shè)備列表并選擇設(shè)備PCI-1710L數(shù)據(jù)采集卡;2)調(diào)用DRV_DeviceOpen函數(shù)啟動(dòng)數(shù)據(jù)采集卡,并調(diào)用DRV_EnableEvent函數(shù)開(kāi)啟事件響應(yīng)
54、機(jī)制;3)調(diào)用DRV_FAIIntStart函數(shù)獲取數(shù)據(jù)采集所需要的參數(shù)設(shè)置,并開(kāi)啟中斷響應(yīng)功能;4)進(jìn)入DRV_CheckEvent函數(shù)檢查是否有設(shè)定的事件發(fā)生,對(duì)應(yīng)是否有外部觸發(fā)脈沖引發(fā)的Interrupt事件出現(xiàn)(用戶打開(kāi)波長(zhǎng)手輪轉(zhuǎn)動(dòng)開(kāi)關(guān)進(jìn)行光譜測(cè)試),如果沒(méi)有外部脈沖出現(xiàn),則保持等待狀態(tài)。一旦觸發(fā)脈沖出現(xiàn)時(shí),軟件就進(jìn)行A/D轉(zhuǎn)換并將原始數(shù)據(jù)存儲(chǔ)到內(nèi)部緩存區(qū),然后等待下一個(gè)當(dāng)觸發(fā)脈沖出現(xiàn)時(shí)再進(jìn)行A/D轉(zhuǎn)換,在這個(gè)過(guò)程中,當(dāng)內(nèi)部緩存區(qū)半滿或全滿會(huì)觸發(fā)BufferChange事件(如BufferChange事件發(fā)生,則調(diào)用DRV_FAICheck函數(shù)首先檢查內(nèi)部緩存區(qū)半滿還是全滿),之后調(diào)用
55、DRV_FAITransfer函數(shù)將原始數(shù)據(jù)轉(zhuǎn)換為電壓數(shù)據(jù),并講轉(zhuǎn)換后的數(shù)據(jù)轉(zhuǎn)移至用戶緩存區(qū)。然后調(diào)用WriteData()函數(shù)選適當(dāng)?shù)臄?shù)據(jù)顯示并保存到“數(shù)據(jù)采集.txt”文檔中。軟件還要檢查光譜測(cè)試是否結(jié)束,如沒(méi)有結(jié)束則繼續(xù)進(jìn)入DRV_CheckEvent函數(shù)進(jìn)行事件檢查,重復(fù)上述步驟;如結(jié)束則調(diào)用DRV_FAITerminate函數(shù)停止A/D轉(zhuǎn)換,并釋放內(nèi)部緩存區(qū)和用戶緩存區(qū)的空間,最終調(diào)用DRV_DeviceClose函數(shù)關(guān)閉設(shè)備,采集完成。在光譜測(cè)試過(guò)程中,用戶還可隨時(shí)中斷采集,通過(guò)點(diǎn)擊“停止采集”按鈕,軟件產(chǎn)生Terminate事件而終止采集工作。要停止采集?DRV_FAICheck
56、DRV_FAITransferWriteData()DRV_EnableEventDRV_FAITerminateDRV_FAIIntStartDRV_CheckEventDRV_DeviceClose終止是否否是BufferChange發(fā)生?DRV_ DeviceOpen開(kāi)始DRV_DeviceGetList圖4-4 數(shù)據(jù)采集及顯示程序流程圖要停止采集?DRV_FAICheckDRV_FAITransferWriteData()DRV_EnableEventDRV_FAITerminateDRV_FAIIntStartDRV_CheckEventDRV_DeviceClose終止是否否是BufferChange發(fā)生?DRV_ DeviceOpen4.2.4 數(shù)據(jù)采集模塊的編寫借助于研華公司提供設(shè)備驅(qū)動(dòng)程序SDK,在編寫程序
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽修行業(yè)安全操作規(guī)范
- 推動(dòng)管理培訓(xùn)
- 機(jī)械制造行業(yè)工藝創(chuàng)新培訓(xùn)心得
- 《護(hù)士條例解析周紅》課件
- 2024年河南省濮陽(yáng)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2024年安徽省宿州市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年河南省焦作市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年湖北省宜昌市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年內(nèi)蒙古自治區(qū)巴彥淖爾市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年陜西省渭南市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 房屋無(wú)償使用協(xié)議書(8篇)
- 中央銀行理論與實(shí)務(wù)期末復(fù)習(xí)題
- 國(guó)家開(kāi)放大學(xué)電大本科《國(guó)際私法》案例題題庫(kù)及答案(b試卷號(hào):1020)
- 喜慶中國(guó)節(jié)春節(jié)習(xí)俗文化PPT模板
- 測(cè)井儀器設(shè)計(jì)規(guī)范--電子設(shè)計(jì)
- 北師大版小學(xué)五年級(jí)上冊(cè)數(shù)學(xué)第六單元《組合圖形的面積》單元測(cè)評(píng)培優(yōu)試卷
- 用特征方程求數(shù)列的通項(xiàng)
- 四年級(jí)奧數(shù)題(一)找規(guī)律
- 素材庫(kù)管理系統(tǒng)架構(gòu)(共13頁(yè))
- 監(jiān)理平行檢驗(yàn)記錄表
- 縣領(lǐng)導(dǎo)在新錄用公務(wù)員培訓(xùn)班開(kāi)班典禮上的講話
評(píng)論
0/150
提交評(píng)論