基于網(wǎng)絡(luò)虛擬儀器測(cè)試系統(tǒng)的設(shè)計(jì)說(shuō)明_第1頁(yè)
基于網(wǎng)絡(luò)虛擬儀器測(cè)試系統(tǒng)的設(shè)計(jì)說(shuō)明_第2頁(yè)
基于網(wǎng)絡(luò)虛擬儀器測(cè)試系統(tǒng)的設(shè)計(jì)說(shuō)明_第3頁(yè)
基于網(wǎng)絡(luò)虛擬儀器測(cè)試系統(tǒng)的設(shè)計(jì)說(shuō)明_第4頁(yè)
基于網(wǎng)絡(luò)虛擬儀器測(cè)試系統(tǒng)的設(shè)計(jì)說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩51頁(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、 . . . 引 言著名科學(xué)家門捷列夫說(shuō):“沒(méi)有測(cè)量,就沒(méi)有科學(xué)”。測(cè)量科學(xué)的先驅(qū)凱爾文又說(shuō),一個(gè)事物你如果能夠測(cè)量它,并且能用數(shù)字來(lái)表達(dá)它,你對(duì)它就有了深刻的了解;但如果你不知道如何測(cè)量它,且不能用數(shù)字表達(dá)它,那么你的知識(shí)可能就是貧瘠的,是不令人滿意的。測(cè)量是知識(shí)的起點(diǎn),也是你進(jìn)入科學(xué)殿堂的開端。1 基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)1.1 概述隨著計(jì)算機(jī)技術(shù)、通信技術(shù)與儀器技術(shù)的不斷發(fā)展,使得虛擬儀器得到了進(jìn)一步發(fā)展,虛擬儀器將計(jì)算機(jī)資源與儀器硬件、數(shù)字信號(hào)處理技術(shù)結(jié)合,把廠家定義儀器功能的方式轉(zhuǎn)變?yōu)橛捎脩糇约憾x儀器功能。用戶可根據(jù)測(cè)試的需要,自己設(shè)計(jì)所需要的儀器系統(tǒng),利用一種或多種功能的通用模

2、塊,調(diào)用不同功能的軟件模塊,組成不同的儀器功能。在虛擬儀器中,計(jì)算機(jī)成為儀器的一部分,使得計(jì)算機(jī)可以得到充分發(fā)揮。除了儀器的輸入、輸出、數(shù)據(jù)處理分析、結(jié)果顯示由計(jì)算機(jī)完成外,還可組成計(jì)算機(jī)網(wǎng)絡(luò)。一個(gè)大的復(fù)雜的測(cè)試系統(tǒng)往往系統(tǒng)的測(cè)量、輸入、輸出、結(jié)果分析分布在不同的地理位置,僅用一臺(tái)計(jì)算機(jī)并不能勝任測(cè)試任務(wù),需要由分布在不同地理位置的若干計(jì)算機(jī)共同完成整個(gè)測(cè)試任務(wù)。計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、總線技術(shù)的發(fā)展,乃至Internet網(wǎng)的發(fā)展拓展了虛擬儀器測(cè)試系統(tǒng)的應(yīng)用圍。利用網(wǎng)絡(luò)技術(shù)將分散在不同地理位置不同功能的測(cè)試設(shè)備聯(lián)系在一起,使昂貴的硬件設(shè)備、軟件在網(wǎng)絡(luò)得以共享,減少了設(shè)備重復(fù)投資。一臺(tái)計(jì)算機(jī)采集的數(shù)據(jù)可

3、以立即傳輸?shù)搅硪慌_(tái)處理分析機(jī)上進(jìn)行處理分析,分析后的結(jié)果可被執(zhí)行機(jī)構(gòu)、設(shè)計(jì)師查詢使用,使數(shù)據(jù)采集、傳輸、處理分析成為一體,容易實(shí)現(xiàn)實(shí)時(shí)采集、實(shí)時(shí)監(jiān)測(cè)。重要的數(shù)據(jù)實(shí)行多機(jī)備份,提高了系統(tǒng)的可靠性。對(duì)于有些危險(xiǎn)的、環(huán)境惡劣的不適合人員操作的數(shù)據(jù)采集工作可實(shí)行遠(yuǎn)程采集,將采集的數(shù)據(jù)放在服務(wù)器中供用戶使用。1.2 虛擬儀器網(wǎng)絡(luò)測(cè)試系統(tǒng)設(shè)計(jì)虛擬儀器網(wǎng)絡(luò)測(cè)試系統(tǒng)的設(shè)計(jì)需從虛擬儀器和網(wǎng)絡(luò)技術(shù)兩方面考慮。1.2.1虛擬儀器部分分析測(cè)試系統(tǒng)的要求和系統(tǒng)的功能,根據(jù)系統(tǒng)功能的要求,在軟件和硬件之間進(jìn)行優(yōu)化選擇,從而確定儀器所必需的硬件模塊,以便用最少的模塊實(shí)現(xiàn)儀器的最佳功能。根據(jù)應(yīng)用情況與實(shí)際的條件選擇基于計(jì)算機(jī)

4、的虛擬儀器的儀器模塊(VXI總線、PCI總線、PXI總線、GPIB儀器),包括示波器、信號(hào)調(diào)理電路、萬(wàn)用表、信號(hào)源等模塊。硬件確定以后,主要確定軟件功能模塊,哪些儀器功能由軟件實(shí)現(xiàn),將軟件功能劃分為相對(duì)獨(dú)立的模塊。然后選擇易于編寫的圖形化的軟件平臺(tái)。Virsual C+6.0是一種面向?qū)ο蟮耐ㄓ玫墓δ軓?qiáng)大的程序設(shè)計(jì)語(yǔ)言,提供集成性與可視化用戶界面,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,它具有底層操作功能,也具有數(shù)據(jù)庫(kù)開發(fā)功能,編程靈活,因此也是編程人員常選用的編程語(yǔ)言,我也用VC+編寫了虛擬儀器平臺(tái),可以組建虛擬信號(hào)發(fā)生器、虛擬示波器、數(shù)據(jù)采集。1.2.2網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)根據(jù)測(cè)試系統(tǒng)各部分所處的地理位置和覆

5、蓋的圍不同可構(gòu)建局域網(wǎng)、城域網(wǎng)、廣域網(wǎng)。一個(gè)大的復(fù)雜的測(cè)試系統(tǒng)由各個(gè)子系統(tǒng)組成,每個(gè)子系統(tǒng)一般在一個(gè)單位的小圍,因此可建立局域網(wǎng),然后將每個(gè)局域網(wǎng)互聯(lián),形成企業(yè)測(cè)量系統(tǒng)。由于Internet網(wǎng)的發(fā)展,一些公用的數(shù)據(jù)還可以通過(guò)Internet網(wǎng)將測(cè)量數(shù)據(jù)發(fā)布到網(wǎng)上供網(wǎng)上用戶使用,可建立測(cè)量發(fā)布系統(tǒng)。對(duì)于有些危險(xiǎn)的、環(huán)境惡劣的不適合人員操作的數(shù)據(jù)采集工作可實(shí)行遠(yuǎn)程采集。由于網(wǎng)絡(luò)測(cè)試中每個(gè)測(cè)試點(diǎn)擔(dān)任不同的測(cè)試任務(wù),為了減少不必要的重復(fù)工作,通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)資源共享,同時(shí)要減輕服務(wù)器與各節(jié)點(diǎn)的數(shù)據(jù)傳輸,提高網(wǎng)絡(luò)系統(tǒng)性能,因此服務(wù)器和各個(gè)節(jié)點(diǎn)以與各節(jié)點(diǎn)之間協(xié)同工作顯得尤為重要?;贑lient/Server

