基于gpib卡的光譜信息自動(dòng)采集、控制系統(tǒng)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p><b>  摘要1</b></p><p><b>  關(guān)鍵詞1</b></p><p><b>  1.前言2</b></p><p>  1.1 課題的背景及意義2</p>

2、;<p>  1.2 設(shè)計(jì)目標(biāo)及內(nèi)容2</p><p>  2.系統(tǒng)的總體設(shè)計(jì)方案4</p><p>  2.1 系統(tǒng)的總體結(jié)構(gòu)4</p><p>  2.2 GPIB概述4</p><p>  2.2.1 GPIB標(biāo)準(zhǔn)接口系統(tǒng)的基本特性4</p><p>  2.2.3 GPIB接口卡6&l

3、t;/p><p>  2.2.4 GPIB系統(tǒng)的特點(diǎn)7</p><p>  2.3 LabWindows/CVI簡(jiǎn)介7</p><p>  2.3.1 LabWindows/CVI下虛擬儀器軟件的組成9</p><p>  2.3.2 LabWindows/CVI軟件的特點(diǎn)10</p><p>  2.4 Q838

4、4光譜儀11</p><p><b>  2.5 小結(jié)12</b></p><p>  3.系統(tǒng)的軟件設(shè)計(jì)方案12</p><p>  3.1 軟件界面設(shè)計(jì)12</p><p>  3.2軟件功能模塊的實(shí)現(xiàn)15</p><p>  3.2.1 主控模塊15</p><

5、;p>  3.2.2 數(shù)據(jù)采集模塊17</p><p>  3.2.3 數(shù)據(jù)分析模塊24</p><p>  3.2.4 圖形處理模塊25</p><p>  3.2.5 安裝文件的生成26</p><p>  4.光譜儀控制軟件的測(cè)試27</p><p>  4.1 圖表繪制27</p>

6、<p>  4.2 數(shù)據(jù)顯示部分27</p><p>  4.3 離線畫(huà)圖28</p><p>  4.4 圖形截取與保存28</p><p><b>  5.總結(jié)29</b></p><p><b>  致謝30</b></p><p><b&

7、gt;  參考文獻(xiàn)31</b></p><p>  Abstract32</p><p>  Key Words32</p><p>  基于GPIB卡的光譜信息自動(dòng)采集、控制系統(tǒng)設(shè)計(jì)</p><p>  【摘要】:利用NI公司的GPIB數(shù)據(jù)采集卡建立虛擬儀器采集與控制系統(tǒng),在自動(dòng)測(cè)試領(lǐng)域得到了廣泛的應(yīng)用。此設(shè)計(jì)方案通過(guò)GP

8、IB數(shù)據(jù)采集卡實(shí)現(xiàn)計(jì)算機(jī)與Q8384光譜儀的連接。基于LabWindows/CVI設(shè)計(jì)光譜儀的圖形用戶界面(GUI),使用LabWindows/CVI編程實(shí)現(xiàn)計(jì)算機(jī)對(duì)光譜儀的實(shí)時(shí)控制。這樣可以充分利用LabWindows/CVI強(qiáng)大的測(cè)控功能,并實(shí)現(xiàn)大量實(shí)驗(yàn)數(shù)據(jù)的測(cè)量與保存,可以離線分析數(shù)據(jù),操作方便,是對(duì)虛擬儀器技術(shù)的充分利用。</p><p>  【關(guān)鍵詞】:GPIB卡;光譜儀; LabWindows/CVI

9、</p><p><b>  1.前言</b></p><p>  1.1 課題的背景及意義</p><p>  本文的研究課題是“基于GPIB卡的光譜信息自動(dòng)采集、控制系統(tǒng)設(shè)計(jì)”,來(lái)源于武器裝備部某項(xiàng)目。</p><p>  在科學(xué)實(shí)驗(yàn)中,大量的數(shù)據(jù)測(cè)量與分析是非常必要的,而通過(guò)人工對(duì)這些數(shù)據(jù)進(jìn)行記錄分析顯然是不現(xiàn)實(shí)的

10、,智能化儀器可以有效地解決這個(gè)問(wèn)題。智能儀器與傳統(tǒng)儀器的最大區(qū)別是將儀器本身與計(jì)算機(jī)連接起來(lái),再與相應(yīng)軟件結(jié)合,這充分發(fā)揮了計(jì)算機(jī)的強(qiáng)大功能。</p><p>  本課題的主要目的是通過(guò)Q8384光譜儀分析光源的各種性能。光譜儀連接計(jì)算機(jī)是通過(guò)NI公司的GPIB接口卡。GPIB(General-Purpose Interface Bus通用接口總線)作為一種通用的接口總線以及在各種儀器、打印機(jī)等上大量應(yīng)用。在進(jìn)行

11、科學(xué)實(shí)驗(yàn)時(shí)有時(shí)需對(duì)大量的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行處理,很多數(shù)據(jù)和圖形需要保存,而儀器本身對(duì)數(shù)據(jù)的保存和分析功能是有限的,通過(guò)GPIB卡可以將儀器連接到計(jì)算機(jī)上。LabWindows/CVI是National Instruments公司推出的一套面向測(cè)控領(lǐng)域的軟件開(kāi)發(fā)平臺(tái)。它以ANSI C為核心,將功能強(qiáng)大,使用靈活的C語(yǔ)言平臺(tái)與數(shù)據(jù)采集,分析和表達(dá)的測(cè)控專業(yè)工具有機(jī)地接和起來(lái)。它的集成化開(kāi)發(fā)平臺(tái),交互式編程方法,豐富的控件和庫(kù)函數(shù)大大增強(qiáng)了C語(yǔ)言的

12、功能,為熟悉C語(yǔ)言的開(kāi)發(fā)人員建立檢測(cè)系統(tǒng)、自動(dòng)測(cè)量環(huán)境、數(shù)據(jù)采集系統(tǒng)、過(guò)程監(jiān)控系統(tǒng)等提供了一個(gè)理想的軟件開(kāi)發(fā)環(huán)境。在LabWindows/CVI平臺(tái)上開(kāi)發(fā)的軟件可以實(shí)現(xiàn)對(duì)通過(guò)GPIB卡連接到計(jì)算機(jī)上的實(shí)驗(yàn)儀器進(jìn)行控制,這就是虛擬儀器技術(shù)的實(shí)際應(yīng)用。這樣的軟件不僅可以實(shí)現(xiàn)光譜儀的大部分功能,而且還可以實(shí)時(shí)自動(dòng)</p><p>  1.2 設(shè)計(jì)目標(biāo)及內(nèi)容</p><p>  在LabWindo

13、ws/CVI開(kāi)發(fā)平臺(tái)上設(shè)計(jì)與Q8384光譜儀相對(duì)應(yīng)的控制軟件,實(shí)現(xiàn)的功能包括:建立計(jì)算機(jī)和光譜儀的連接;定時(shí)采集保存數(shù)據(jù),如波長(zhǎng)、峰值功率、帶寬等;光譜儀顯示界面上圖形繪制;光譜儀操作界面上各個(gè)按鈕功能;對(duì)繪制的數(shù)據(jù)圖進(jìn)行截屏;對(duì)保存數(shù)據(jù)進(jìn)行離線畫(huà)圖等。</p><p>  本課題的主要目的是通過(guò)GPIB數(shù)據(jù)采集卡實(shí)現(xiàn)Q8384光譜儀與計(jì)算機(jī)連接,在LabWindows/CVI開(kāi)發(fā)平臺(tái)上設(shè)計(jì)光譜儀的圖形用戶界面(

14、GUI),編程并生成相應(yīng)的安裝軟件。通過(guò)這個(gè)軟件可以實(shí)現(xiàn)對(duì)光譜儀的控制并且可以采集光譜儀上的各種數(shù)據(jù),繪制圖形,保存數(shù)據(jù),同時(shí)保存的數(shù)據(jù)也可再次用軟件進(jìn)行分析。課題的完成過(guò)程包括Q8384光譜儀說(shuō)明書(shū)的學(xué)習(xí),LabWindows/CVI開(kāi)發(fā)平臺(tái)的熟悉,光譜儀界面的布局和相應(yīng)軟件的開(kāi)發(fā)。</p><p>  基于以上設(shè)計(jì)目標(biāo),主要設(shè)計(jì)內(nèi)容包括兩項(xiàng):</p><p>  與Q8384光譜儀想對(duì)