6、模式的分布式計(jì)算、分布式處理系統(tǒng)是解決這個(gè)問(wèn)題的最好選擇?;贑/S模式,將系統(tǒng)功能分解到各個(gè)節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)有機(jī)配合,用戶在自己的終端上就可以觀察到從服務(wù)器中獲取的數(shù)據(jù)和處理結(jié)果。在C/S中,分客戶機(jī)(Client)程序和服務(wù)器(Sewer)程序??蛻魴C(jī)程序和服務(wù)器程序可以運(yùn)行在一臺(tái)計(jì)算機(jī)中,也可運(yùn)行在兩臺(tái)或多臺(tái)計(jì)算機(jī)中,Client程序與Server程序相互協(xié)同處理,一個(gè)測(cè)試系統(tǒng)由一個(gè)或承擔(dān)不同任務(wù)的多個(gè)客戶機(jī)與一個(gè)或多個(gè)服務(wù)器組成??蛻魴C(jī)是用戶與系統(tǒng)的交互接口,提供一個(gè)用戶界面,完成用戶命令與數(shù)據(jù)的輸入,顯示服務(wù)器送回的結(jié)果。服務(wù)器接受客戶機(jī)提出的申請(qǐng),完成所要求的操作并將結(jié)果傳送給用戶。

7、在一個(gè)測(cè)試系統(tǒng)中,根據(jù)任務(wù)不同,每個(gè)服務(wù)器和客戶機(jī)承擔(dān)的任務(wù)也不同,例如可劃分為采集、數(shù)據(jù)處理分析、輸出、監(jiān)控。一臺(tái)計(jì)算機(jī)采集外部數(shù)據(jù),將采集的數(shù)據(jù)存儲(chǔ)并傳輸給另一臺(tái)計(jì)算機(jī),它就是服務(wù)器,另外它又需要得到遠(yuǎn)地計(jì)算機(jī)的數(shù)據(jù),這時(shí)它又成為客戶機(jī)。C/S模式是一種開放式系統(tǒng)的協(xié)同處理工作模式。設(shè)計(jì)C/S模式時(shí)應(yīng)首先分析系統(tǒng)所要達(dá)到的指標(biāo)和功能要求,在此基礎(chǔ)上,把系統(tǒng)劃分為各個(gè)相對(duì)獨(dú)立的模塊,分配到各個(gè)計(jì)算機(jī)上,每個(gè)計(jì)算機(jī)執(zhí)行不同的功能,能在客戶機(jī)上完成的獨(dú)立任務(wù)就不要放在服務(wù)器上,以減低服務(wù)器的工作量。第二,要保證數(shù)據(jù)在服務(wù)器和客戶機(jī)、客戶機(jī)間可靠的傳輸。設(shè)計(jì)時(shí)需考慮網(wǎng)絡(luò)的帶寬要滿足傳輸要求,并減少

8、網(wǎng)絡(luò)數(shù)據(jù)傳輸量。Agilent IO庫(kù)允許通過(guò)LAN進(jìn)行儀器的控制操作。使用標(biāo)準(zhǔn)的LAN接口,計(jì)算機(jī)可以不要特殊的儀器接口就可以實(shí)現(xiàn)對(duì)儀器的控制。LAN軟件使用計(jì)算機(jī)的C/S模式,這種模式使得應(yīng)用程序(客戶)可以不用執(zhí)行所有的工作,相反,客戶機(jī)可以向另一臺(tái)儀器(服務(wù)器)發(fā)出某種請(qǐng)求。與可控儀器或器件相連的LAN服務(wù)器,一旦完成儀器或器件的請(qǐng)求,LAN服務(wù)器會(huì)反饋信息給客戶機(jī)。反饋的信息包括數(shù)據(jù)和狀態(tài)等表明操作是否成功的信息。例如網(wǎng)關(guān)在LAN軟件(客戶機(jī)支持)和器件支持的儀器接口之間扮演一個(gè)服務(wù)器的角色?;窘Y(jié)構(gòu)如圖:圖11LAN軟件結(jié)構(gòu):該結(jié)構(gòu)中,包含了LAN客戶軟件和LAN軟件(TCP/IP

9、)(用于訪問(wèn)服務(wù)器gateway)。網(wǎng)關(guān)包含了LAN服務(wù)器軟件,LAN(TCP/IP)軟件以與用于和客戶機(jī)通訊和控制儀器的儀器驅(qū)動(dòng)軟件。圖121.2.3軟件設(shè)計(jì)與硬件結(jié)構(gòu)相對(duì)應(yīng),軟件結(jié)構(gòu)可分為網(wǎng)絡(luò)測(cè)控系統(tǒng)控制主模塊,是系統(tǒng)控制的中樞,連接和控制各子模塊;虛擬信號(hào)源、虛擬萬(wàn)用表和虛擬示波器等模塊,是控制相應(yīng)臺(tái)式儀器,使其完全能處于遠(yuǎn)程虛擬控制狀態(tài),給測(cè)控對(duì)象提供激勵(lì)信號(hào),并監(jiān)視受控對(duì)象輸出特性變化;虛擬VXI儀器和信號(hào)調(diào)理模塊是控制SCXI和VXI硬件模塊儀器進(jìn)行模擬量數(shù)據(jù)采集與開關(guān)量對(duì)象控制,包括數(shù)據(jù)處理;圖象采集模塊,包括采集現(xiàn)場(chǎng)景物視頻圖象和有形對(duì)象的圖象采集.與圖象處理;網(wǎng)絡(luò)通信模塊承擔(dān)

10、不同總線模塊與主模塊之間的數(shù)據(jù)傳輸與通信,也是實(shí)現(xiàn)本測(cè)控系統(tǒng)與遠(yuǎn)程用戶之間的控制與數(shù)據(jù)傳送。每個(gè)虛擬儀器模塊部都封裝了對(duì)應(yīng)儀器狀態(tài)控制命令集、數(shù)據(jù)采集命令集、數(shù)據(jù)處理模型以與通信協(xié)議等處理子模塊。下面的第三章至第五章介紹的就是函數(shù)信號(hào)發(fā)生器、示波器以與萬(wàn)用表模塊的設(shè)計(jì)和具體的編程。下面讓我們先來(lái)了解一下VC+6.0開發(fā)工具和Agilent VISA庫(kù)。2 開發(fā)工具和Agilent VISA庫(kù)介紹 Visual C+6.0是一套功能強(qiáng)大面向?qū)ο蟮那揖哂屑删庉嬈髋c編譯器的編程語(yǔ)言開發(fā)平臺(tái)。今天我們所使用的許多應(yīng)用軟件,大部分是利用C語(yǔ)言來(lái)進(jìn)行編寫的。Visual C+6.0沒(méi)有很復(fù)雜的開發(fā)界面,

11、給用戶的開發(fā)以很大的靈活性。2.1 Visual C+6.0的特點(diǎn)在眾多的程序語(yǔ)言中,Visual C+6.0是具有編輯和編譯的集成開發(fā)環(huán)境。通過(guò) Visual C+6.0的編輯功能,可以方便的設(shè)計(jì)程序。它的編輯功能可以隨時(shí)讓我們了解到程序的結(jié)構(gòu)、流程以與對(duì)象的成員,而完成程序設(shè)計(jì)之后,也不必經(jīng)過(guò)復(fù)雜的編譯程序,而且給出的錯(cuò)誤警告可以很方便的進(jìn)行定位操作,這給程序設(shè)計(jì)人員以方便。2.2 IDE的集成開發(fā)環(huán)境界面IDE就是Integrated Development Enviroment的縮寫,是將程序代碼的編寫(editor)、編譯(Compiler)、執(zhí)行(execution)以與糾錯(cuò)(de

12、bug)等功能匯集一身的單一整合性的界面,提供程序開發(fā)過(guò)程所需要的相關(guān)或擴(kuò)展服務(wù),讓用戶只需要通過(guò)此環(huán)境便可以輕松完成程序工程。2.3 Agilent VISA縱覽 VISA是Agilent IO庫(kù)的一個(gè)部分。Agilent IO庫(kù)由兩個(gè)部分組成:VISA和SICL。Agilent VISA是根據(jù)VXIpp系統(tǒng)聯(lián)盟的規(guī)定設(shè)計(jì)的,它允許由不同的廠商開發(fā)的軟件能在同一個(gè)系統(tǒng)中運(yùn)行。 如果你想在你的應(yīng)用程序中使用VXIpp儀器驅(qū)動(dòng)或者是想是自己開發(fā)的IO應(yīng)用軟件或儀器驅(qū)動(dòng)能符合VXIpp的標(biāo)準(zhǔn),就需要使用VISA。如果你使用新的儀器或開發(fā)IO應(yīng)用程序以與儀器驅(qū)動(dòng)的話,也應(yīng)該使用VISA。 Agile

13、nt VISA 是一個(gè)IO庫(kù),可以用來(lái)開發(fā)符合VXIpp標(biāo)準(zhǔn)的IO應(yīng)用軟件和儀器的驅(qū)動(dòng)。使用VISA開發(fā)的應(yīng)用軟件和儀器驅(qū)動(dòng)可以在使用VISA IO庫(kù)的VXIpp主機(jī)上運(yùn)行。因此,不同廠商開發(fā)的應(yīng)用軟件可以在同一個(gè)系統(tǒng)中運(yùn)行。 32位版本的VISA能在Windows 95 98 Me以與NT和2000中使用。C,C+和Visual Basic在這些系統(tǒng)中都被支持。 對(duì)與Windows,VISA支持GPIB、VXI、GPIB-VXI、Serial(RS-232)以與局域網(wǎng)接口。在Windows NT中,對(duì)VXI接口支持的VISA僅能運(yùn)行在Agilent 嵌入式的VXI控制器產(chǎn)品中。一臺(tái)網(wǎng)絡(luò)計(jì)算機(jī)

14、能夠通過(guò)網(wǎng)絡(luò)訪問(wèn)配置VISA地址譬如GPIB接口地址上的儀器。2.4 VISA編程 在VISA的編程中需要了解VISA的一些機(jī)制: VISA的資源和屬性、會(huì)話使用、發(fā)送I/O命令、使用事件與句柄、捕抓錯(cuò)誤等等。VISA資源:在VISA中,任何VISA可以提供通訊的器件(如電壓表)都可以定義為一種資源。對(duì)于一個(gè)完善的VISA系統(tǒng),VISA定義完全符合VXI即插即用聯(lián)盟的規(guī)的六種資源類可以被執(zhí)行。VISA屬性: 屬性是和各種資源或會(huì)話相關(guān)聯(lián)的。你可以使用屬性來(lái)決定資源或會(huì)話的狀態(tài)或設(shè)置資源或會(huì)話為指定的狀態(tài)。譬如,你可以通過(guò)viGetAttribute函數(shù)來(lái)讀取指定會(huì)話、事件、查找列表的屬性的狀態(tài)

15、。有只讀和讀寫的屬性。通過(guò)使用viSetAttribute函數(shù)來(lái)修改指定的會(huì)話、事件或查找列表的讀寫屬性。傳遞給viGetAttribute函數(shù)的指針必須指向那個(gè)屬性的準(zhǔn)確類型:ViUInt16,ViInt32,等等。譬如,當(dāng)讀取一個(gè)返回ViUInt16值的屬性的狀態(tài)時(shí),你必須聲明那個(gè)屬性的變量和使用它來(lái)存儲(chǔ)返回的數(shù)值。如果ViString被返回,你必須分配一個(gè)數(shù)組和傳遞那個(gè)數(shù)組的指針給那個(gè)返回的數(shù)值。 對(duì)于C和C+程序,你必須在每一個(gè)文件的開始處添加包含VISA調(diào)用函數(shù)visa.h頭文件:#include “visa.h”這個(gè)頭文件包含了VISA函數(shù)的原型的聲明和所有VISA的常量和錯(cuò)誤代碼

16、的定義。Visa.h頭文件也包含了visatype.h頭文件。該visatype.h頭文件對(duì)VISA的所有類型進(jìn)行了定義。VISA的各種類型貫穿了整個(gè)VISA,對(duì)函數(shù)中用到的數(shù)據(jù)進(jìn)行類型定義。 而關(guān)于會(huì)話,會(huì)話其實(shí)是一個(gè)通訊通道。會(huì)話必須在默認(rèn)的資源管理器中被首先打開,接著是你將會(huì)使用的每一種資源。首先,你必須通過(guò)默認(rèn)資源管理器的viOpenDefaultRM函數(shù)來(lái)建立一個(gè)會(huì)話。這個(gè)函數(shù)的第一次調(diào)用用來(lái)初始化默認(rèn)的資源管理器并返回該資源管理器會(huì)話的會(huì)話。你僅需要打開默認(rèn)資源管理器一次就可以了。然而,后來(lái)的對(duì)viOpenDefaultRM函數(shù)的調(diào)用則返回同樣的默認(rèn)資源管理器資源的唯一的會(huì)話。接下

17、來(lái),你利用viOpen函數(shù)對(duì)指定的資源打開一個(gè)會(huì)話。而在退出程序的時(shí)候需要多打開的會(huì)話進(jìn)行關(guān)閉操作,在關(guān)閉每一個(gè)會(huì)話時(shí),必須調(diào)用viClose函數(shù)以釋放掉分配給該會(huì)話的數(shù)據(jù)資源。你如果關(guān)閉默認(rèn)的資源管理器會(huì)話,則所有被該會(huì)話打開的會(huì)話將會(huì)被關(guān)閉。當(dāng)你為一個(gè)器件建立一個(gè)通訊會(huì)話時(shí),通過(guò)使用VISA的I/O程序來(lái)啟動(dòng)與該器件的通訊。VISA提供了格式化和非格式化的程序。q 格式化I/O將對(duì)格式化字符下的混合數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。數(shù)據(jù)被存在數(shù)據(jù)緩沖器中,因此是接口的通訊得到最大的優(yōu)化。q 非格式化I/O口向一個(gè)器件發(fā)送或接收原始數(shù)據(jù)。通過(guò)非格式化I/O,數(shù)據(jù)并不進(jìn)行格式化或相應(yīng)的轉(zhuǎn)換。因此,如果要求格式