15、應(yīng)的圖形用戶界面(GUI)的設(shè)計(jì),包括光譜儀上的控制按鈕,圖表和數(shù)據(jù)顯示窗口以及光譜儀與計(jì)算機(jī)連接按鈕。</p><p>  與圖形用戶界面項(xiàng)對(duì)應(yīng)的回調(diào)函數(shù)程序的編譯,通過(guò)編程對(duì)從光譜儀上讀出的原始數(shù)據(jù)進(jìn)行進(jìn)一步處理,包括數(shù)據(jù)類型轉(zhuǎn)換,顯示和保存等。</p><p>  其中軟件設(shè)計(jì)是本課題的重點(diǎn)。從及光譜儀讀出來(lái)的數(shù)據(jù)是指數(shù)形式,每種數(shù)據(jù)前都有四個(gè)字母作為標(biāo)識(shí)符且每個(gè)數(shù)據(jù)是用逗號(hào)分隔開(kāi)的

16、,這要求設(shè)計(jì)出最佳的算法去編程來(lái)處理相應(yīng)的數(shù)據(jù)。</p><p>  1.3 虛擬儀器概述</p><p>  在對(duì)大規(guī)模、集成化、智能化及數(shù)字化電子儀器需求愈加迫切的形勢(shì)下,計(jì)算機(jī)技術(shù)、儀器技術(shù)和通信技術(shù)相結(jié)合,產(chǎn)生了具有里程碑意義的新一代儀器—虛擬儀器(Virtual Instruments)。虛擬儀器技術(shù)是全新概念的最新一代測(cè)量?jī)x器,自1987年誕生以來(lái),與前幾代測(cè)試儀器相比,以前所

17、未有過(guò)的速度迅猛發(fā)展。以美國(guó)NI公司為代表的一批廠商已經(jīng)在市場(chǎng)上推出了基于虛擬儀器技術(shù)而設(shè)計(jì)的產(chǎn)品話儀器產(chǎn)品。虛擬儀器技術(shù)是計(jì)算機(jī)硬件資源,儀器硬件,數(shù)據(jù)分析處理軟件,通信軟件及圖形用戶界面(GUI)的有效結(jié)合,具有傳統(tǒng)儀器所具備的信號(hào)采集,信號(hào)處理分析,信號(hào)輸出等功能。其基本構(gòu)成包括計(jì)算機(jī),虛擬儀器軟件,硬件接口和測(cè)控儀器等。與傳統(tǒng)儀器相比,虛擬儀器的優(yōu)點(diǎn)是顯而易見(jiàn)的。①.融合了計(jì)算機(jī)強(qiáng)大的硬件資源,有效的解決了傳統(tǒng)儀器在數(shù)據(jù)處理,顯

18、示,儲(chǔ)存等方面的受限的問(wèn)題。大大增強(qiáng)了儀器的功能。②.利用了計(jì)算機(jī)豐富的軟件資源。實(shí)現(xiàn)了部分儀器硬件的軟件化,節(jié)省了物質(zhì)資源,可以實(shí)時(shí),直接地對(duì)測(cè)試的數(shù)據(jù)進(jìn)行各種分析和處理,圖形用戶界面(GUI)便于操作。③.虛擬儀器技術(shù)具有方便,靈活的互聯(lián)能力,廣泛支持各種工業(yè)總線標(biāo)準(zhǔn)。因此,</p><p>  圖1-1 虛擬儀器系統(tǒng)的結(jié)構(gòu)示意圖</p><p>  1.4 本文的主要內(nèi)容</p

19、><p><b>  本文的主要內(nèi)容有:</b></p><p> ?。?)說(shuō)明了本課題的主要內(nèi)容,介紹了虛擬儀器的基本狀況。</p><p> ?。?)介紹了設(shè)計(jì)的系統(tǒng)組成,包括光譜儀、GPIB卡、LabWindows軟件等。</p><p> ?。?)詳細(xì)介紹整個(gè)軟件系統(tǒng)設(shè)計(jì)過(guò)程。</p><p>

20、;  (4)用所設(shè)計(jì)的軟件系統(tǒng)進(jìn)行測(cè)試,分析光譜儀上的數(shù)據(jù)并對(duì)結(jié)果進(jìn)行分析。</p><p>  (5)對(duì)課題做出總結(jié),找出系統(tǒng)可以進(jìn)一步改進(jìn)的地方。</p><p>  2.系統(tǒng)的總體設(shè)計(jì)方案</p><p>  2.1 系統(tǒng)的總體結(jié)構(gòu)</p><p>  如圖2-1所示,本套系統(tǒng)主要由四部分組成。包括了待測(cè)光源,光譜儀,GPIB接口卡,L

21、abWindows/CVI控制軟件。其中LabWindows/CVI控制軟件是本系統(tǒng)最關(guān)鍵的部分。</p><p><b>  GPIB總線</b></p><p>  圖2-1 本系統(tǒng)采用GPIB接口總線一般組成</p><p>  2.2 GPIB概述</p><p>  GPIB即通用接口總線(General Pu

22、rpose Interface Bus) 是國(guó)際通用的儀器接口標(biāo)準(zhǔn)。目前生產(chǎn)的智能儀器幾乎無(wú)例外地都配有GPIB標(biāo)準(zhǔn)接口。</p><p>  國(guó)際通用的儀器接口標(biāo)準(zhǔn)最初由美國(guó)HP公司研制,稱為HPIB標(biāo)準(zhǔn)。 1975年IEEE在此基礎(chǔ)上加以改進(jìn),將其規(guī)范化為IEEE488標(biāo)準(zhǔn)予以推薦。1977年IEC又通過(guò)國(guó)際合作命名為IEC625國(guó)際標(biāo)準(zhǔn)。此后,這同一標(biāo)準(zhǔn)便在文獻(xiàn)資料中使用了HPIB,IEEE488,GPI

23、B,IECIB等多種稱謂,但日漸普遍使用的名稱是GPIB。 </p><p>  2.2.1 GPIB標(biāo)準(zhǔn)接口系統(tǒng)的基本特性 </p><p>  GPIB標(biāo)準(zhǔn)包括接口與總線兩部分:接口部分是由各種邏輯電路組成,與各儀器裝置安裝在一起,用于對(duì)傳輸?shù)男畔⑦M(jìn)行發(fā)送、接收、編碼和譯碼;總線部分是一條無(wú)源的多芯電纜,用做傳輸各種消息。將具有GPIB接口的儀器用GPIB總線連接起來(lái)的標(biāo)準(zhǔn)接口總線系統(tǒng)

24、如圖2-1所示。 </p><p>  在一個(gè)GPIB標(biāo)準(zhǔn)接口總線系統(tǒng)中,要進(jìn)行有效的通信聯(lián)絡(luò)至少有“講者”、“聽(tīng)者”、“控者”三類儀器裝置。</p><p>  講者是通過(guò)總線發(fā)送儀器消息的儀器裝置( 如測(cè)量?jī)x器、數(shù)據(jù)采集器、計(jì)算機(jī)等),在一個(gè)GPIB系統(tǒng)中,可以設(shè)置多個(gè)講者, 但在某一時(shí)刻,只能有一個(gè)講者在起作用。</p><p>  聽(tīng)者是通過(guò)總線接收由講者發(fā)

25、出消息的裝置(如打印機(jī)、信號(hào)源等),在一個(gè)GPIB系統(tǒng)中,可以設(shè)置多個(gè)聽(tīng)者,并且允許多個(gè)聽(tīng)者同時(shí)工作。</p><p>  控者是數(shù)據(jù)傳輸過(guò)程中的組織者和控制者,例如對(duì)其他設(shè)備進(jìn)行尋址或允許“講者”使用總線等??卣咄ǔS捎?jì)算機(jī)擔(dān)任,GPIB系統(tǒng)不允許有兩個(gè)或兩個(gè)以上的控者同時(shí)起作用。2.2.2 GPIB標(biāo)準(zhǔn)接口的總線結(jié)構(gòu) </p><p>  GPIB總線是一條24芯電纜(如圖2-2所示)