18、化數(shù)據(jù),它必須通過(guò)用戶自己來(lái)定義。 事件是那些需要你的應(yīng)用程序關(guān)注的特指事件。事件類型包括服務(wù)請(qǐng)求,中斷和硬件觸發(fā)。事件不會(huì)被傳遞,除非相應(yīng)的事件被啟用。注意:VISA不能回調(diào)VB函數(shù)。因此,你只能使用函數(shù)ViEnableEvent來(lái)使用隊(duì)列機(jī)制。在VB中不能安裝VISA事件句柄。當(dāng)事件發(fā)生時(shí),有兩種方式來(lái)接收通知消息:函數(shù)回調(diào)法和隊(duì)列法 當(dāng)一個(gè)事件需要立即相應(yīng)時(shí),可以使用回調(diào)函數(shù)法。使用回調(diào)函數(shù)法來(lái)接收事發(fā)生時(shí)的通知消息。當(dāng)使能事件發(fā)生時(shí),安裝的事件句柄會(huì)被調(diào)用??梢允褂煤瘮?shù)viInstallHandler安裝事件句柄,而使用函數(shù)viEnableEvent來(lái)啟動(dòng)一個(gè)或多個(gè)事件。VISA允許應(yīng)

19、用程序在同一個(gè)會(huì)話中對(duì)一種事件類型安裝多個(gè)句柄。多個(gè)句柄可以通過(guò)多次調(diào)用函數(shù)viInstallHandler來(lái)安裝。每次調(diào)用添加到前面的句柄列表中。如果一個(gè)事件類型被安裝了多個(gè)句柄,當(dāng)指定的事件發(fā)生時(shí),每一個(gè)句柄會(huì)被調(diào)用。VISA指出,句柄的調(diào)用的順序是后進(jìn)先出的順序。當(dāng)需要安裝句柄時(shí),使用下面的函數(shù):viInstallHandler(vi, eventType, handler, userHandle);當(dāng)你的應(yīng)用程序捕需要與時(shí)相應(yīng)時(shí),隊(duì)列法通常被使用。為了使用隊(duì)列法來(lái)接收事件發(fā)生時(shí)的通知消息,步驟如下:n 使用函數(shù)viEnableEvent來(lái)使能一個(gè)或多個(gè)事件。n 當(dāng)準(zhǔn)備查詢時(shí),使用函數(shù)v

20、iWaitOnEvent來(lái)檢查隊(duì)列事件。如果指定的事件發(fā)生,事件信息將會(huì)被取得,程序立即返回。如果指定的事件沒(méi)有發(fā)生,應(yīng)用程序掛起直至指定的事件發(fā)生或指定的超時(shí)時(shí)間到來(lái)。3 函數(shù)信號(hào)發(fā)生器3.1 Agilent 33250A80 MHz 函數(shù)/ 任意波形發(fā)生器介紹Agilent Technologies 33250A是高性能的 80 MHz 復(fù)合函數(shù)發(fā)生器,其具有置任意波形和脈沖功能函數(shù)發(fā)生器,其80MHz帶寬能適應(yīng)各種各樣的應(yīng)用要求,它具有各種置信號(hào)、自定義的任意波形和脈沖能力,能幫助您驗(yàn)證設(shè)計(jì),檢驗(yàn)新的構(gòu)想。直接數(shù)字合成技術(shù)能獲得穩(wěn)定、精確和低失真的輸出信號(hào)。Agilent 33250A能

21、提供您需要的所有波形,其輸出頻率更高達(dá)80MHz。標(biāo)準(zhǔn)輸出包括正弦波、方波、斜波、噪聲波、sin(x)/x、真流和其它波形。當(dāng)標(biāo)準(zhǔn)信號(hào)還不能滿足您的要求時(shí),33250A可簡(jiǎn)化生成任意波形的過(guò)程,并贈(zèng)強(qiáng)這些自定義信號(hào)的性能?,F(xiàn)在通過(guò)達(dá)200MSa/s的采樣率,12bit分辨率和64K點(diǎn)的存儲(chǔ)器深度,您可建立無(wú)限多種信號(hào),以精確適應(yīng)您的應(yīng)用要求。同時(shí)具備工作臺(tái)特性和系統(tǒng)特性是滿足您目前與未來(lái)測(cè)試需求的多用途解決方案Agilent Technologies 33250A的特點(diǎn)如下: 10 個(gè)標(biāo)準(zhǔn)波形 置的 12 位 200 MSa/s 任意波形功能 具有可調(diào)邊沿時(shí)間的精確脈沖波形功能 LCD 彩色顯

22、示器可提供數(shù)字和圖形視圖 易用的旋鈕和數(shù)字小鍵盤 儀器狀態(tài)存儲(chǔ)器用戶可自定義名稱 帶有防滑支腳的便攜式耐用機(jī)箱靈活的系統(tǒng)特性 四個(gè)可下載的 64K 點(diǎn)任意波形存儲(chǔ)器 GPIB (IEEE-488) 接口和 RS-232 接口為標(biāo)準(zhǔn)配置 SCPI 可編程儀器的標(biāo)準(zhǔn)命令兼容Agilent Technologies 33250A函數(shù)/ 任意波形發(fā)生器的技術(shù)參數(shù)如下:波形 標(biāo)準(zhǔn)波形正弦波、方波、斜波、脈沖、噪聲、SIN(x)/x,指數(shù)上升和下降、心律波、真流電壓 任意波形波形長(zhǎng)度164K點(diǎn)非易失性存儲(chǔ)器4個(gè)波形(每一個(gè)漢形164K點(diǎn))幅度分辨率12bit采樣率200MSa/s 頻率特性正弦波1Hz80

23、MHz 白噪聲 50MHz帶寬 方波1Hz80MHz分辨率 1Hz,除脈沖為5個(gè)字 三角波1Hz1MHz準(zhǔn)確度0.3ppm,(18) 斜波500Hz50MHzTHD(dc20kHz) <0.2%+1mVrms 其它特性幅度(至50) 10mVpp10Vpp準(zhǔn)確度(1kHz) ±1%設(shè)置值±1mVpp 調(diào)制AMFSK調(diào)制任何部波形 部速率2mHz1MHz頻率2mHz20kHz頻率圍 1Hz80MHz 深度0%120%   FM脈沖列 調(diào)制任何部波形 波形頻率 1Hz80MHz頻率2mHz20kHz計(jì)數(shù)11,000,000或無(wú)窮多個(gè)周期 偏移dc80M

24、Hz 起始/停止相位-360°+360°   部周期 1500s 掃描類型線性或?qū)?shù)掃描時(shí)間 1ms500s方向上或下 標(biāo)記同步信號(hào)下降沿 起動(dòng)F/停止F100Hz至80MHz (可編程) 時(shí)鐘基準(zhǔn)外部鎖定圍10MHz±kHz部頻率10MHz 3.2 對(duì)函數(shù)/任意波形發(fā)生器的遠(yuǎn)端編程控制3.2.1 編程的準(zhǔn)備工作了解函數(shù)信號(hào)發(fā)生器的功能特點(diǎn):因?yàn)槲乙僮鞯暮瘮?shù)信號(hào)發(fā)生器的型號(hào)是Agilent Technologies 33250A。所以,上網(wǎng)去搜索關(guān)于該型號(hào)的資源。在安捷倫中國(guó)的上查找到了相關(guān)的文件資源。并通過(guò)閱讀了解了遠(yuǎn)程控制儀器的

25、方法(通過(guò)VISA I/O庫(kù)對(duì)輸入輸出操作的支持,并使用該儀器的SCPIstandard command for programmable instrument命令來(lái)對(duì)儀器進(jìn)行相關(guān)的操作。通過(guò)查看“自動(dòng)測(cè)試系統(tǒng)”課本上的例子,對(duì)自己編寫函數(shù)信號(hào)發(fā)生器的界面有了一定的模型和認(rèn)識(shí)。接下來(lái)就是去了解VISA I/O庫(kù)。通過(guò)殷老師提供給我的資料,并通過(guò)閱讀,對(duì)VISA庫(kù)中的操作函數(shù)有了一定的認(rèn)識(shí)。如下給出的程序:這個(gè)例子程序的功能是查詢GPIB器件的型號(hào),并輸出結(jié)果。#include <visa.h>#include <stdio.h>/這里是頭文件,因?yàn)樾枰褂肰ISA的數(shù)據(jù)

26、類型和函數(shù)void main () ViSession defaultRM, vi;/變量的聲明char buf 256 = 0;viOpenDefaultRM(&defaultRM);/打開地址為22的GPIB器件viOpen(defaultRM, "GPIB0:22:INSTR",VI_NULL,VI_NULL,&vi);viPrintf(vi, "*RSTn");/初始化器件viPrintf(vi, "*IDN?n");/查詢器件的型號(hào)viScanf(vi, "%t", buf);/讀取結(jié)果p

27、rintf("Instrument identification string: %sn", buf);/打印結(jié)果viClose(vi);/關(guān)閉會(huì)話viClose(defaultRM);這里涉與到了5個(gè)VISA函數(shù):viOpenDefaultRM,viOpen,viPrintf,viScanf,viClose。在我后來(lái)的編程過(guò)程中,也基本上就用到了這幾個(gè)函數(shù)的功能。viOpen函數(shù)的功能是建立一個(gè)指定器件的會(huì)話的通道,而會(huì)話具有一個(gè)標(biāo)識(shí),該標(biāo)識(shí)可以被VISA庫(kù)的其他函數(shù)進(jìn)行調(diào)用。這個(gè)函數(shù)很重要,因?yàn)槟闳绻枰粋€(gè)器件通訊,就必須通過(guò)該函數(shù)來(lái)進(jìn)行會(huì)話的建立。函數(shù)viOpen

28、DefaultRM用來(lái)打開默認(rèn)資源管理器的會(huì)話,必須是第一個(gè)打開。這個(gè)函數(shù)初始化資源管理器,并返回該會(huì)話的指針。以供其他函數(shù)使用。而函數(shù)viPrintf和viScanf這兩個(gè)函數(shù)在用的編程中的比例是最多的,我發(fā)送SCPI指令就是通過(guò)這兩個(gè)函數(shù)來(lái)進(jìn)行的。函數(shù)viClose是用于關(guān)閉每一個(gè)會(huì)話的。當(dāng)你關(guān)閉一個(gè)會(huì)話時(shí),所有為會(huì)話分配的數(shù)據(jù)結(jié)構(gòu)都會(huì)被釋放掉。當(dāng)你使用這個(gè)函數(shù)關(guān)閉默認(rèn)資源管理器時(shí),所有通過(guò)該會(huì)話打開的其他會(huì)話將會(huì)被關(guān)閉。通過(guò)閱讀VISA手冊(cè),懂得如何配置VC參數(shù)從而可以正常的進(jìn)行操作。利用VISA來(lái)進(jìn)行編程,需要VISA庫(kù)VISA32.LIB。對(duì)VC編譯器配置如下:選擇Project-&

29、gt;Settings并選擇C/C+按鈕,從類型列表中選擇Code Generation,從運(yùn)行庫(kù)列表中選擇Multi-Threaded using DLL。(VISA在WIN32環(huán)境下需要這些配置)選擇Project->Settings點(diǎn)擊link按鈕并添加visa32.lib庫(kù)到Object/Library Modules列表中。換一種方法是,直接添加庫(kù)到你的工程文件夾中。頭文件和庫(kù)文件的搜索路徑也可以進(jìn)行更改:選擇Tools->Options點(diǎn)擊Directories按鈕,就可以對(duì)頭文件和庫(kù)文件的路徑進(jìn)行更改了。在VISA中也學(xué)習(xí)了幾個(gè)接口的編程。VISA支持三種接口來(lái)訪問(wèn)G

30、PIB和VXI儀器:GPIB,VXI和GPIB-VXI。通過(guò)這三種接口可以對(duì)GPIB和VXI器件進(jìn)行編程。當(dāng)你使用GPIB-VXI或VXI接口直接訪問(wèn)VXI主機(jī)時(shí)。你必須知道你所要進(jìn)行的編程的儀器時(shí)基于消息基還是寄存器基的VXI器件。消息基的VXI器件擁有自己的處理器來(lái)識(shí)別高級(jí)的命令,譬如,SCPI(可編程儀器標(biāo)準(zhǔn)命令)。當(dāng)使用VISA時(shí),你利用VISA的輸出函數(shù)來(lái)發(fā)送SCPI命令。接著,消息基器件就會(huì)解釋SCPI命令。在這種情況下,就可以使用VISA的格式化IO或非格式化IO含糊來(lái)對(duì)消息基器件進(jìn)行編程。如果消息基器件有共享存,可以通過(guò)對(duì)寄存器的PEEK和POKE操作來(lái)訪問(wèn)器件的共享存。VIS

31、A提供兩個(gè)不同的方法對(duì)寄存器進(jìn)行編程:高級(jí)存函數(shù)或低級(jí)存函數(shù)。而寄存器基的VXI器件沒(méi)有處理器來(lái)處理高級(jí)的命令。因此,只有通過(guò)寄存器的PEEK和POKE命令直接對(duì)器件的寄存器進(jìn)行編程。VISA提供了兩種不同的方法來(lái)對(duì)寄存器基的器件進(jìn)行編程:高級(jí)存函數(shù)低級(jí)存函數(shù)。下面是一個(gè)關(guān)于GPIB接口的示意圖:一臺(tái)裝有多個(gè)GPIB卡(PCI和ISA)的PC機(jī)和通過(guò)GPIB電纜與GPIB卡相連的多臺(tái)GPIB儀器組成。PC機(jī)和儀器之間的通訊是通過(guò)GPIB卡和GPIB電纜來(lái)實(shí)現(xiàn)的。如下所示:圖31如下面的例子:GPIB接口系統(tǒng)由裝由兩個(gè)82350GPIB卡的PC機(jī)和三臺(tái)GPIB儀器通過(guò)GPIB電纜進(jìn)行連接。通過(guò)I

32、O組件對(duì)GPIB卡1和2分別配置一個(gè)VISA名字GPIB0和GPIB1。這樣VISA庫(kù)就可以對(duì)其進(jìn)行尋址操作了,如下圖:圖32而其他的接口類型的配置與連接也是小異。對(duì)儀器進(jìn)行編程之前還需要熟悉一下Agilent IO庫(kù)的相關(guān)知識(shí)。從Agilent IO 的安裝向?qū)DF電子資料中了解到了相關(guān)的知識(shí)點(diǎn),也知道了該庫(kù)的重要作用。Agilent IO庫(kù)軟件由兩個(gè)庫(kù)和四個(gè)IO配置組建加上一個(gè)IO庫(kù)控制組成。兩個(gè)庫(kù)為Agilent VISA 和Agilent SICL。Agilent VISAAgilent Virtual Instrument Software Architecture(VISA)是一

33、個(gè)開發(fā)符合VXIplug&play標(biāo)準(zhǔn)的I/O應(yīng)用程序和儀器驅(qū)動(dòng)。而Agilent SICLAgilent Standard Instrument Control Library(SICL)是一個(gè)Agilent開發(fā)的適合許多IO接口的IO庫(kù)。四個(gè)IO配置組建中的IO配置是被Agilent IO庫(kù)用來(lái)對(duì)儀器的IO硬件接口進(jìn)行配置。一個(gè)硬件接口在被Agilent IO庫(kù)使用之前必須被IO配置組建進(jìn)行配置之后才能使用。而VISA助手則是一個(gè)應(yīng)用程序,可以控制和與VXI,GPIB以與Serial儀器進(jìn)行通訊。這是一個(gè)比較好的幫助軟件,可以了解到儀器的地址,在編程之前,對(duì)相關(guān)指令測(cè)試操作,以熟悉