26、,其中16條為信號(hào)線,其余為地線及屏蔽線。電纜兩端是雙列24芯疊式結(jié)構(gòu)插頭。</p><p>  圖2-2 GPIB接口示意圖</p><p>  16條信號(hào)線按功能可分為三組:</p><p>  8條雙向數(shù)據(jù)總線(DIO1~DIO8)作用:傳遞儀器消息和大部分接口消息,包括數(shù)據(jù)、命令和地址。由于這一標(biāo)準(zhǔn)沒(méi)有專門(mén)的地址總線和控制總線,因此必須用其余兩組信號(hào)線來(lái)區(qū)

27、分?jǐn)?shù)據(jù)總線上信息的類型。</p><p>  3條數(shù)據(jù)掛鉤聯(lián)絡(luò)線(DAV,NRFD和NDAC)作用:控制數(shù)據(jù)總線的時(shí)序,以保證數(shù)據(jù)總線能正確、有節(jié)奏地傳輸信息,這種傳輸技術(shù)稱為三線掛鉤技術(shù)(見(jiàn)表2.1)。 </p><p>  表2.1 3條數(shù)據(jù)掛鉤聯(lián)絡(luò)線</p><p>  5條接口管理控制線(ATN,IFC,REN,EOI和SRQ)作用:控制GP-IB總線接口

28、的狀態(tài)</p><p>  表 2.2 5條接口管理控制線功能</p><p>  2.2.3 GPIB接口卡</p><p>  GPIB接口電路的接口卡插于計(jì)算機(jī)的PCI或ISA插槽內(nèi),作為控制聽(tīng)者和講者的控制器,隨接口卡帶有IEEE 2488庫(kù)函數(shù),包括聽(tīng)、講、控、并行點(diǎn)名、遠(yuǎn)程控制等接口功能;此外,,一般還包括高級(jí)語(yǔ)言接口程序、硬件和軟件安裝檢查診斷和通用

29、管理程序等,極大方便了用戶利用高級(jí)語(yǔ)言進(jìn)行自動(dòng)測(cè)量系統(tǒng)的編程。GPIB 允許每臺(tái)IBM兼容機(jī)中安裝2塊接口卡,分別定義為GPIB0 和GPIB1,可管理一套包括一臺(tái)計(jì)算機(jī)和最多30臺(tái)儀器的大型綜合測(cè)試系統(tǒng)。</p><p>  GPIB接口板由GP IB適配器芯片、PC總線地址譯碼器, 以及母線驅(qū)動(dòng)器/收發(fā)器、緩沖區(qū)、DMA通道等組成,其核心是GPIB適配器芯片,一般具有10 種GPIB 接口功能。由于數(shù)據(jù)傳方式

30、采用三線掛鉤技術(shù),故在循環(huán)中允許工作速率相差懸殊的器件通過(guò)母線雙向、異步通信。原理圖如圖2-3所示。</p><p>  圖2-3 GPIB接口卡原理</p><p>  2.2.4 GPIB系統(tǒng)的特點(diǎn)</p><p>  一個(gè)GPIB系統(tǒng)具有以下四個(gè)特點(diǎn):</p><p>  接口編程方便, 減輕了軟件的設(shè)計(jì)負(fù)擔(dān), 可使用高級(jí)編程語(yǔ)言。&

31、lt;/p><p>  提高了儀器設(shè)備的性能指標(biāo), 利用計(jì)算機(jī)對(duì)帶有GPIB 接口的儀器實(shí)現(xiàn)操作和控制, 可實(shí)現(xiàn)系統(tǒng)的自校準(zhǔn)、自診斷等要求, 從而提高了測(cè)量精度。</p><p>  便于將多臺(tái)帶有GPIB 總線的儀器組合起來(lái),形成較大的測(cè)試系統(tǒng), 高效靈活的完成各種不同的測(cè)試任務(wù), 而且組建和拆卸靈活, 使用方便。</p><p>  便于擴(kuò)展傳統(tǒng)儀器的功能, 由于儀

32、器與計(jì)算機(jī)相連, 因此, 可在計(jì)算機(jī)的控制下對(duì)測(cè)試數(shù)據(jù)進(jìn)行更加靈活、方便的傳輸、處理、綜合、利用和顯示, 使原來(lái)儀器采用硬件邏輯很難解決的問(wèn)題迎刃而解。</p><p>  2.3 LabWindows/CVI簡(jiǎn)介</p><p>  目前可用于虛擬儀器開(kāi)發(fā)的軟件可以分為如下兩大類,它們都包含界面設(shè)計(jì)模塊和功能函數(shù)設(shè)計(jì)模塊。</p><p>  文本式編程語(yǔ)言。如:

33、Visual C++,Visual BASIC,Java,C++ Builder,LabWindows/CVI等。</p><p>  圖形化編程語(yǔ)言。如:LabVIEW,HP/VEE等。</p><p>  當(dāng)前在對(duì)虛擬儀器進(jìn)行軟件系統(tǒng)開(kāi)發(fā)上,主流軟件平臺(tái)是LabWindows/CVI,LabView。LabVIEW是建立在Windows CNT/3.1/95/98/2000基礎(chǔ)上的圖形

34、化儀器開(kāi)發(fā)系統(tǒng)(也可用于Mao OS,Sun,HP-UX等)。用LabVIEW編寫(xiě)的儀器軟面板,其界面友好操作簡(jiǎn)單直觀;與傳統(tǒng)文本語(yǔ)言相比、用LabVIEW編程易學(xué)易懂省時(shí)省力,可以節(jié)省大量系統(tǒng)開(kāi)發(fā)時(shí)間,即使對(duì)于沒(méi)有文本語(yǔ)言基礎(chǔ)的非軟件工程師來(lái)說(shuō)也可以很快學(xué)習(xí)、掌握并應(yīng)用LabVIEW來(lái)開(kāi)發(fā)虛擬儀器。LabVIEW是一個(gè)完全的開(kāi)放的儀器開(kāi)發(fā)系統(tǒng),利用它可以構(gòu)成任意形式的虛擬儀器,如GPIB、VXI、PXI、串行系統(tǒng)、PLC和插入式數(shù)據(jù)采

35、集系統(tǒng)等,并可通過(guò)互聯(lián)網(wǎng)與其它數(shù)據(jù)源連接進(jìn)行動(dòng)態(tài)數(shù)據(jù)交換,還可以在LabVIEW中嵌入ActiveX控件。從其它開(kāi)發(fā)環(huán)境調(diào)用LabVIEW的源代碼,或用LabVIEW以動(dòng)態(tài)鏈接庫(kù)的形式在 Windows下或在其它平臺(tái)下以分享庫(kù)的形式調(diào)用現(xiàn)存代碼。</p><p>  LabWindows/CVI是一個(gè)完全的ANSI C開(kāi)發(fā)環(huán)境,用于儀器控制、自動(dòng)檢測(cè)、數(shù)據(jù)處理的應(yīng)用軟件。它以ANSI 

36、;C為核心,將功能強(qiáng)大、使用靈活的C語(yǔ)言平臺(tái)與用數(shù)據(jù)采集、分析和顯示的測(cè)控專業(yè)工具有機(jī)結(jié)合起來(lái)。它的交互式開(kāi)發(fā)平臺(tái)、交互式編程方法、豐富的功能面板和函數(shù)庫(kù)大大增強(qiáng)了C語(yǔ)言的功能,為熟悉C語(yǔ)言的開(kāi)發(fā)人員激勵(lì)自動(dòng)化檢測(cè)系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、過(guò)程控制系統(tǒng)等提供了一個(gè)理想的軟件開(kāi)發(fā)環(huán)境。LabWindows/CVI軟件把C語(yǔ)言的有力與柔性同虛擬儀器的軟件工具庫(kù)結(jié)合起來(lái),包含了各種總線、數(shù)據(jù)采集和分析庫(kù)。同時(shí),LabWindows/CVI軟件提供了

37、國(guó)內(nèi)外知名廠家生產(chǎn)的三百多種儀器的驅(qū)動(dòng)程序。LabWindows/CVI軟件的重要特征就是在Windows和Sun平臺(tái)上簡(jiǎn)化了圖形用戶接口的設(shè)計(jì),使用戶很容易的生成各種應(yīng)用程序,并且這些應(yīng)用程序可以在不同的平臺(tái)上移植。</p><p>  LabWindows/CVI是為C語(yǔ)言程序員提供的軟件開(kāi)發(fā)環(huán)境,在其交互式開(kāi)發(fā)環(huán)境中編寫(xiě)的程序必須符合標(biāo)準(zhǔn)C語(yǔ)言的規(guī)范。使用LabWindows/CVI可以完成如下工作:<

38、;/p><p>  交互式的程序開(kāi)發(fā)(圖2-4所示)。</p><p>  具有功能強(qiáng)大的功能庫(kù),用來(lái)創(chuàng)建數(shù)據(jù)采集和儀器控制的應(yīng)用程序。</p><p>  充分利用完備的軟件工具進(jìn)行數(shù)據(jù)采集、分析和顯示。</p><p>  利用向?qū)ч_(kāi)發(fā)IVI儀器驅(qū)動(dòng)程序和創(chuàng)建ActiveX服務(wù)器。</p><p>  為其他程序開(kāi)發(fā)C

39、目標(biāo)模塊、動(dòng)態(tài)鏈接庫(kù)(DLL)、C語(yǔ)言庫(kù)。</p><p>  LabWindows/CVI的功能強(qiáng)大在于它提供了豐富的函數(shù)庫(kù),利用這些函數(shù)庫(kù)不僅可以實(shí)現(xiàn)常規(guī)的程序設(shè)計(jì),還可以實(shí)現(xiàn)更加復(fù)雜的數(shù)據(jù)采集和儀器控制系統(tǒng)的開(kāi)發(fā),其中比較重要的函數(shù)庫(kù)如圖所2-5示。</p><p>  圖2-4 LabWindows/CVI的編程窗口</p><p>  儀器庫(kù)是LabWi

40、ndows/CVI的特殊資源,它包括GPIB、VXI和RS-232儀器的驅(qū)動(dòng)程序,如示波器、多用表和函數(shù)發(fā)生器,每個(gè)驅(qū)動(dòng)程序都提供可編輯的源代碼。使用LabWindows/CVI開(kāi)發(fā)工具提供的函數(shù)庫(kù)可以創(chuàng)建自己的儀器驅(qū)動(dòng)程序,在創(chuàng)建儀器驅(qū)動(dòng)程序中可以使用LabWindows/CVI的其他函數(shù)庫(kù)。</p><p><b>  儀器庫(kù)</b></p><p>  GPIB

41、/GPIB488.2庫(kù)</p><p><b>  RS-232庫(kù)</b></p><p><b>  VISA庫(kù)</b></p><p><b>  VXI庫(kù)</b></p><p><b>  數(shù)據(jù)采集庫(kù)</b></p><p>

42、;  EasyI/O for DAQ庫(kù)</p><p><b>  格式化和I/O庫(kù)</b></p><p><b>  分析庫(kù)和高級(jí)分析庫(kù)</b></p><p><b>  用戶界面庫(kù)</b></p><p>  動(dòng)態(tài)數(shù)據(jù)交換(DDE)庫(kù)</p><p&

43、gt;  傳輸控制協(xié)議(TCP)庫(kù)</p><p><b>  ActiveX庫(kù)</b></p><p>  DataSocket庫(kù)</p><p><b>  標(biāo)注C函數(shù)庫(kù)</b></p><p>  圖2-5 LabWindows/CVI函數(shù)庫(kù)</p><p>  2.

44、3.1 LabWindows/CVI下虛擬儀器軟件的組成</p><p>  在虛擬儀器技術(shù)當(dāng)中“軟件”是其核心,虛擬儀器軟件框架從底層到頂層分為VISA庫(kù),儀器驅(qū)動(dòng)程序和應(yīng)用軟件。系統(tǒng)的人機(jī)界面、參數(shù)的輸入、采集數(shù)據(jù)實(shí)時(shí)顯示、數(shù)據(jù)存儲(chǔ)和回放、信號(hào)處理與分析及智能診斷等都是通過(guò)軟件實(shí)現(xiàn)的。</p><p>  在LabWindows/CVI軟件平臺(tái)中,設(shè)計(jì)完成的虛擬軟件組成框圖如圖2-6所

45、示。從軟件組成框圖中可以看出,對(duì)于用LabWindows/CVI編寫(xiě)的虛擬儀器,其軟件的文件基本類型有如下五類。</p><p>  1)*.prj文件 </p><p>  它是工程文件,主要有*.uir文件,*.c文件,*.h文件和*.fp文件組成。</p><p>  圖2-6 用LabWindows/CVI設(shè)計(jì)的虛擬儀器軟件組成框圖</p>&

46、lt;p><b>  2)*.c文件 </b></p><p>  它是源程序文件,此文件為標(biāo)準(zhǔn)的C語(yǔ)言程序文件。文件有三部分組成:頭文件(*.h),主程序文件(Main)和回調(diào)函數(shù)(Callback),其結(jié)構(gòu)和C語(yǔ)言的結(jié)構(gòu)一致。</p><p><b>  3)*.uir文件</b></p><p>  它是用戶界

47、面文件,該文件為虛擬儀器的面板文件,類似VB或VC中的窗體文件。該文件中可包含儀器面板中的各類控件,如旋鈕,開(kāi)關(guān)等。每個(gè)控件有自己的屬性,如旋鈕的刻度等。同時(shí)控件還有事件,當(dāng)用鼠標(biāo)單擊控件或用鍵盤(pán)改變控件時(shí),單擊事件發(fā)生,調(diào)用相應(yīng)的回調(diào)函數(shù),完成相應(yīng)的儀器功能。</p><p><b>  4)*.h文件</b></p><p>  它是頭文件,與C語(yǔ)言中的*.h文件

48、結(jié)構(gòu)完全一致。在LabWindows/CVI中,*.h文件是自動(dòng)生成的,當(dāng)設(shè)計(jì)完*.uir文件后,保存*.uir文件時(shí)自動(dòng)生成*.h文件。</p><p><b>  5)*.fp文件</b></p><p>  它是代表已有的儀器文件或子文件。</p><p>  2.3.2 LabWindows/CVI軟件的特點(diǎn)</p>&l

49、t;p>  LabWindows/CVI將源代碼編輯,32位ANSI C編譯,鏈接,調(diào)試以及標(biāo)準(zhǔn)ANSI C庫(kù)集成在一個(gè)交互式開(kāi)發(fā)環(huán)境中。用戶可以快速地編寫(xiě),調(diào)試和修改虛擬儀器應(yīng)用程序,形成可執(zhí)行文件。使用LabWindows/CVI設(shè)計(jì)的虛擬儀器應(yīng)用程序可脫離LabWindows/CVI開(kāi)發(fā)環(huán)境獨(dú)立運(yùn)行,用戶最終看見(jiàn)的是和實(shí)際的硬件儀器相似的操作面板。和其他虛擬儀器開(kāi)發(fā)工具相比,LabWindows/CVI具有如下的特點(diǎn)。<

50、;/p><p>  由于LabWindows/CVI的編程技術(shù)主要采用事件驅(qū)動(dòng)與回調(diào)函數(shù)方式,編程方法簡(jiǎn)單易學(xué)。</p><p>  圖2-7 工程窗口的菜單</p><p>  運(yùn)用LabWindows/CVI進(jìn)行軟件設(shè)計(jì)師以工程文件為主體框架,包含了C語(yǔ)言源代碼文件(*.c),頭文件(*.h)和用戶界面文件(*.uir)三部分,全部軟件調(diào)試好后,可將工程文件編譯生成