34、操作指令。也可以通過(guò)它來(lái)了解到連接的相關(guān)情況。我在三個(gè)模塊的編程過(guò)程中,經(jīng)常通過(guò)該組建來(lái)了解相關(guān)的信息。其他兩個(gè)組件則用的不多。VXI 資源管理器是用來(lái)顯示你的系統(tǒng)是否進(jìn)行適當(dāng)?shù)呐渲茫枰愕南到y(tǒng)安裝有E8491 IEEE-1394 PC Link to VXI 接口;而LAN Server是通過(guò)IO Config對(duì)系統(tǒng)進(jìn)行LAN Server的配置。了解了IO庫(kù)的介紹性知識(shí),隨后又對(duì)如何利用IO庫(kù)對(duì)接口進(jìn)行配置的章節(jié)進(jìn)行的閱讀。一個(gè)IO接口可以被定義為硬件接口和軟件接口。IO Config組件使用的目的是將一個(gè)唯一的軟件接口名字和一個(gè)硬件接口聯(lián)系起來(lái)。IO庫(kù)使用接口名字或邏輯單元數(shù)字來(lái)對(duì)接

35、口進(jìn)行標(biāo)識(shí)。這個(gè)信息在VISA程序中被函數(shù)viOpen作為一個(gè)參數(shù)進(jìn)行調(diào)用或在SICL程序中被函數(shù)iopen進(jìn)行調(diào)用。IO Config分配一個(gè)接口名字和一個(gè)邏輯單元數(shù)字給一個(gè)硬件接口,就象其他接口配置參數(shù)一樣。當(dāng)IO接口配置完之后,就可以使用Agilent VISA或Agilent SICL庫(kù)對(duì)分配的儀器進(jìn)行編程了。比如,下圖中顯示的是對(duì)通過(guò)GPIB接口和PC進(jìn)行連接的GPIB儀器進(jìn)行VISA和SICL尋址操作。圖33譬如對(duì)GPIB(82357USB)接口進(jìn)行配置,為了對(duì)82357USB/GPIB接口進(jìn)行配置,啟動(dòng)IO Config組件,并在左邊的有效接口類型中選中GPIB 82357USB

36、 to GPIB如下圖:圖34如果在你的系統(tǒng)中有多個(gè)82357接口,則在配置窗口中會(huì)顯示出來(lái)。選擇你想進(jìn)行配置的接口的Serial Number并單擊OK會(huì)顯示82357 USB to GPIB配置窗口。在出現(xiàn)的窗口中設(shè)置VISA 接口名字,SICL接口名字,邏輯單元以與總線地址。如果你的系統(tǒng)中有多個(gè)82357接口的話,重復(fù)配置。圖35對(duì)PCI接口82350和82341ISA接口的配置也是類似。對(duì)VISA和IO庫(kù)以與其相關(guān)的組件有了一定的認(rèn)識(shí)之后,通過(guò)網(wǎng)上和書本上的資料了解了函數(shù)信號(hào)發(fā)生器的基本功能和相關(guān)的參數(shù),我便開始了界面的設(shè)計(jì)以與編程的構(gòu)思。3.2.2 函數(shù)信號(hào)發(fā)生器的界面以與編程構(gòu)思因

37、為我要完成三個(gè)模塊的設(shè)計(jì):33250A函數(shù)信號(hào)發(fā)生器,54622D示波器以與E1412A萬(wàn)用表的設(shè)計(jì)工作,所以最初的設(shè)計(jì)是設(shè)計(jì)一個(gè)主界面,通過(guò)三個(gè)按鈕的點(diǎn)擊來(lái)分別進(jìn)入不同的模塊如下圖所示:圖36后來(lái)通過(guò)考慮,感覺(jué)這樣的設(shè)計(jì)不夠人性化和可操作性,也不太符合實(shí)際情況。所以通過(guò)反復(fù)的修改最終是如下所示:圖37這樣的設(shè)計(jì)自己的感覺(jué)是比較滿意的。從主界面上可以一目了然的知道軟件的功能。三個(gè)功能模塊,通過(guò)按鈕來(lái)進(jìn)行操作,而左邊的列表是通過(guò)下面的按鈕來(lái)進(jìn)行查找的。開始是,建立會(huì)話是處于屏蔽狀態(tài),通過(guò)查找資源按鈕來(lái)進(jìn)行資源的查找工作,并將查找到的資源一一的列在列表框中。用戶可以通過(guò)雙擊任一個(gè)資源地址來(lái)激化建立

38、會(huì)話按鈕并進(jìn)行會(huì)話的建立工作。會(huì)話是否成功的建立會(huì)給出提示信息,以確保用戶的正確操作和使用。建立會(huì)話后,將會(huì)把建立會(huì)話按鈕變?yōu)殛P(guān)閉會(huì)話按鈕,來(lái)進(jìn)行會(huì)話的關(guān)閉操作。也可以通過(guò)進(jìn)入相應(yīng)的模塊操作之后來(lái)對(duì)該按鈕進(jìn)行屏蔽操作。進(jìn)入相關(guān)的模塊的時(shí)候,無(wú)需用的對(duì)資源地址的記憶,程序會(huì)對(duì)用戶的操作進(jìn)行判斷,以確保用戶進(jìn)入正確的模塊中。函數(shù)信號(hào)發(fā)生器模塊的界面如下:圖38在該模塊中可以完成幾種基本波形的產(chǎn)生以與各種基本的調(diào)試功能:正弦波,三角波,方波,鋸齒波,任意波等;調(diào)幅,調(diào)頻,脈沖調(diào)制,頻移鍵控;可以修改頻率,幅度,偏置以與占空比;可以配置輸出阻抗何同步信號(hào)。在該界面中還存在復(fù)位按鈕以與硬件連接按鈕,方便

39、用戶的測(cè)試。從整體上看,符合人們的操作習(xí)慣。自己認(rèn)為也還可以,也不失有點(diǎn)人性化吧!其實(shí),在界面的設(shè)計(jì)過(guò)程中,也一邊開始程序的構(gòu)思。基本上界面是根據(jù)信號(hào)發(fā)生器的信號(hào)的產(chǎn)生過(guò)程與順序以與編程的思路來(lái)進(jìn)行安排的,界面的定型也就意味著自己的編程思路已經(jīng)基本成型了!下面是自己的編程思路結(jié)構(gòu):進(jìn)入模塊各個(gè)參數(shù)初始化用戶對(duì)參數(shù)的手動(dòng)設(shè)置正弦波,無(wú)調(diào)制等的設(shè)置執(zhí)行命令硬件的測(cè)試和復(fù)位操作成功或失敗給出提示信息返回操作界面給出提示信息失敗成功以上就是我的函數(shù)信號(hào)發(fā)生器的編程思想和設(shè)計(jì)思路。這是一個(gè)最基本的函數(shù)信號(hào)發(fā)生器模塊,具備基本的功能參數(shù)。有了界面和思路之后就可以進(jìn)行底下的編程操作了。3.2.3 函數(shù)信號(hào)發(fā)