51、可執(zhí)行文件(*.exe)。</p><p>  包含DAQ,GPIB,PXI,VXI,RE-232/485等各種儀器通訊總線標(biāo)準(zhǔn)的所有功能函數(shù)。不懂得總線標(biāo)準(zhǔn)的開(kāi)發(fā)者也能夠驅(qū)動(dòng)不同總線標(biāo)準(zhǔn)接口設(shè)備與儀器。</p><p>  圖2-8 用戶界面編輯窗口</p><p>  2.4 Q8384光譜儀</p><p>  Q8384是為評(píng)估DWD

52、M性能而開(kāi)發(fā)的一種光譜分析儀(如圖2-9所示)。它采用新型的單色儀表,用分散分光方式初次實(shí)現(xiàn)了10pm(0.01nm)波長(zhǎng)分辨率的光頻譜分析。由于其波長(zhǎng)精度高、動(dòng)態(tài)范圍寬,可以用來(lái)測(cè)量光傳送系統(tǒng)的光信號(hào)噪聲系數(shù)(OSNR)、光纖放大器的NF以及DWDM濾光器的波長(zhǎng)損耗等特性。此光譜儀有GPIB接口來(lái)連接計(jì)算機(jī)。</p><p>  圖2-9 Q8384光譜儀</p><p><b&

53、gt;  2.5 小結(jié) </b></p><p>  以上主要介紹了系統(tǒng)中最重要的兩部分GPIB總線及LabWindows/CVI軟件,設(shè)計(jì)好的控制軟件的可以通過(guò)GPIB總線向光譜儀發(fā)送控制指令,讀取數(shù)據(jù)等。</p><p>  3.系統(tǒng)的軟件設(shè)計(jì)方案</p><p>  軟件系統(tǒng)的整體設(shè)計(jì)包括軟件界面和源程序代碼兩部分。軟件是根據(jù)需求分析而設(shè)計(jì),對(duì)不同

54、的功能采用不同的模塊。軟件的模塊框圖如圖3-1所示。</p><p>  圖3-1 軟件模塊框圖</p><p>  3.1 軟件界面設(shè)計(jì)</p><p>  儀器的顯示面板被稱為面板。它模擬一臺(tái)實(shí)際儀器的面板,類似其它編程語(yǔ)言中的窗體,同時(shí)他也是一個(gè)對(duì)象。在面板中可以包括被稱為控件的旋鈕,按鈕,圖表以及其它控制器和指示器等對(duì)象。面板是虛擬儀器輸入和輸出數(shù)據(jù)的接口,

55、用戶可以直接用鼠標(biāo)或鍵盤(pán)輸入數(shù)據(jù)或改變儀器的功能。面板是可視的,有一個(gè)圖標(biāo)和它相對(duì)應(yīng)。軟件界面的設(shè)計(jì)可以根據(jù)模塊來(lái)設(shè)置軟件的界面。</p><p>  在LabWindows/CVI中,我們首先要?jiǎng)?chuàng)建一個(gè)面板,這就相當(dāng)于一臺(tái)實(shí)際儀器的面板,再在面板上設(shè)置控件,相當(dāng)于實(shí)際儀器面板上的各個(gè)按鈕,旋鈕等部件。LabWindows/CVI的用戶界面編輯窗口如圖2-8所示。要對(duì)面板的屬性進(jìn)行設(shè)置(如圖3-2)。</p

56、><p>  圖 3-2 面板屬性設(shè)置窗口</p><p>  在LabWindows/CVI中有各種各樣的控件供我們選擇。具體如圖3-3所示?;镜目丶愋陀形谋究?、列表框、樹(shù)控件、表格控件、定時(shí)器控件、命令按鈕控件、圖表控件和Splitter控件等。</p><p>  圖 3-3 LabWindows/CVI建立圖形控件的菜單</p><p&g

57、t;  Q8384光譜儀的前面板如圖2-9所示,前面板包括10部分:LCD顯示部分、功能鍵部分、光標(biāo)部分、測(cè)量部分、數(shù)據(jù)部分、顯示部分、數(shù)據(jù)輸出部分、GPIB部分、連接部分、電源開(kāi)關(guān)/磁盤(pán)驅(qū)動(dòng)部分。</p><p>  由于各個(gè)部分的按鍵被按下之后會(huì)在LCD右邊顯示出子鍵,按下與這些子鍵盤(pán)對(duì)應(yīng)的軟鍵就可以實(shí)現(xiàn)相應(yīng)的功能。例如:按下“CENTER”鍵之后會(huì)有“CENTER”,“PEAK”,“CURSOR”,“AUT

58、OPKC”子鍵出現(xiàn)。這就要求在設(shè)計(jì)用戶界面的時(shí)候除了要設(shè)計(jì)出前面板上的各個(gè)鍵之外,還要想辦法設(shè)計(jì)出與之對(duì)應(yīng)的子鍵。當(dāng)按下這主面板上的建之后會(huì)彈出另外一個(gè)面板,在這個(gè)面板上有與主鍵對(duì)應(yīng)的子鍵,具體功能實(shí)現(xiàn)方法見(jiàn)程序設(shè)計(jì)部分。</p><p>  最終生成的光譜儀控制軟件主面板如圖3-6所示。同時(shí)生成的還包括十幾個(gè)彈出式子面板。主面板上控件的分布包括了四部分。①. 參數(shù)設(shè)置的部分,在這部分中主要分布設(shè)置光譜儀參數(shù)的案

59、件,如:Center,Span,Aerage等。②. 掃描部分,在這部分中主要通過(guò)人工或定時(shí)掃描來(lái)讀取光譜儀顯示部分是數(shù)據(jù)。③. 顯示部分,包括兩個(gè)顯示窗口,一個(gè)用來(lái)顯示光譜儀中主顯示屏的圖形,另一個(gè)顯示窗口是為了分析某些數(shù)據(jù)而設(shè)計(jì)的,如波長(zhǎng)、帶寬等。④. 其它部分,主要包括了截圖、離線畫(huà)圖、連接設(shè)備等功能。</p><p>  圖 3-4 按鈕控件屬性設(shè)置窗口</p><p>  事件

60、是控件對(duì)象所產(chǎn)生的行動(dòng),例如,當(dāng)用鼠標(biāo)點(diǎn)擊控件時(shí),就有相應(yīng)的鼠標(biāo)點(diǎn)擊事件發(fā)生。在LabWindows/CVI中,當(dāng)事件發(fā)生時(shí)激發(fā)對(duì)應(yīng)的回調(diào)函數(shù),由函數(shù)完成對(duì)應(yīng)的功能。如圖3-5所示。</p><p>  回調(diào)函數(shù)實(shí)際上就是C語(yǔ)言中由用戶特殊定義的外部函數(shù),只不過(guò)函數(shù)的結(jié)構(gòu)有一些特殊規(guī)定。屬性和事件是對(duì)象的基本元素,在LabWindows/CVI中可以通過(guò)對(duì)象的這兩個(gè)元素來(lái)操縱盒控制對(duì)象。</p>&

61、lt;p><b>  作用于產(chǎn)生</b></p><p>  圖 3-5 說(shuō)明事件過(guò)程的框圖</p><p>  圖 3-6光譜儀控制軟件主界面</p><p>  3.2軟件功能模塊的實(shí)現(xiàn)</p><p>  3.2.1 主控模塊</p><p>  主控模塊控制整個(gè)軟件的運(yùn)行,包括創(chuàng)面