40、生器的編程首先,需要能使函數(shù)信號(hào)發(fā)生器根據(jù)用戶的輸入來(lái)產(chǎn)生相應(yīng)的波形。我于是參看了33250A 80MHz的函數(shù)/任意波形發(fā)生器的電子資料以與網(wǎng)上關(guān)于該儀器的操作的SCPI指令。 就像前面所說(shuō)的那樣,函數(shù)信號(hào)發(fā)生器是基于消息基,也就是說(shuō)它具有自己的處理器來(lái)對(duì)用戶輸入的高級(jí)指令進(jìn)行解釋和判斷以與進(jìn)行執(zhí)行操作。譬如,如果希望產(chǎn)生一個(gè)正弦波,則輸入下面的語(yǔ)句既可:viPrintf(funcgen,"function :shape sinn");就可以產(chǎn)生一個(gè)采用默認(rèn)頻率和幅值的正弦波了!而viPrintf()就是VISA庫(kù)中的格式化輸入輸出操作函數(shù),用來(lái)向儀器發(fā)送SCPI指令。在

41、函數(shù)信號(hào)發(fā)生器的編程過(guò)程中,經(jīng)常需要用到這個(gè)函數(shù),還有格式化輸入函數(shù):viScanf()。在指令的測(cè)試過(guò)程中,也遇到了一些問(wèn)題:如viPrintf(funcgen,"func:shape tri;freq 2000;volt 2n");這條指令就有問(wèn)題,只能顯示三角波,但是后面的參數(shù)就沒(méi)有根據(jù)我的指定來(lái)進(jìn)行顯示。后來(lái)才發(fā)現(xiàn),原來(lái)每一個(gè)指令后面加上回車符就可以正常的執(zhí)行了。譬如,下面一條語(yǔ)句:viQueryf(funcgen,"AM:SOUR?",buf);該語(yǔ)句的功能是查詢AM的調(diào)制源的類型并將查詢到的類型字符以%t的格式給buf。注意:該語(yǔ)句是沒(méi)有錯(cuò)誤

42、,但是好像就沒(méi)有起到預(yù)期的效果。而當(dāng)我在"AM:SOUR?n"加上一個(gè)回車符后,就可以執(zhí)行正確了??梢钥闯龈袷交钍且曰剀嚪鳛橛|發(fā)命令的,只有n才能使命令有效,舍去將視為字符串處理。(但程序本身并不提示錯(cuò)誤)又如,產(chǎn)生象使用APPL命令的波形:"Appl:sin freq,volt,dcoffsetn",當(dāng)使用其他函數(shù)產(chǎn)生時(shí),如下:"FUNC SINnFREQ freqnVOLT voltnn"或是"FUNC SINn;FREQ freqn;VOLT voltn;n"可以看出執(zhí)行指令都加上了回車符(對(duì)于象這樣的

43、一串執(zhí)行指令,也可以在末尾加n來(lái)執(zhí)行只是需要使用分號(hào)來(lái)進(jìn)行隔開,用逗號(hào)和空格均不行)下面是復(fù)位按鈕的執(zhí)行代碼: 圖39原理是通過(guò)向儀器發(fā)送IDN的SCPI指令根據(jù)函數(shù)返回值來(lái)進(jìn)行判斷,并給出相關(guān)的信息提示用戶。除了SCPI命令外,還有IEEE 488.2命令,兩種命令之間用分號(hào)隔開如下所示:RST;OUTP:LOAD INFn 又如:TRIG:SOUR BUS;TRGn連接多個(gè)SCPI命令時(shí),使用分號(hào)和冒號(hào)(冒號(hào)表示不同的命令系統(tǒng))如:OUTP:LOAD 50;:APPL:RAMP注意:函數(shù)viPrintf()和viScanf()都是單向的傳送命令和數(shù)據(jù),而函數(shù)viQueryf()則是雙向的傳

44、送數(shù)據(jù)和命令。在格式化命令中不允許有兩條如似的命令"FREQ?n VOLT?n"。在我的測(cè)試命令以與組合發(fā)送命令過(guò)程中,我遇到這樣的問(wèn)題:Cstring m_sFreq,m_sVolt; viQueryf(vi,"Freq?n","%t",m_sFreq); viQueryf(vi,"Volt?n","%t",m_sVolt);SetDlgItemText(ID0,m_sFreq);SetDlgItemText(ID1,m_sVolt);如果以這種方式執(zhí)行的話,執(zhí)行的結(jié)果是m_sFreq和m_s

45、Volt是同一個(gè)值,當(dāng)把語(yǔ)句改為如下的形式的時(shí)候就正常了:Cstring m_sFreq,m_sVolt; viQueryf(vi,"Freq?n","%t",m_sFreq);SetDlgItemText(ID0,m_sFreq);viQueryf(vi,"Volt?n","%t",m_sVolt);SetDlgItemText(ID1,m_sVolt);這也表示SCPI查詢命令不允許執(zhí)行多個(gè),只能一條一條的執(zhí)行,否則,最后的結(jié)果會(huì)是以最后一條查詢指令的結(jié)果。通過(guò)反復(fù)的測(cè)試之后,理解了SCPI命令的執(zhí)行的一些格式

46、與語(yǔ)法之后,就開始我的編程。下面列出了函數(shù)信號(hào)發(fā)生器的部分執(zhí)行代碼:/這是一個(gè)switch語(yǔ)句,對(duì)用戶的調(diào)制方式的判斷,其中nID_Select_Modul保存的是用/戶選擇的調(diào)制方式的ID。通過(guò)GetCheckedRadioButton()函數(shù)獲得。 switch(nID_Select_Modul)/對(duì)用戶通過(guò)單選按鈕選擇的調(diào)制參數(shù)的判斷 case IDC_RADIO_BW:/無(wú)調(diào)制情況 viPrintf(/*funcgen*/theApp.m_Session,"OUTPut:LOAD %sn",m_nResistance);/輸出端的設(shè)置 viPrintf(/*func

47、gen*/theApp.m_Session,"OUTPut:SYNC %sn",m_nSignal);/設(shè)置同步信號(hào)CheckWaveRadioButton();/這是一個(gè)自己定義的函數(shù),對(duì)用戶的波形的選擇進(jìn)行判斷將波形的字符串存儲(chǔ)在m_nBaseShape中,該函數(shù)的具體代碼將會(huì)在附錄中給出。/判斷用戶選擇的波形是否是方波,并通過(guò)函數(shù)viPrintf來(lái)進(jìn)行各種SCPI命令的執(zhí)行if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)=IDC_RADIO_FWAVE)viPrintf(/*funcgen*/theApp.m_S

48、ession,"FUNC %sn",m_nBaseShape);viPrintf(/*funcgen*/theApp.m_Session,"FREQ %fn",m_nFreq);viPrintf(/*funcgen*/theApp.m_Session,"VOLT %fn",m_nAmpl);viPrintf(/*funcgen*/theApp.m_Session,"VOLT:OFFS %fn",m_nOffs);viPrintf(/*funcgen*/theApp.m_Session,"FUNC:SQU:

49、DCYC %fn",m_nDcycle);/判斷用戶選擇的是否是任意波else if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)=IDC_RADIO_ARBI)error=viPrintf(/*funcgen*/theApp.m_Session,"APPL:USER %f,%f,%fn",m_nFreq,m_nAmpl,m_nOffs);if(error!=VI_SUCCESS)error_handler(/*funcgen*/theApp.m_Session,error); break;viPrintf(/

50、*funcgen*/theApp.m_Session,"FUNC:USER%sn",WaveForm.m_Arbitrary);elseerror=viPrintf(/*funcgen*/theApp.m_Session,"APPL:%s %f,%f,%fn",m_nBaseShape,m_nFreq,m_nAmpl,m_nOffs);/這里的參數(shù)需要用戶自己添加 if(error!=VI_SUCCESS) error_handler(/*funcgen*/theApp.m_Session,error); break;MessageBox("S

51、uccessfully!");/給一個(gè)提示框明示用戶的操作 break; 以上只是無(wú)調(diào)制情況下的輸出代碼,而調(diào)幅、調(diào)頻等的實(shí)現(xiàn)代碼將會(huì)在附錄給給出。對(duì)儀器的編程中,首先是先打開跟資源管理器的會(huì)話,然后通過(guò)資源管理器會(huì)話來(lái)進(jìn)一步打開與某一臺(tái)儀器的會(huì)話(會(huì)話也就是與儀器進(jìn)行通訊,所有被使用的儀器都需要建立連接,并且都要調(diào)用VISA函數(shù)viOpenDefaultRM來(lái)打開資源管理器,這個(gè)函數(shù)會(huì)初始化VISA系統(tǒng),包括資源管理系統(tǒng);如果在沒(méi)有器件連接的情況下調(diào)用該函數(shù),則在有器件連接上時(shí)又進(jìn)行一次操作,則連接的器件是不被認(rèn)識(shí)的;你必須關(guān)閉所有的資源管理器會(huì)話,并重新的打開才行);當(dāng)結(jié)束訪問(wèn)之

52、后需要對(duì)會(huì)話進(jìn)行清除操作,調(diào)用函數(shù)viClose對(duì)資源會(huì)話和其他會(huì)話進(jìn)行關(guān)閉。該操作會(huì)把所有分配給指定會(huì)話的數(shù)據(jù)結(jié)構(gòu)資源進(jìn)行釋放操作。上面給出的是在用戶配置好各種參數(shù)后的執(zhí)行代碼。然而,在自己的界面的設(shè)計(jì)過(guò)程中也給出了一些配置信息,比如,頻率,幅值,偏移,占空比(其中對(duì)占空比也做了特別的處理,因?yàn)檎伎毡葏?shù)只適合于方波,所以在選中其他波形的時(shí)候需要對(duì)該參數(shù)進(jìn)行屏蔽,以防止用戶的輸入)。當(dāng)用戶選擇調(diào)制方式的時(shí)候,會(huì)彈出對(duì)話框以提供用戶的輸入操作:圖310可以看出在該界面中共有四種調(diào)制方式,也是最基本的調(diào)制方式。在彈出時(shí),各個(gè)參數(shù)都有其初始值以方便用戶。對(duì)于其中的數(shù)據(jù)的處理比較簡(jiǎn)單:通過(guò)VC的Cl

53、assWizard對(duì)界面中的各個(gè)控件進(jìn)行變量的定義,以接收用戶的數(shù)據(jù)的輸入:圖311在程序的編寫過(guò)程中也遇到了一些問(wèn)題:譬如,多個(gè)單選按鈕如何組合在一起,實(shí)現(xiàn)真正的單選;當(dāng)用戶選中一個(gè)按鈕之后,如何對(duì)用戶的選擇進(jìn)行判斷,以正確的執(zhí)行用戶所需要的執(zhí)行指令;各個(gè)功能模塊之間如何的進(jìn)行協(xié)調(diào)的工作等等。就拿單選按鈕的實(shí)現(xiàn)來(lái)說(shuō),因?yàn)槲业幕静ㄐ蔚倪x擇設(shè)想是通過(guò)用戶的選擇(單選)來(lái)進(jìn)行的,這樣的設(shè)計(jì)直觀且美觀,符合人們的操作習(xí)慣。但是應(yīng)該如何去實(shí)現(xiàn)呢?通過(guò)查找書本上介紹的例子,首先進(jìn)行一些測(cè)試?yán)?。測(cè)試通過(guò)之后,再在程序中進(jìn)行運(yùn)用。但是也會(huì)遇上這樣那樣的一些問(wèn)題:例子中能進(jìn)行正確的執(zhí)行,但是移植到自己的程

54、序中就不行了。(不過(guò),我想說(shuō)的一點(diǎn)是有許多書籍的容是很垃圾的,程序不完整不說(shuō),而且還誤人子弟)。我現(xiàn)在遇到的問(wèn)題就是,已經(jīng)將單選按鈕組合在一起了,也能實(shí)現(xiàn)單選了,可是,單擊的波形,與設(shè)計(jì)的并不一樣,也就是各個(gè)單選按鈕之間的功能出現(xiàn)了紊亂。而且還出現(xiàn)了跟另外一組的單選按鈕出現(xiàn)了沖突。當(dāng)時(shí)我就有點(diǎn)懵了。怎么會(huì)出現(xiàn)這樣的情況呢?思索了蠻久,使自己對(duì)VC中的resource.h文件產(chǎn)生了懷疑:因?yàn)樵撐募卸际且恍╆P(guān)于控件ID資源的定義。是不是ID資源沖突了呢?!通過(guò)自己的仔細(xì)的研究和思索,發(fā)現(xiàn)了另外一個(gè)問(wèn)題:在該文件中有許多自己并沒(méi)有使用到的空閑ID,怎么會(huì)這樣呢?原來(lái)是自己在設(shè)計(jì)界面的過(guò)程中,經(jīng)常的

55、添加和刪除控件,使得有些控件ID并沒(méi)有隨著自己對(duì)控件的刪除而刪除。故而遺留了下來(lái)!于是我就將其全部的進(jìn)行刪除。感覺(jué)ID就干凈了許多。但是,前面的問(wèn)題還沒(méi)有解決??!于是我對(duì)單選按鈕的ID進(jìn)行的排序和分析,發(fā)現(xiàn)沖突的按鈕的ID的順序也是交叉的。并沒(méi)有順序的進(jìn)行ID的定義。我懷疑是這個(gè)原因,于是對(duì)混亂的ID進(jìn)行的重新的排序。并將不同的兩組ID進(jìn)行了分離。重新運(yùn)行程序,結(jié)果一切OK!圖312象這樣的問(wèn)題,如果沒(méi)有碰上過(guò),也是有點(diǎn)不知所措的。這是我的小小的心得哦!3.2.4函數(shù)信號(hào)發(fā)生器的程序的調(diào)試在調(diào)試前,先進(jìn)行IO Config的配置,并通過(guò)VISA 助手進(jìn)行儀器的連接的測(cè)試,通過(guò)之后,開始調(diào)試程序

56、。我進(jìn)行分塊的調(diào)試:首先是調(diào)試產(chǎn)生不同波形的功能塊是否正常。圖313相應(yīng)的程序如下:/*以下是對(duì)單選按鈕的處理函數(shù),通過(guò)單擊按鈕來(lái)進(jìn)行相應(yīng)的操作void CGENERATER:OnRadioSin() m_nEdit_Dcycle.EnableWindow(FALSE);void CGENERATER:OnRadioTriangle() m_nEdit_Dcycle.EnableWindow(FALSE);void CGENERATER:OnRadioFwave() m_nEdit_Dcycle.EnableWindow(TRUE);void CGENERATER:OnRadioRamp() m_nEdit_Dcycle.EnableWindow(FALSE);等等/*以下是對(duì)基本波形選擇處理函數(shù)void CGENERATER:CheckWaveRadioButton()int nID_SelectWaveF;nID_SelectWaveF=GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC);switch(nID_SelectWaveF)/添加處理代碼即是對(duì)波形參數(shù)賦值case IDC_RADIO_SIN:m_

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論