62、板的初始化、光譜儀的連接。</p><p>  在LabWindows/CVI中生成的主函數(shù)一般具有如圖3-7所示的結(jié)構(gòu)。主函數(shù)是程序的入口包含初始化運(yùn)行庫(kù),裝載用戶面板,刪除面板,關(guān)閉運(yùn)行時(shí)庫(kù)等操作。在這里的主函數(shù)如下:</p><p>  static int mainpnl;</p><p>  int main (int argc, char *argv[]

63、)</p><p>  {if (InitCVIRTE (0, argv, 0) == 0)return -1;初始化CVI運(yùn)行時(shí)序</p><p>  DisableBreakOnLibraryErrors ();</p><p>  if ((mainpnl = LoadPanel (0, "光譜儀.uir", MAINPNL)) <

64、 0)return -1;</p><p>  將用戶界面文件載入內(nèi)存中。函數(shù)原型為:</p><p>  DisplayPanel (mainpnl); 在屏幕上顯示面板</p><p>  SetCtrlAttribute (mainpnl, MAINPNL_TIMER, ATTR_ENABLED, 0);</p><p>  SetCt

65、rlAttribute (mainpnl, MAINPNL_TIMER_R, ATTR_ENABLED, 0);</p><p>  兩個(gè)SetCtrlAttribute的作用是設(shè)置兩個(gè)定時(shí)器不響應(yīng)控件的回調(diào)函。</p><p>  RunUserInterface ();運(yùn)行用戶界面</p><p>  DiscardPanel (mainpnl); 從內(nèi)存中刪除

66、面板及其子面板,并在屏幕中清除</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  圖3-7 主函數(shù)一般流程</p><p>  為了區(qū)分連接到計(jì)算機(jī)上的每個(gè)GPIB設(shè)備,我們要給每個(gè)設(shè)備設(shè)一個(gè)地址,相當(dāng)于網(wǎng)絡(luò)中的IP地址,當(dāng)然這里的地

67、址沒(méi)有IP那么復(fù)雜,一個(gè)整數(shù)就可以代表。我們可以用一個(gè)Numeric控件來(lái)輸入要連接的GPIB設(shè)備地址,再通過(guò)函數(shù)int GetCtrlVal (int panelHandle, int controlID, void *value); panelHandle為面板句柄,該項(xiàng)是在函數(shù)loadPanel里設(shè)置的;Control_ID;*value控件的值,該數(shù)據(jù)類型與控件本身的數(shù)據(jù)類型一致。讀取地址到變量中。</p><

68、;p>  在與GPIB設(shè)備通信之前必須首先打開(kāi)GPIB設(shè)備,這包括OpenDev,ibfind和ibdev函數(shù)。Ibfind函數(shù)查找相應(yīng)的GPIB板和設(shè)備,比如輸入“gpib0”表示GPIB0,返回設(shè)備的唯一描述符;打開(kāi)設(shè)備也可以通過(guò)ibdev函數(shù),該函數(shù)可以設(shè)置GPIB的參數(shù),函數(shù)原型為:</p><p>  Int ibdev(int Board_Idex, int Primary_Adreess,in

69、t Secondary_Address,e</p><p>  Int Timeout_Value,int END_Message,int EOS_Character);</p><p>  在這里我們將這個(gè)函數(shù)設(shè)置如下:</p><p>  device = ibdev (0, address, NO_SAD, T10s, 1, 0); </p>

70、<p>  其中的返回值為為GPIB設(shè)備的標(biāo)識(shí)符。向GPIB設(shè)備讀/寫(xiě)數(shù)據(jù)都用這個(gè)標(biāo)識(shí)符。 </p><p>  向GPIB設(shè)備發(fā)送指令,我們是通過(guò)函數(shù)ibwrt,具體函數(shù)為:</p><p>  ibwrt(device,"*IDN?",strlen("*IDN?")); </p><p>  device是被

71、發(fā)送命令的設(shè)備的地址,發(fā)送命令與具體的儀器有關(guān),可以通過(guò)文本框輸入。一般情況下所以在GPIB儀器都會(huì)支持"*IDN?"的命令,向儀器發(fā)送檢查ID名的命令,則儀器輸出自己的ID號(hào)。這里"*IDN?"就是一個(gè)命令字符串。strlen("*IDN?")的作用是統(tǒng)計(jì)字符串中字符個(gè)數(shù)。</p><p>  一般在調(diào)用完一個(gè)函數(shù)之后要檢查一些狀態(tài)信息,check_e

72、rror()函數(shù)用來(lái)檢測(cè)在設(shè)備連接狀態(tài)下的運(yùn)行情況。具體函數(shù)如下:</p><p>  void check_error(void) </p><p>  { if (ibsta & 0x8000)</p><p>  { SetCtrlVal (mainpnl, MAINPNL_STATUS, 1);</p><

73、p>  SetCtrlVal (mainpnl, MAINPNL_ERR, iberr);</p><p><b>  }else</b></p><p>  { SetCtrlVal (mainpnl, MAINPNL_STATUS, 0);</p><p>  SetCtrlVal (mainpnl, MAINPNL_ERR, 0

74、);</p><p><b>  }}</b></p><p>  如果ibsta & 0x8000為1標(biāo)明運(yùn)行狀態(tài)出錯(cuò),這是點(diǎn)亮LED燈變紅色提示出錯(cuò),同時(shí)在控件Error Code中設(shè)置信息“iberr”,作為提示。如果ibsta & 0x8000不為1,運(yùn)行狀態(tài)正常,這事LED燈不變色,控件Error Code中設(shè)置的信息為0。整個(gè)連接流程如圖3

75、-8所示。</p><p><b>  否</b></p><p><b>  是</b></p><p>  圖 3-8 連接設(shè)備流程圖</p><p>  3.2.2 數(shù)據(jù)采集模塊</p><p>  數(shù)據(jù)采樣模塊控制信號(hào)的采集過(guò)程,按照用戶設(shè)置的采樣速率,采集卡定時(shí)對(duì)信

76、號(hào)進(jìn)行采樣,并可以將采集的數(shù)據(jù)進(jìn)行顯示并存儲(chǔ)到計(jì)算機(jī)中。主要包括三個(gè)子模塊:</p><p>  ① 采樣參數(shù)設(shè)置模塊 本模塊的主要功能是設(shè)置光譜儀的各種參數(shù),參數(shù)設(shè)置按鍵在面板上的分布如圖3-9所示。在講具體的參數(shù)設(shè)置之前先介紹彈出式子面板的設(shè)計(jì)方案。</p><p>  圖 3-9 軟件主面板上參數(shù)設(shè)置部分</p><p>  前面已經(jīng)提到,因?yàn)楣庾V儀前面板上很

77、多按鍵被按下之后會(huì)有很多子鍵,這就要求設(shè)計(jì)的時(shí)候能有個(gè)彈出式的子面板,按下主面板上的按鍵之后會(huì)彈出相應(yīng)的子面板,與主面板上的按鍵相應(yīng)的子鍵會(huì)出現(xiàn)在這個(gè)子面板上。</p><p>  剛開(kāi)始設(shè)計(jì)這個(gè)功能一直以為用的是彈出式面板那些函數(shù)就可以實(shí)現(xiàn),如:MessagePopup,Generic Message Popup,Prompt Popup等函數(shù),但是最后發(fā)現(xiàn)這樣是不可行的,因?yàn)檫@些彈出式面板中的按鍵的數(shù)目都是固

78、定的,根本不符合我們的要求。最后設(shè)計(jì)了設(shè)計(jì)子面板,再初始化。與主面板不同的是,子面板的初始化需要一個(gè)響應(yīng)事件,或者說(shuō)主面板上的鍵有一個(gè)對(duì)應(yīng)的回調(diào)函數(shù),用這個(gè)回調(diào)函數(shù)來(lái)初始化子面板。下面以CENTER鍵的回調(diào)函數(shù)為例子來(lái)進(jìn)行說(shuō)明,程序如下:</p><p>  int CVICALLBACK Center (int panel, int control, int event,</p><p>

79、;  void *callbackData, int eventData1, int eventData2)</p><p><b>  { </b></p><p>  char read_center[200];</p><p>  if(event==EVENT_COMMIT)</p><p>  { if(

80、(CenterPnl = LoadPanel (0, "光譜儀.uir", CENTERPNL)) < 0 )</p><p>  return -1; </p><p>  { HidePanel (discard_panel); </p><p>  discard_panel= CenterPnl;</p>&

81、lt;p>  DisplayPanel(CenterPnl); </p><p><b>  } }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  這就是CRNTER鍵的相應(yīng)回調(diào)函數(shù),和主函數(shù)中

82、的LoadPanel函數(shù)一樣,這個(gè)函數(shù)中的LoadPanel函數(shù)也是將界面裝載到內(nèi)存中,只不過(guò)這次裝載的是這個(gè)子面板。HidePanel函數(shù)的目的是隱藏上次出現(xiàn)的子面板。discard_panel就是上次出現(xiàn)的面板的句柄。discard_panel= CenterPnl的作用是將這次出現(xiàn)的面板的句柄賦給discard_panel,供下次使用。DisplayPanel(CenterPnl)函數(shù)的作用和在主函數(shù)中一樣,在這里是將子面板顯示到

83、屏幕上。</p><p>  參數(shù)設(shè)置部分鍵比較多,但每個(gè)設(shè)置的方式都差不多。在這里我們介紹CENTER設(shè)置部分。</p><p>  CENTER面板 如圖3-10所示CRNTER鍵用于設(shè)置波長(zhǎng)或者頻率,單位選擇控件用于選擇參數(shù)的單位,其左邊的控件輸入數(shù)據(jù)。兩者與”CEN”命令結(jié)合之后可以構(gòu)成一個(gè)完整的命令發(fā)送至儀器。PEAK鍵通過(guò)回調(diào)函數(shù)將峰值波長(zhǎng)移動(dòng)至中心,CURSOR將光標(biāo)移到至

84、中心。 AUTO_PKC功能是通過(guò)Binary Switch控件完成的,就是開(kāi)與關(guān)功能的轉(zhuǎn)換。</p><p>  圖3-10 CENTER面板</p><p>  ② 數(shù)據(jù)采集與保存 GPIB卡本身就是一個(gè)數(shù)據(jù)采集卡,所以數(shù)據(jù)采集的功能是最重要的。這里做詳細(xì)的敘述。前面已經(jīng)說(shuō)明了怎樣連接GPIB設(shè)備,成功連接完設(shè)備之后就可以向設(shè)備發(fā)送指令,讀取其中的數(shù)據(jù)。</p><

85、;p>  首先向GPIB設(shè)備發(fā)送指令,我們是通過(guò)函數(shù)ibwrt,具體函數(shù)為:</p><p>  ibwrt(device,"*IDN?",strlen("*IDN?")); </p><p>  device是被發(fā)送命令的設(shè)備的地址,發(fā)送命令與具體的儀器有關(guān),可以通過(guò)文本框輸入。一般情況下所有GPIB儀器都會(huì)支持"*IDN?&qu

86、ot;命令,向儀器發(fā)送檢查ID名的命令,則儀器輸出自己的ID號(hào)。這里"*IDN?"就是一個(gè)命令字符串。strlen("*IDN?")的作用是統(tǒng)計(jì)字符串中字符個(gè)數(shù)。</p><p>  從GPIB設(shè)備讀取數(shù)據(jù),這里用的函數(shù)是:ibrd,具體函數(shù)為:</p><p>  ibrd(device,read_center,200);</p>&

87、lt;p>  和發(fā)送指令的函數(shù)一樣,device是設(shè)備的地址,read_cente是事先定義好的字符串?dāng)?shù)組,從設(shè)備讀出來(lái)的數(shù)據(jù)就保持在這個(gè)字符串中,200是該字符串的長(zhǎng)度。這里讀取的數(shù)據(jù)都是指數(shù)形式的,所以要進(jìn)行進(jìn)一步的處理。</p><p>  表 3.1 從Q8384光譜儀讀出的數(shù)據(jù)的一般格式</p><p>  如表3.1所示,從Q8384光譜儀讀出的數(shù)據(jù)的一般格式包括四個(gè)部

88、分:</p><p>  Header頭字母部分,每個(gè)命令不同所以頭字母也就不同,用來(lái)區(qū)分不同的數(shù)據(jù),長(zhǎng)度為4,處理數(shù)據(jù)的時(shí)候應(yīng)該將頭字母刪除。</p><p>  Data數(shù)據(jù)部分,這部分?jǐn)?shù)據(jù)一般是指數(shù)形式的,這部分是我們要提取的。</p><p>  DS分隔符,一般用的都是逗號(hào)來(lái)分隔數(shù)據(jù)。</p><p>  Terminetor部分,

89、數(shù)據(jù)終結(jié)符號(hào)。</p><p>  以上格式是從光譜儀讀出的一般格式,每個(gè)命令讀出的數(shù)據(jù)還有一點(diǎn)區(qū)別,所以處理</p><p>  數(shù)據(jù)的時(shí)候要具體情況具體分析。我們這里主要研究三種數(shù)據(jù):1 顯示面板上X,Y軸的數(shù)據(jù),2,OSW 這個(gè)命令讀出來(lái)的數(shù)據(jù)包括中心波長(zhǎng),帶寬和峰值的個(gè)數(shù)。3,OSD這個(gè)命令讀出的是峰值波長(zhǎng)和和功率。每種數(shù)據(jù)輸出的形式不同,所以要采取不同的方式去處理。</p&

90、gt;<p> ?。?)顯示面板上數(shù)據(jù)讀取。X軸數(shù)據(jù)的讀出命令是“OSD1”,Y軸數(shù)據(jù)的讀出命令是“OSD0”。X軸數(shù)據(jù)的讀出如下:</p><p>  LMUM +1.523200E-06,+1.523300E-06,+1.523400E-06,+1.523500E-06 ......</p><p>  后面的數(shù)據(jù)比較多,這里只列出一部分來(lái)說(shuō)明問(wèn)題。對(duì)這個(gè)原始的輸出數(shù)據(jù)我

91、們要分布處理,首先應(yīng)該先刪除前面四個(gè)標(biāo)識(shí)符字母。這里使用的自己定義的函數(shù)void cut(char *s, char *r),函數(shù)原型如下:</p><p>  void cut(char *s, char *r)</p><p>  {char mid[100]="";</p><p>  int m=0; int len=0;int i;&

92、lt;/p><p>  len=strlen(s);</p><p>  for(i=4;i<=len;i++)</p><p><b>  {</b></p><p>  mid[m]=s[i];</p><p><b>  m++;}</b></p>&l

93、t;p>  strcpy(r,mid);}</p><p>  通過(guò)這個(gè)函數(shù)可以刪除前四個(gè)字母。具體過(guò)程是讀出X軸數(shù)據(jù)的原始字符串長(zhǎng)度len,刪去原始字符串的前四個(gè)字符,從原始字符串的第五個(gè)數(shù)據(jù)開(kāi)始讀取,將讀取的值賦給另外一個(gè)字符串,直到讀完原始字符串的所有值。這樣就可以實(shí)現(xiàn)刪除前四個(gè)字符的目的。</p><p>  從帶有逗號(hào)的字符串中提取數(shù)字值需要另外一個(gè)函數(shù)。這里我們定義為:&

94、lt;/p><p>  long x_seperate(char *ss,double *ff,long len_x) 具體函數(shù)如下:</p><p>  long x_seperate(char *ss,double *ff,long len_x) </p><p>  { int i=0; int len_s; char mid[20000]=&quo

95、t; ";int m=0;</p><p>  len_s=strlen(ss);len_x=0;</p><p>  for(i=5;i<=len_s;i++)</p><p>  { if(ss[i]==','||i==len_s-1)</p><p>  { ff[len_x]=atof(mid)*100

96、0000;</p><p>  if(ff[len_x]/1000>=1)</p><p>  {ff[len_x]/=1000;}</p><p><b>  len_x+=1;</b></p><p><b>  m=0;}</b></p><p><b&g

97、t;  else</b></p><p>  { mid[m]=ss[i];</p><p><b>  m+=1;</b></p><p><b>  } }</b></p><p>  return len_x;</p><p><b>  }<

98、;/b></p><p>  這個(gè)函數(shù)的具體過(guò)程是從字符串的第一值開(kāi)始給另外一個(gè)字符串賦值,當(dāng)遇到逗號(hào)的時(shí)候不給另外一個(gè)字符串賦值,乘1000000的目的是轉(zhuǎn)換單位,去除后面的指數(shù)。這樣最終得到的數(shù)據(jù)就是一個(gè)只有X數(shù)據(jù)的字符串,在作圖的時(shí)候就很容易了。</p><p>  進(jìn)一步處理 否 </p><

99、;p>  是 </p><p>  圖3-11數(shù)據(jù)讀取流程圖</p><p>  Y軸數(shù)據(jù)的處理和X軸的數(shù)據(jù)是一樣的,唯一的不同之處是Y軸的數(shù)據(jù)在進(jìn)行處理的時(shí)候不需要乘1000000。len_x是最終的數(shù)據(jù)個(gè)數(shù)。</p><p>  整個(gè)過(guò)程的流程圖如圖3-11所示。</p><p>  (2)波長(zhǎng),帶寬

100、等數(shù)據(jù)采集。 “OSW?”命令讀出來(lái)的數(shù)據(jù)和X,Y軸的數(shù)據(jù)有所不同,是如下形式:</p><p>  LMCN+1.551535E-06,LMHW+24.01663E-09,NOSP0002</p><p>  這里需要用分解字符串函數(shù),先將三個(gè)數(shù)據(jù)以逗號(hào)為標(biāo)志分開(kāi),然后再刪除每個(gè)數(shù)據(jù)前面的標(biāo)識(shí)符,乘上相應(yīng)的倍數(shù)化簡(jiǎn)指數(shù)。</p><p>  分解字符串的函數(shù)形式如

101、下:</p><p>  void r_tran(char *s,char *r,char *dr,char *pk)</p><p>  { char *p;</p><p>  p=strtok(s,",");</p><p><b>  if(p)</b></p>&l

102、t;p>  strcpy(r,p);</p><p>  p=strtok(NULL,",");</p><p><b>  if(p)</b></p><p>  strcpy(dr,p);</p><p>  p=strtok(NULL,",");</p>

103、<p><b>  if(p)</b></p><p>  strcpy(pk,p);</p><p><b>  }</b></p><p>  函數(shù)中的strtok(s,",")為分解字符串函數(shù), s為要分解的字符串, 逗號(hào)為分隔符字符串。首次調(diào)用時(shí),s指向要分解的字符串,之后再次調(diào)用要把

104、s設(shè)成NULL。strtok在s中查找包含在逗號(hào)中的字符并用NULL('')來(lái)替換,直到找遍整個(gè)字符串。返回值:從s開(kāi)頭開(kāi)始的一個(gè)個(gè)被分割的串。當(dāng)沒(méi)有被分割的串時(shí)則返回NULL。所有逗號(hào)中包含的字符都會(huì)被濾掉,并將被濾掉的地方設(shè)為一處分割的節(jié)點(diǎn)。</p><p>  分解完字符串之后中心波長(zhǎng)LMCN+1.551535E-06的值賦給變量r,帶寬的值LMHW+24.01663E-09賦給變量dr,峰

105、值個(gè)數(shù)NOSP0002賦給變量pk,然后在進(jìn)一步處理用cut(char *s, char *r)函數(shù)去掉前面無(wú)用的四個(gè)字符串。對(duì)中心波長(zhǎng)和帶寬都要乘1000000000,可以去除指數(shù)。</p><p> ?。?)中心波長(zhǎng),功率。 “OPK”命令讀出的數(shù)據(jù)形式如下:</p><p>  LMPK+1.558200E-06,LVPK-7.4867E+00</p><p>

106、;  因?yàn)樽址容^短,只有11個(gè)值,所以處理數(shù)據(jù)也可以簡(jiǎn)單的進(jìn)行。直接將第六個(gè)值賦給變量lmpk,再乘以1000000000。將第十個(gè)值賦給變量lvpk。所以這個(gè)數(shù)據(jù)是比較容易處理的。</p><p><b> ?。?)數(shù)據(jù)的保存 </b></p><p>  保存數(shù)據(jù)要有文件名,在主面板上設(shè)置一個(gè)控件,用來(lái)輸入要保存的文件名。然后用GetCtrlVal函數(shù)獲取這個(gè)

107、文件名。文件名不能為空,所以我們要判斷文件名是否為空,如果為空,則用MessagePopup ("提示?。?!","文件名不能為空!")來(lái)提示文件名不能為空。因?yàn)楸4娴臄?shù)據(jù)有X軸,Y軸等的數(shù)據(jù),為了區(qū)分這兩組數(shù)據(jù),可以用strcat函數(shù),函數(shù)原型為:char*strcat(char*str1, char*str2);功能是把字符串str2接到str1后面,str1后面的‘\0’被取消。我們可以通過(guò)

108、添加不同的str2來(lái)區(qū)分X軸,Y軸等數(shù)據(jù)。在這里我們還將用到打開(kāi)文件和將向緩沖區(qū)中的字符串寫(xiě)入文件中。文件的保存為T(mén)XT格式。</p><p><b>  打開(kāi)文件函數(shù):</b></p><p>  int OpenFile (char *fileName, int read/writeMode, int action, int fileType);</p>

109、;<p>  用seperate函數(shù)分解之后的有效數(shù)字比較多,為了方便實(shí)驗(yàn)員分析數(shù)據(jù),我們可以將其的有效數(shù)字減少,這里可以用sprintf(y,"%.3f",data_y[i]); data_y[i]是將要被化簡(jiǎn)的數(shù)據(jù),"%.3f"是要被化簡(jiǎn)的格式,y是用來(lái)保存化簡(jiǎn)之后的數(shù)據(jù)。</p><p>  為了便于保存之后能更好的再次分析這些數(shù)據(jù),我們?cè)诒4娴臅r(shí)候?qū)Σ?/p>

110、同的數(shù)據(jù)也采取了不同的方式。對(duì)X,Y軸的數(shù)據(jù),保存到TXT文檔中時(shí)是每行的行開(kāi)頭保存一個(gè)數(shù)據(jù),即在每個(gè)數(shù)據(jù)后面加一個(gè)換行符“\n”。然后用WriteFile函數(shù)將這些數(shù)據(jù)存之相應(yīng)的文檔。</p><p>  OSW?和OPK命令讀出的數(shù)據(jù)包括峰值波長(zhǎng),帶寬,功率等,為了便于便于對(duì)比分析,我們將這些放到同一個(gè)TXT文檔中,這樣便于觀察和分析數(shù)據(jù)。具體方法是將每次采集到的波長(zhǎng),帶寬,峰值功率等放同一行。 在一行輸入第

111、一個(gè)數(shù)據(jù)之后在其后面加字符“/t”,之后接著以同樣的方式輸入第二個(gè)數(shù)據(jù),第五個(gè)數(shù)據(jù)輸完了之后在后面加換行符“\n”,在下一行輸入下一組數(shù)據(jù)。</p><p> ?、?數(shù)據(jù)顯示部分 數(shù)據(jù)顯示包括圖表的繪制和單獨(dú)數(shù)據(jù)的顯示</p><p>  繪圖函數(shù)有好幾種,如PlotXY繪制x,y軸數(shù)組的曲線圖,PlotX沿Y軸坐標(biāo)繪制X軸數(shù)組的曲線圖,PlotY沿X軸坐標(biāo)繪制Y軸數(shù)組的曲線圖。在這里我們

112、要用PlotXY和PlotY兩個(gè)函數(shù)。</p><p>  PlotXY函數(shù)的原型如下:</p><p>  int PlotXY (int panelHandle, int controlID, void *xArray, void *yArray, int numberOfPoints, int xDataType, int yDataType, int plotStyle, int

113、pointStyle, int lineStyle, int pointFrequency, int color);</p><p>  我在程序中使用的函數(shù)設(shè)置入下:</p><p>  PlotXY(mainpnl,MAINPNL_GRAPH,data_x,data_y,read_len_y,VAL_DOUBLE,VAL_DOUBLE,VAL_THIN_LINE,VAL_DOTTED_

114、SOLID_SQUARE,VAL_SOLID,VAL_CONNECTED_POINTS ,VAL_RED);</p><p>  PlotY函數(shù)的原型如下:</p><p>  int PlotY (int panelHandle, int controlID, void *yArray, int numberOfPoints, int yDataType, int plotStyle,

115、int pointStyle, int lineStyle, int pointFrequency, int color);</p><p>  函數(shù)中的參數(shù)和PlotXY中的是一樣的。程序中的函數(shù)設(shè)置如下:</p><p>  PlotY(mainpnl,MAINPNL_R_GRAPH,cmp_r,r_num,VAL_DOUBLE,VAL_THIN_LINE,VAL_SOLID_SQUA

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論