管理信息化VR虛擬現(xiàn)實(shí)基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)_第1頁(yè)
管理信息化VR虛擬現(xiàn)實(shí)基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)_第2頁(yè)
管理信息化VR虛擬現(xiàn)實(shí)基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)_第3頁(yè)
管理信息化VR虛擬現(xiàn)實(shí)基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)_第4頁(yè)
管理信息化VR虛擬現(xiàn)實(shí)基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

管理信息化VR虛擬現(xiàn)實(shí)基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)引言著名科學(xué)家門(mén)捷列夫說(shuō):“沒(méi)有測(cè)量,就沒(méi)有科學(xué)。測(cè)量科學(xué)的先驅(qū)凱爾端。1基于網(wǎng)絡(luò)的虛擬儀器測(cè)試系統(tǒng)1.1概述定義儀器功能的方式轉(zhuǎn)變?yōu)橛捎脩?hù)自己定義儀器功能。用戶(hù)可根據(jù)測(cè)試的需要,算機(jī)網(wǎng)絡(luò)技術(shù)、總線技術(shù)的發(fā)展,乃至Internet網(wǎng)的發(fā)展拓展了虛擬儀器測(cè)試對(duì)于有些危險(xiǎn)的、環(huán)境惡劣的不適合人員操作的數(shù)據(jù)采集工作可實(shí)行遠(yuǎn)程采集,將采集的數(shù)據(jù)放在服務(wù)器中供用戶(hù)使用。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ī)的虛擬儀器的儀器模塊(VXI總線、PCI總線、PXI總線、GPIB電路、萬(wàn)用表、信號(hào)源等模塊。硬件確定以后,主要確定軟件功能模塊,哪些儀器功能由軟件實(shí)現(xiàn),將軟件功能劃分為相對(duì)獨(dú)立的模塊。然后選擇易于編寫(xiě)的圖形化的軟件平臺(tái)。VirsualC++6.0也具有數(shù)據(jù)庫(kù)開(kāi)發(fā)功能,編程靈活,因此也是編程人員常選用的編程語(yǔ)言,我也用VC++編寫(xiě)了虛擬儀器平臺(tái),可以組建虛擬信號(hào)發(fā)生器、虛擬示波器、數(shù)據(jù)采集。1.2.2網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)InternetInternet網(wǎng)將測(cè)量

惡劣的不適合人員操作的數(shù)據(jù)采集工作可實(shí)行遠(yuǎn)程采集。Client/Server基于C/S終端上就可以觀察到從服務(wù)器中獲取的數(shù)據(jù)和處理結(jié)果。在C/S中,分客戶(hù)機(jī)

(Client)程序和服務(wù)器(Sewer)程序。客戶(hù)機(jī)程序和服務(wù)器程序可以運(yùn)行在

一臺(tái)計(jì)算機(jī)中,也可運(yùn)行在兩臺(tái)或多臺(tái)計(jì)算機(jī)中,Client程序與Server程序相

務(wù)器,另外它又需要得到遠(yuǎn)地計(jì)算機(jī)的數(shù)據(jù),這時(shí)它又成為客戶(hù)機(jī)。C/S模式是

一種開(kāi)放式系統(tǒng)的協(xié)同處理工作模式。設(shè)計(jì)C/S模式時(shí)應(yīng)首先分析系統(tǒng)所要達(dá)到的指標(biāo)和功能要求,在此基礎(chǔ)上,

慮網(wǎng)絡(luò)的帶寬要滿足傳輸要求,并減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量。AgilentIO庫(kù)允許通過(guò)LAN進(jìn)行儀器的控制操作。使用標(biāo)準(zhǔn)的LAN接口,計(jì)

算機(jī)可以不要特殊的儀器接口就可以實(shí)現(xiàn)對(duì)儀器的控制。LAN軟件使用計(jì)算機(jī)的

C/S模式,這種模式使得應(yīng)用程序(客戶(hù))可以不用執(zhí)行所有的工作,相反,客

戶(hù)機(jī)可以向另一臺(tái)儀器(服務(wù)器)發(fā)出某種請(qǐng)求。與可控儀器或器件相連的LAN

服務(wù)器,一旦完成儀器或器件的請(qǐng)求,LAN服務(wù)器會(huì)反饋信息給客戶(hù)機(jī)。反饋的

信息包括數(shù)據(jù)和狀態(tài)等表明操作是否成功的信息。例如網(wǎng)關(guān)在LAN支持)和器件支持的儀器接口之間扮演一個(gè)服務(wù)器的角色?;窘Y(jié)構(gòu)如圖:

圖1-1LAN軟件結(jié)構(gòu):該結(jié)構(gòu)中,包含了LAN客戶(hù)軟件和LAN軟件(TCP/IP服務(wù)器—gatewayLAN服務(wù)器軟件,LAN(TCP/IP)軟件以及用于和客戶(hù)機(jī)通訊和控制儀器的儀器驅(qū)動(dòng)軟件。圖1-21.2.3軟件設(shè)計(jì)的中樞,連接和控制各子模塊;虛擬信號(hào)源、虛擬萬(wàn)用表和虛擬示波器等模塊,VXI儀器和信號(hào)調(diào)理模塊是控制SCXI和VXI象采集模塊,包括采集現(xiàn)場(chǎng)景物視頻圖象和有形對(duì)象的圖象采集.與圖象處理;塊。的設(shè)計(jì)和具體的編程。下面讓我們先來(lái)了解一下VC++6.0開(kāi)發(fā)工具和AgilentVISA庫(kù)。2開(kāi)發(fā)工具和AgilentVISA庫(kù)介紹VisualC++6.0是一套功能強(qiáng)大面向?qū)ο蟮那揖哂屑删庉嬈骷熬幾g器的編程語(yǔ)C語(yǔ)言來(lái)進(jìn)行編寫(xiě)的。VisualC++6.0沒(méi)有很復(fù)雜的開(kāi)發(fā)界面,給用戶(hù)的開(kāi)發(fā)以很大的靈活性。2.1VisualC++6.0的特點(diǎn)在眾多的程序語(yǔ)言中,VisualC++6.0是具有編輯和編譯的集成開(kāi)發(fā)環(huán)境。通過(guò)VisualC++6.0人員以方便。2.2IDE的集成開(kāi)發(fā)環(huán)境界面IDE就是IntegratedDevelopmentEnviroment的縮寫(xiě),是將程序代碼的編寫(xiě)(editorCompilerexecution(debug)等功能匯集只需要通過(guò)此環(huán)境便可以輕松完成程序工程。2.3AgilentVISA縱覽VISA是AgilentIO庫(kù)的一個(gè)部分。AgilentIO庫(kù)由兩個(gè)部分組成:VISA和SICL。AgilentVISA是根據(jù)VXIpp系統(tǒng)聯(lián)盟的規(guī)定設(shè)計(jì)的,它允許由不同的廠商開(kāi)發(fā)的軟件能在同一個(gè)系統(tǒng)中運(yùn)行。如果你想在你的應(yīng)用程序中使用VXIpp儀器驅(qū)動(dòng)或者是想是自己開(kāi)發(fā)的IO應(yīng)用軟件或儀器驅(qū)動(dòng)能符合VXIppVISA開(kāi)發(fā)IO應(yīng)用程序以及儀器驅(qū)動(dòng)的話,也應(yīng)該使用VISA。AgilentVISA是一個(gè)IO庫(kù),可以用來(lái)開(kāi)發(fā)符合VXIpp標(biāo)準(zhǔn)的IO應(yīng)用軟件和儀器VISA開(kāi)發(fā)的應(yīng)用軟件和儀器驅(qū)動(dòng)可以在使用VISAIO庫(kù)的VXIpp主機(jī)上運(yùn)行。因此,不同廠商開(kāi)發(fā)的應(yīng)用軟件可以在同一個(gè)系統(tǒng)中運(yùn)行。32位版本的VISA能在Windows9598Me以及NT和2000中使用。C,C++和VisualBasic在這些系統(tǒng)中都被支持。對(duì)與Windows,VISA支持GPIB、VXI、GPIB-VXI、Serial(RS-232)以及局域網(wǎng)接WindowsNTVXI接口支持的VISA僅能運(yùn)行在Agilent嵌入式的VXIVISA地址譬如GPIB接口地址上的儀器。2.4VISA編程在VISA的編程中需要了解VISA的一些機(jī)制:VISA的資源和屬性、會(huì)話使用、

發(fā)送I/O命令、使用事件與句柄、捕抓錯(cuò)誤等等。VISA資源:在VISA中,任何VISA可以提供通訊的器件(如電壓表)都可

以定義為一種資源。對(duì)于一個(gè)完善的VISA系統(tǒng),VISA定義完全符合VXI即插即

用聯(lián)盟的規(guī)范的六種資源類(lèi)可以被執(zhí)行。VISA屬性:屬性是和各種資源或會(huì)話相關(guān)聯(lián)的。你可以使用屬性來(lái)決定資源或會(huì)話的狀態(tài)或設(shè)置資源或會(huì)話為指定的狀態(tài)。譬如,你可以通過(guò)viGetAttribute函數(shù)來(lái)讀取指定會(huì)話、事件、查找列表的屬

性的狀態(tài)。有只讀和讀寫(xiě)的屬性。通過(guò)使用viSetAttribute函數(shù)來(lái)修改指定的

會(huì)話、事件或查找列表的讀寫(xiě)屬性。傳遞給viGetAttribute函數(shù)的指針必須指向那個(gè)屬性的準(zhǔn)確類(lèi)

型: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è)文件的開(kāi)始處添加包含VISA調(diào)用函數(shù)visa.h

頭文件:#include“visa.h”這個(gè)頭文件包含了VISA函數(shù)的原型的聲明和所有

VISA的常量和錯(cuò)誤代碼的定義。Visa.h頭文件也包含了visatype.h頭文件。

該visatype.h頭文件對(duì)VISA的所有類(lèi)型進(jìn)行了定義。VISA的各種類(lèi)型貫穿了整

個(gè)VISA,對(duì)函數(shù)中用到的數(shù)據(jù)進(jìn)行類(lèi)型定義。打開(kāi),接著是你將會(huì)使用的每一種資源。首先,你必須通過(guò)默認(rèn)資源管理器的

viOpenDefaultRM函數(shù)來(lái)建立一個(gè)會(huì)話。這個(gè)函數(shù)的第一次調(diào)用用來(lái)初始化默認(rèn)

viOpenDefaultRM函數(shù)的調(diào)用則返回同樣的默認(rèn)資

源管理器資源的唯一的會(huì)話。接下來(lái),你利用viOpen函數(shù)對(duì)指定的資源打開(kāi)一個(gè)會(huì)話。而在退出程序的時(shí)候

viClose函數(shù)

被該會(huì)話打開(kāi)的會(huì)話將會(huì)被關(guān)閉。當(dāng)你為一個(gè)器件建立一個(gè)通訊會(huì)話時(shí),通過(guò)使用VISA的I/O程序來(lái)啟動(dòng)與該器

件的通訊。VISA提供了格式化和非格式化的程序。格式化I/O將對(duì)格式化字符下的混合數(shù)據(jù)類(lèi)型進(jìn)行轉(zhuǎn)換。數(shù)據(jù)被存在數(shù)據(jù)緩沖器中,因此是接口的通訊得到最大的優(yōu)化。非格式化I/OI/O自己來(lái)定義。硬件觸發(fā)。事件不會(huì)被傳遞,除非相應(yīng)的事件被啟用。注意:VISA不能回調(diào)VBViEnableEvent來(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)接收事數(shù)viInstallHandler安裝事件句柄,而使用函數(shù)viEnableEvent來(lái)啟動(dòng)一個(gè)或多個(gè)事件。VISA個(gè)句柄可以通過(guò)多次調(diào)用函數(shù)viInstallHandler來(lái)安裝。每次調(diào)用添加到前面的句柄列表中。VISA下面的函數(shù):viInstallHandler(vi,eventType,handler,userHandle);事件發(fā)生時(shí)的通知消息,步驟如下:使用函數(shù)viEnableEvent來(lái)使能一個(gè)或多個(gè)事件。當(dāng)準(zhǔn)備查詢(xún)時(shí),使用函數(shù)viWaitOnEvent來(lái)檢查隊(duì)列事件。有發(fā)生,應(yīng)用程序掛起直至指定的事件發(fā)生或指定的超時(shí)時(shí)間到來(lái)。3函數(shù)信號(hào)發(fā)生器3.1Agilent33250A80MHz函數(shù)/任意波形發(fā)生器介紹AgilentTechnologies33250A是高性能的80MHz復(fù)合函數(shù)發(fā)生器,其具有內(nèi)置任80MHz構(gòu)想。直接數(shù)字合成技術(shù)能獲得穩(wěn)定、精確和低失真的輸出信號(hào)。Agilent33250A能提供您需要的所有波形,其輸出頻率更高達(dá)80MHz。標(biāo)準(zhǔn)輸出sin(x)/x、真流和其它波形。當(dāng)標(biāo)準(zhǔn)信號(hào)還不能滿足您的要求時(shí),33250A200MSa/s的采樣率,12bit分辨率和64K點(diǎn)的存儲(chǔ)器深度,特性是滿足您目前及未來(lái)測(cè)試需求的多用途解決方案AgilentTechnologies33250A的特點(diǎn)如下:?10個(gè)標(biāo)準(zhǔn)波形?內(nèi)置的12位200MSa/s任意波形功能?具有可調(diào)邊沿時(shí)間的精確脈沖波形功能?LCD彩色顯示器可提供數(shù)字和圖形視圖?易用的旋鈕和數(shù)字小鍵盤(pán)?儀器狀態(tài)存儲(chǔ)器用戶(hù)可自定義名稱(chēng)?帶有防滑支腳的便攜式耐用機(jī)箱靈活的系統(tǒng)特性?四個(gè)可下載的64K點(diǎn)任意波形存儲(chǔ)器?GPIB(IEEE-488)接口和RS-232接口為標(biāo)準(zhǔn)配置?SCPI可編程儀器的標(biāo)準(zhǔn)命令兼容AgilentTechnologies33250A函數(shù)/任意波形發(fā)生器的技術(shù)參數(shù)如下:波形正弦波、方波、斜波、脈沖、噪聲、SIN(x)/x,標(biāo)準(zhǔn)波形指數(shù)上升和下降、心律波、真流電壓波形長(zhǎng)度1~64K點(diǎn)非易失性存儲(chǔ)器4個(gè)波形(每一個(gè)漢形1~64K點(diǎn))任意波形幅度分辨率12bit采樣率200MSa/s頻率特性正弦波1μHz~80MHz白噪聲50MHz帶寬方波1μHz~80MHz分辨率1μHz,除脈沖為5個(gè)字三角波1μHz~1MHz準(zhǔn)確度0.3ppm,(18℃~℃)斜波500μHz~50MHzTHD(dc~20kHz)<0.2%+1mVrms其它特性幅度(至50Ω)10mVpp~10Vpp準(zhǔn)確度(1kHz)±1%設(shè)置值±1mVpp調(diào)制AMFSK調(diào)制任何內(nèi)部波形內(nèi)部速率2mHz~1MHz頻率2mHz~20kHz頻率范圍1μHz~80MHz深度0%~120%FM脈沖列調(diào)制任何內(nèi)部波形波形頻率1μHz~80MHz頻率2mHz~20kHz計(jì)數(shù)1~1,000,000或無(wú)窮多個(gè)周期偏移dc~80MHz起始/停止相位-360°~+360°內(nèi)部周期1μ~500s掃描類(lèi)型線性或?qū)?shù)掃描時(shí)間1ms~500s方向上或下標(biāo)記同步信號(hào)下降沿起動(dòng)F/停止F100μHz至80MHz(可編程)時(shí)鐘基準(zhǔn)外部鎖定范圍10MHz±kHz內(nèi)部頻率10MHz3.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)是AgilentTechnologies33250A。所以,上網(wǎng)去搜索關(guān)于該型號(hào)的資源。在安捷倫法(通過(guò)VISAI/O庫(kù)對(duì)輸入輸出操作的支持,并使用該儀器的SCPI-standardmandforprogrammableinstrument命令來(lái)對(duì)儀器進(jìn)行相關(guān)的操作。通過(guò)查看“自動(dòng)測(cè)試系統(tǒng)課本上的例子,對(duì)自己編寫(xiě)函數(shù)信號(hào)發(fā)生器的界面有VISAI/O料,并通過(guò)閱讀,對(duì)VISA庫(kù)中的操作函數(shù)有了一定的認(rèn)識(shí)。如下給出的程序:這個(gè)例子程序的功能是查詢(xún)GPIB器件的型號(hào),并輸出結(jié)果。#include<visa.h>#include<stdio.h>//這里是頭文件,因?yàn)樾枰褂肰ISA的數(shù)據(jù)類(lèi)型和函數(shù)voidmain(){ViSessiondefaultRM,vi;//變量的聲明charbuf[256]={0};viOpenDefaultRM(&defaultRM);//打開(kāi)地址為22的GPIB器件viOpen(defaultRM,"GPIB0::22::INSTR",VI_NULL,VI_NULL,&vi);viPrintf(vi,"*RST\n");//初始化器件viPrintf(vi,"*IDN?\n");//查詢(xún)器件的型號(hào)viScanf(vi,"%t",buf);//讀取結(jié)果printf("Instrumentidentificationstring:%s\n",buf);//打印結(jié)果

viClose(vi);//關(guān)閉會(huì)話viClose(defaultRM);}這里涉及到了5個(gè)VISA函數(shù):viOpenDefaultRM,viOpen,viPrintf,viScanf,viCloseviOpen函數(shù)的功能是建立一個(gè)指定器件的會(huì)話的通道,而會(huì)話具有一個(gè)標(biāo)識(shí),該標(biāo)識(shí)可以被VISA庫(kù)的其他函數(shù)進(jìn)行viOpenDefaultRMviPrintf和viScanf這兩個(gè)函數(shù)在用的編程中的比例是最多的,我發(fā)送SCPI指令就是通過(guò)這兩個(gè)函數(shù)來(lái)進(jìn)行的。函數(shù)viClose是用于關(guān)閉每一關(guān)閉。通過(guò)閱讀VISAVCVISA

來(lái)進(jìn)行編程,需要鏈接VISA庫(kù)-VISA32.LIB。對(duì)VC編譯器配置如下:選擇

Project->Settings并選擇C/C++按鈕,從類(lèi)型列表中選擇CodeGeneration,從

運(yùn)行庫(kù)列表中選擇Multi-ThreadedusingDLL。(VISA在WIN32環(huán)境下需要這些

配置)選擇Project->Settings點(diǎn)擊link按鈕并添加visa32.lib庫(kù)到

Object/LibraryModules列表中。換一種方法是,直接添加庫(kù)到你的工程文件夾

中。頭文件和庫(kù)文件的搜索路徑也可以進(jìn)行更改:選擇Tools->Options點(diǎn)擊

Directories按鈕,就可以對(duì)頭文件和庫(kù)文件的路徑進(jìn)行更改了。在VISA中也學(xué)習(xí)了幾個(gè)接口的編程。VISA支持三種接口來(lái)訪問(wèn)GPIB和VXI儀

器:GPIB,VXI和GPIB-VXI。通過(guò)這三種接口可以對(duì)GPIB和VXI器件進(jìn)行編程。

當(dāng)你使用GPIB-VXI或VXI接口直接訪問(wèn)VXI主機(jī)時(shí)。你必須知道你所要進(jìn)行的

編程的儀器時(shí)基于消息基還是寄存器基的VXIVXI器件擁有自己

SCPIVISA

VISA的輸出函數(shù)來(lái)發(fā)送SCPISCPI命令。在這種情況下,就可以使用VISA的格式化IO或非格式化IO含糊來(lái)對(duì)消息基器件進(jìn)行編程。如果消息基器件有共享內(nèi)存,可以通過(guò)對(duì)寄存器的PEEK和POKE操作來(lái)訪問(wèn)器件的共享內(nèi)存。VISA提供兩個(gè)不同的方法對(duì)寄存器進(jìn)行編程:VXI器件沒(méi)有處理器來(lái)處理高級(jí)的PEEK和POKE命令直接對(duì)器件的寄存器進(jìn)行編程。VISA提供了兩種不同的方法來(lái)對(duì)寄存器基的器件進(jìn)行編程:高級(jí)內(nèi)存函數(shù)低級(jí)內(nèi)存函數(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)的。如下所示:圖3-1如下面的例子:GPIB接口系統(tǒng)由裝由兩個(gè)82350GPIB卡的PC機(jī)和三臺(tái)GPIB儀器通過(guò)GPIB電纜進(jìn)行連接。通過(guò)IO組件對(duì)GPIB卡#1和#2分別配置一個(gè)VISA名字GPIB0和GPIB1。這樣VISA庫(kù)就可以對(duì)其進(jìn)行尋址操作了,如下圖:圖3-2而其他的接口類(lèi)型的配置與連接也是大同小異。對(duì)儀器進(jìn)行編程之前還需要熟悉一下AgilentIO庫(kù)的相關(guān)知識(shí)。從

AgilentIO的安裝向?qū)DF電子資料中了解到了相關(guān)的知識(shí)點(diǎn),也知道了該庫(kù)的

重要作用。AgilentIO庫(kù)軟件由兩個(gè)庫(kù)和四個(gè)IO配置組建加上一個(gè)IO庫(kù)控制組

成。兩個(gè)庫(kù)為AgilentVISA和AgilentSICL。AgilentVISA――

AgilentVirtualInstrumentSoftwareArchitecture(VISA)是一個(gè)開(kāi)發(fā)符合

VXIplug&play標(biāo)準(zhǔn)的I/O應(yīng)用程序和儀器驅(qū)動(dòng)。而

AgilentSICL—AgilentStandardInstrumentControlLibrary(SICL)是一個(gè)

Agilent開(kāi)發(fā)的適合許多IO接口的IO庫(kù)。四個(gè)IO配置組建中的IO配置是被

AgilentIO庫(kù)用來(lái)對(duì)儀器的IOAgilentIO

庫(kù)使用之前必須被IOVISA助手則是一個(gè)應(yīng)

VXI,GPIB以及Serial經(jīng)常通過(guò)該組建來(lái)了解相關(guān)的信息。其他兩個(gè)組件則用的不多。VXI資源管理器是用來(lái)顯示你的系統(tǒng)是否進(jìn)行適當(dāng)?shù)呐渲?,它需要你的系統(tǒng)安裝有E8491IEEE-1394PCLinktoVXI接口;而LANServer是通過(guò)IOConfig對(duì)系統(tǒng)進(jìn)行LANServer的配置。了解了IO庫(kù)的介紹性知識(shí),隨后又對(duì)如何利用IO庫(kù)對(duì)接口進(jìn)行配置的章節(jié)進(jìn)行的閱讀。一個(gè)IO接口可以被定義為硬件接口和軟件接口。IOConfig組件使用的目的是將一個(gè)唯一的軟件接口名字和一個(gè)硬件接口聯(lián)系起來(lái)。IO庫(kù)使用接口名字或邏輯單VISA程序中被函數(shù)viOpen作為一個(gè)參數(shù)進(jìn)行調(diào)用或在SICL程序中被函數(shù)iopen進(jìn)行調(diào)用。IOConfig分配一個(gè)接口名字和一個(gè)邏輯單元數(shù)字給一個(gè)硬件接口,就象其他接口配置參數(shù)一樣。當(dāng)IO接口AgilentVISA或AgilentSICL庫(kù)對(duì)分配的儀器進(jìn)行編程GPIB接口和PC進(jìn)行連接的GPIB儀器進(jìn)行VISA和SICL尋址操作。圖3-3譬如對(duì)GPIB(82357USB)接口進(jìn)行配置,為了對(duì)82357USB/GPIB接口進(jìn)行配置,啟動(dòng)IOConfigGPIB82357USBtoGPIB如下圖:圖3-4如果在你的系統(tǒng)中有多個(gè)82357行配置的接口的SerialNumber并單擊OK會(huì)顯示82357USBtoGPIB配置窗口。在

出現(xiàn)的窗口中設(shè)置VISA接口名字,SICL接口名字,邏輯單元以及總線地址。如

果你的系統(tǒng)中有多個(gè)82357接口的話,重復(fù)配置。圖3-5對(duì)PCI接口82350和82341ISA接口的配置也是類(lèi)似。對(duì)VISA和IO編程的構(gòu)思。3.2.2函數(shù)信號(hào)發(fā)生器的界面以及編程構(gòu)思因?yàn)槲乙瓿扇齻€(gè)模塊的設(shè)計(jì):33250A54622D示波器以及E1412A點(diǎn)擊來(lái)分別進(jìn)入不同的模塊如下圖所示:圖3-6后來(lái)通過(guò)考慮,感覺(jué)這樣的設(shè)計(jì)不夠人性化和可操作性,也不太符合實(shí)際情況。所以通過(guò)反復(fù)的修改最終是如下所示:圖3-7模塊的界面如下:圖3-8在該模塊中可以完成幾種基本波形的產(chǎn)生以及各種基本的調(diào)試功能:正弦波,三

習(xí)慣。自己認(rèn)為也還可以,也不失有點(diǎn)人性化吧!味著自己的編程思路已經(jīng)基本成型了!下面是自己的編程思路結(jié)構(gòu):程操作了。3.2.3函數(shù)信號(hào)發(fā)生器的編程參看了33250A80MHz的函數(shù)/任意波形發(fā)生器的電子資料以及網(wǎng)上關(guān)于該儀器的操作的SCPI指令。望產(chǎn)生一個(gè)正弦波,則輸入下面的語(yǔ)句既

可:viPrintf(funcgen,"function:shapesin\n");就可以產(chǎn)生一個(gè)采用默認(rèn)頻率

和幅值的正弦波了!而viPrintf()就是VISA庫(kù)中的格式化輸入輸出操作函數(shù),

用來(lái)向儀器發(fā)送SCPI指令。在函數(shù)信號(hào)發(fā)生器的編程過(guò)程中,經(jīng)常需要用到這

個(gè)函數(shù),還有格式化輸入函數(shù):viScanf()問(wèn)題:如viPrintf(funcgen,"func:shapetri;freq2000;volt2\n");這條指令就

條語(yǔ)句:viQueryf(funcgen,"AM:SOUR?",buf);該語(yǔ)句的功能是查詢(xún)AM的調(diào)制源

的類(lèi)型并將查詢(xún)到的類(lèi)型字符以%t的格式給buf"AM:SOUR?\n"\n才能使

使用APPL"Appl:sinfreq,volt,dcoffset\n",當(dāng)使用其他函數(shù)產(chǎn)生

時(shí),如下:"FUNCSIN\nFREQfreq\nVOLTvolt\n…\n"或是"FUNCSIN\n;FREQfreq\n;VOLTvolt\n;…\n"可以看出執(zhí)行指令都加上了回車(chē)符\n來(lái)執(zhí)行――只是需要使用分號(hào)來(lái)進(jìn)行隔開(kāi),用逗號(hào)和空格均不行)下面是復(fù)位按鈕的執(zhí)行代碼:圖3-9原理是通過(guò)向儀器發(fā)送IDN的SCPI指令根據(jù)函數(shù)返回值來(lái)進(jìn)行判斷,并給出相關(guān)的信息提示用戶(hù)。除了SCPI命令外,還有IEEE488.2命令,兩種命令之間用分號(hào)隔開(kāi)如下所示:RST;OUTP:LOADINF\n又如:TRIG:SOURBUS;TRG\n連接多個(gè)SCPI命令時(shí),使用分號(hào)和冒號(hào)(冒號(hào)表示不同的命令系統(tǒng))如:OUTP:LOAD50;:APPL:RAMP注意:函數(shù)viPrintf()和viScanf()都是單向的傳送命令和數(shù)據(jù),而函數(shù)viQueryf()令"FREQ?\nVOLT?\n"問(wèn)題:Cstringm_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_sVolt是同一個(gè)值,當(dāng)把語(yǔ)句改為如下的形式的時(shí)候就正常了:

Cstringm_sFreq,m_sVolt;viQueryf(vi,"Freq?\n","%t",m_sFreq);SetDlgItem

Text(ID0,m_sFreq);viQueryf(vi,"Volt?\n","%t",m_sVolt);SetDlgItemText(ID1,m_sVolt);

這也表示SCPI查詢(xún)命令不允許執(zhí)行多個(gè),只能一條一條的執(zhí)行,否則,最后的

結(jié)果會(huì)是以最后一條查詢(xún)指令的結(jié)果。通過(guò)反復(fù)的測(cè)試之后,理解了SCPI命令的執(zhí)行的一些格式及語(yǔ)法之后,就開(kāi)始

我的編程。下面列出了函數(shù)信號(hào)發(fā)生器的部分執(zhí)行代碼://這是一個(gè)switchnID_Select_Modul保存的是用//戶(hù)選擇的調(diào)制方式的ID。通過(guò)GetCheckedRadioButton()函數(shù)獲得。switch(nID_Select_Modul)//對(duì)用戶(hù)通過(guò)單選按鈕選擇的調(diào)制參數(shù)的判斷{caseIDC_RADIO_BW://無(wú)調(diào)制情況viPrintf(/*funcgen*/theApp.m_Session,"OUTPut:LOAD%s\n",m_nResistance);//輸出端的設(shè)置viPrintf(/*funcgen*/theApp.m_Session,"OUTPut:SYNC%s\n",m_nSignal);//設(shè)置同步信號(hào)CheckWaveRadioButton();//這是一個(gè)自己定義的函數(shù),對(duì)用戶(hù)的波形的選擇進(jìn)行判斷-將波形的字符串存儲(chǔ)在m_nBaseShape中,該函數(shù)的具體代碼將會(huì)在附錄中給出。//判斷用戶(hù)選擇的波形是否是方波,并通過(guò)函數(shù)viPrintf來(lái)進(jìn)行各種SCPI命令的執(zhí)行if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_FWAVE){viPrintf(/*funcgen*/theApp.m_Session,"FUNC%s\n",m_nBaseShape);viPrintf(/*funcgen*/theApp.m_Session,"FREQ%f\n",m_nFreq);viPrintf(/*funcgen*/theApp.m_Session,"VOLT%f\n",m_nAmpl);viPrintf(/*funcgen*/theApp.m_Session,"VOLT:OFFS%f\n",m_nOffs);viPrintf(/*funcgen*/theApp.m_Session,"FUNC:SQU:DCYC%f\n",m_nDcycle);}//判斷用戶(hù)選擇的是否是任意波elseif(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_ARBI){error=viPrintf(/*funcgen*/theApp.m_Session,"APPL:USER%f,%f,%f\n",m_nFreq,m_nAmpl,m_nOffs);if(error!=VI_SUCCESS){error_handler(/*funcgen*/theApp.m_Session,error);

break;}viPrintf(/*funcgen*/theApp.m_Session,"FUNC:USER%s\n",WaveForm.m_Arbitrary);}else{error=viPrintf(/*funcgen*/theApp.m_Session,"APPL:%s%f,%f,%f\n",m_nBaseShape,m_nFreq,m_nAmpl,m_nOffs);//這里的參數(shù)需要用戶(hù)自己添加if(error!=VI_SUCCESS){error_handler(/*funcgen*/theApp.m_Session,error);break;}}MessageBox("Successfully!");//給一個(gè)提示框--明示用戶(hù)的操作break;出。用的儀器都需要建立連接,并且都要調(diào)用VISA函數(shù)viOpenDefaultRM來(lái)打開(kāi)資

源管理器,這個(gè)函數(shù)會(huì)初始化VISA系統(tǒng),包括資源管理系統(tǒng);如果在沒(méi)有器件

viClose對(duì)資源會(huì)話和其他會(huì)話

出對(duì)話框以提供用戶(hù)的輸入操作:圖3-10個(gè)參數(shù)都有其初始值以方便用戶(hù)。對(duì)于其中的數(shù)據(jù)的處理比較簡(jiǎn)單:通過(guò)VC的ClassWizard對(duì)界面中的各個(gè)控件進(jìn)行變量的定義,以接收用戶(hù)的數(shù)據(jù)的輸入:圖3-11在程序的編寫(xiě)過(guò)程中也遇到了一些問(wèn)題:譬如,多個(gè)單選按鈕如何組合在一起,

實(shí)現(xiàn)呢?通過(guò)查找書(shū)本上介紹的例子,首先進(jìn)行一些測(cè)試?yán)?。測(cè)試通過(guò)之后,

再在程序中進(jìn)行運(yùn)用。但是也會(huì)遇上這樣那樣的一些問(wèn)題:例子中能進(jìn)行正確的

外一組的單選按鈕出現(xiàn)了沖突。當(dāng)時(shí)我就有點(diǎn)懵了。怎么會(huì)出現(xiàn)這樣的情況

呢??思索了蠻久,使自己對(duì)VC中的resource.h中都是一些關(guān)于控件IDID資源沖突了呢?!通過(guò)自己的仔

細(xì)的研究和思索,發(fā)現(xiàn)了另外一個(gè)問(wèn)題:在該文件中有許多自己并沒(méi)有使用到的

空閑IDID于是我就將其全部的進(jìn)行刪除。感覺(jué)ID就干凈了許多。但是,前面的問(wèn)題還沒(méi)

有解決??!于是我對(duì)單選按鈕的IDID的

順序也是交叉的。并沒(méi)有順序的進(jìn)行ID的定義。我懷疑是這個(gè)原因,于是對(duì)混

亂的ID進(jìn)行的重新的排序。并將不同的兩組ID果一切OK!圖3-12象這樣的問(wèn)題,如果沒(méi)有碰上過(guò),也是有點(diǎn)不知所措的。這是我的小小的心得哦??!3.2.4函數(shù)信號(hào)發(fā)生器的程序的調(diào)試在調(diào)試前,先進(jìn)行IOConfig的配置,并通過(guò)VISA助手進(jìn)行儀器的連接的測(cè)試,通過(guò)之后,開(kāi)始調(diào)試程序。我進(jìn)行分塊的調(diào)試:首先是調(diào)試產(chǎn)生不同波形的功能塊是否正常。圖3-13相應(yīng)的程序如下://******以下是對(duì)單選按鈕的處理函數(shù),通過(guò)單擊按鈕來(lái)進(jìn)行相應(yīng)的操作voidCGENERATER::OnRadioSin(){m_nEdit_(FALSE);}voidCGENERATER::OnRadioTriangle(){m_nEdit_(FALSE);}voidCGENERATER::OnRadioFwave(){m_nEdit_(TRUE);}voidCGENERATER::OnRadioRamp(){m_nEdit_(FALSE);}等等//********************************************以下是對(duì)基本波形選擇處理函數(shù)voidCGENERATER::CheckWaveRadioButton()

{intnID_SelectWaveF;nID_SelectWaveF=GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC);

switch(nID_SelectWaveF){//添加處理代碼--即是對(duì)波形參數(shù)賦值caseIDC_RADIO_SIN:m_nBaseShape="SIN";break;

caseIDC_RADIO_TRIANGLE:m_nBaseShape="TRI";break;

caseIDC_RADIO_FWAVE:m_nBaseShape="SQU";break;

caseIDC_RADIO_RAMP:m_nBaseShape="RAMP";break;caseIDC_RADIO_ARBI:m_nBaseShape=m_nArbdlg.m_nSet_Arbitrary;break;caseIDC_RADIO_NOISE:m_nBaseShape="NOISE";break;caseIDC_RADIO_PULSE:m_nBaseShape="PULSE";break;caseIDC_RADIO_DC:m_nBaseShape="DC";break;default:return;}}上面是對(duì)用戶(hù)的選擇進(jìn)行的變量的賦值以備后用。下面就是產(chǎn)生各種函數(shù)的部分(部分代碼):viPrintf(/*funcgen*/m_Session,"OUTPut:LOAD%s\n",m_nResistance);//輸出端的設(shè)置viPrintf(/*funcgen*/m_Session,"OUTPut:SYNC%s\n",m_nSignal);//設(shè)置同步信號(hào)形的相應(yīng)的參數(shù)傳遞給一個(gè)字符串變量中。CheckWaveRadioButton();//波形選擇的判斷--將波形的字符串存儲(chǔ)在m_nBaseShape中//**********************************判斷用戶(hù)選擇的波形是否是方波

if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_FWAVE){

viPrintf(/*funcgen*/m_Session,"FUNC%s\n",m_nBaseShape);

viPrintf(/*funcgen*/m_Session,"FREQ%f\n",m_nFreq);

viPrintf(/*funcgen*/m_Session,"VOLT%f\n",m_nAmpl);

viPrintf(/*funcgen*/m_Session,"VOLT:OFFS%f\n",m_nOffs);

viPrintf(/*funcgen*/m_Session,"FUNC:SQU:DCYC%f\n",m_nDcycle);

}//******************************判斷用戶(hù)選擇的是否是任意波

Elseif(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_ARBI)

{error=viPrintf(/*funcgen*/m_Session,"APPL:USER%f,%f,%f\n",m_nFreq,m_nAmpl,m_nOffs);if(error!=VI_SUCCESS){error_handler(/*funcgen*/m_Session,error);break;}viPrintf(/*funcgen*/m_Session,"FUNC:USER%s\n",WaveForm.m_Arbitrary);}else{error=viPrintf(/*funcgen*/m_Session,"APPL:%s%f,%f,%f\n",m_nBaseShape,m_nFreq,m_nAmpl,m_nOffs);//這里的參數(shù)需要用戶(hù)自己添加if(error!=VI_SUCCESS){error_handler(/*funcgen*/m_Session,error);break;}}MessageBox("Successfully!");//給一個(gè)提示框--明示用戶(hù)的操作break;行另行的處理。其中下面的語(yǔ)句給我?guī)?lái)了一定的問(wèn)題:nID_Select_Modul=GetCheckedRadioButton(IDC_RADIO_BW,IDC_RADIO_FM);

//問(wèn)題的關(guān)鍵就出現(xiàn)在這里--該函數(shù)沒(méi)有執(zhí)行--2005、4、28//問(wèn)題解決了!!

原來(lái)是單選按鈕的ID的值的大小問(wèn)題!!//在該函數(shù)中,小的在前,大的在

后!!!--200529ID在這個(gè)函數(shù)中是有大小區(qū)分的,

思索著是否是IDresource.h文件中的ID的關(guān)系。最后,對(duì)自己的猜測(cè)進(jìn)行試驗(yàn),結(jié)果一切OK了?。 霸囼?yàn)是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)”是一個(gè)不變的真理。鈕中加入了一個(gè)無(wú)調(diào)制的按鈕,并作為一個(gè)默認(rèn)的設(shè)置,如下圖:圖3-14個(gè)對(duì)話框:圖3-15并列有標(biāo)題,清晰可見(jiàn)。而各種參數(shù)的數(shù)值的傳遞,我是通過(guò)兩組變量進(jìn)行的。ClassWizard進(jìn)行定義,這樣方便數(shù)據(jù)的交換,也方便自己的數(shù)據(jù)的處理工作。切從用戶(hù)的方便操作來(lái)進(jìn)行考慮。4示波器模塊4.1Agilent54622D100MHz混合信號(hào)示波器介紹Agilent54622DMSO100MHz的帶寬,200MS/S采樣率,2MB通道的MegaZoom深存儲(chǔ)器以及2+16通道有2個(gè)模擬通道和16個(gè)數(shù)字通道,組合了示波器對(duì)信號(hào)的詳盡分析和邏輯分析儀的多通道定時(shí)測(cè)量能力。其中MegaZoom技術(shù)把常規(guī)深存儲(chǔ)器數(shù)字示波器的優(yōu)點(diǎn)與傳統(tǒng)模擬示波器的響應(yīng)能力和更新率結(jié)合在一起常規(guī)深存儲(chǔ)器數(shù)字式示波器,能夠捕獲長(zhǎng)的時(shí)間間隔同時(shí)保持高取樣率MegaZoom技術(shù)保持了深存儲(chǔ)器的優(yōu)點(diǎn)而并沒(méi)有在通常深存儲(chǔ)器中常見(jiàn)的遲鈍MegaZoom技術(shù)在示波器探頭與示波器顯示間的信號(hào)數(shù)據(jù)通路中融入多處理器體系結(jié)構(gòu),因此在查看采集數(shù)據(jù)時(shí)能迅速響應(yīng)平移和縮放控制MegaZoom技術(shù)把更新率即時(shí)控制響應(yīng)和創(chuàng)新的深存儲(chǔ)器融于一體使您能以高取樣率捕獲長(zhǎng)時(shí)間周期并且不管是在運(yùn)行中還是在停止后都能立即放大所關(guān)注的信號(hào)細(xì)節(jié)在一臺(tái)示波器中組合了深存儲(chǔ)器前面板響應(yīng)能力和顯示屏更新率因此就不需要選擇特定的工作模式或存儲(chǔ)器深度。以下是54620系列的數(shù)字示波器的參數(shù)對(duì)照表:?54620系列54621A54621D54622A54622D54624A示波器通道數(shù)22224帶寬60MHZ60MHZ100MHZ100MHZ100MHZ采樣率400MSa/s最大輸入(dc+峰值ac)400V分辨率8bit量程(每格)1mV-5V邏輯通道N/A16N/A16N/A8通道有效400MSa/s400MSa/s采樣率16通道有效200MSa/s200MSa/s500mVppmin500mVppmin輸入電平+40Vmax+40Vmax示波器通道2MB/ch2MB/ch2MB/ch2MB/ch2MB/ch存儲(chǔ)器單接口夾8MB/ch8MB/ch邏輯通道雙接口夾4MB/ch4MB/ch時(shí)基(每格)5ns-50s觸發(fā)邊沿,脈沖寬度,模式,序列,持續(xù)時(shí)間和新的I2C峰檢測(cè)5ns測(cè)量峰直,平均直,有效值,頻率,周期,脈沖寬度,上升/下降時(shí)間波形運(yùn)算相減,相乘,F(xiàn)FT,積分,微分存儲(chǔ)內(nèi)裝的軟盤(pán)連接性標(biāo)準(zhǔn)配置的RS-232和并行接口,可選GPIB內(nèi)裝幫助9種語(yǔ)言的快速幫助4.2Agilent54622D100MHz混合信號(hào)示波器界面設(shè)計(jì)和編程在進(jìn)行界面設(shè)計(jì)之前,我通過(guò)安捷倫網(wǎng)站下載了其相關(guān)的資料:54620/40-seriesOscilloscopesProgrammer'sGuide通過(guò)該資料我了解了該數(shù)字示波器的工作原理:示波器初始化數(shù)據(jù)采集數(shù)據(jù)分析圖4-2能不行了。程序的初始化包括定義和初始化變量、分配內(nèi)存或測(cè)試系統(tǒng)的配置;控制器的初始化確保連接示波器的接口(GPIB/RS-232)能正確的建立以及準(zhǔn)備時(shí)間軸與采集類(lèi)型。一旦初始化正確,就可以進(jìn)行數(shù)據(jù)的采集工作了。注意:當(dāng)示波器響應(yīng)從控制器有采集回來(lái)的數(shù)據(jù)將會(huì)被放棄。采集數(shù)據(jù)是通過(guò)執(zhí)行:DIGITIZE分析。而當(dāng)指令:DIGITIZE正在工作的時(shí)候,其他的指令將會(huì)被放入緩沖區(qū)直至該指令執(zhí)行完畢。測(cè)量之前示波器至少完成了一個(gè)采集工作。安捷倫并不推薦這種方式,因?yàn)檠h(huán)等待的時(shí)間是會(huì)變化的,促使你的程序的崩潰。另外,:DIGITIZE當(dāng)完成采集時(shí),會(huì)停止采集工作以至于所有測(cè)量是針對(duì)所顯示的數(shù)據(jù)而不是針對(duì)改變了的數(shù)據(jù)。你可以使用指令:waveform來(lái)進(jìn)行數(shù)據(jù)的讀取并返回給計(jì)算機(jī),并通過(guò)自己編寫(xiě)的程序進(jìn)行數(shù)據(jù)的分析處理。構(gòu)),下面是我的程序的結(jié)構(gòu)(詳細(xì)):較的簡(jiǎn)明清楚。下面是我的大體界面:圖4-3這里的界面和函數(shù)信號(hào)發(fā)生器的類(lèi)似:有復(fù)位按鈕、信息按鈕等。測(cè)量時(shí)可以對(duì)數(shù)進(jìn)行了默認(rèn)的設(shè)置,方便用戶(hù)的設(shè)置。在示波器的編程過(guò)程中,有兩個(gè)難題:數(shù)據(jù)的采集和數(shù)據(jù)的顯示問(wèn)題。波形數(shù)據(jù)包括引導(dǎo)數(shù)據(jù)和波形數(shù)據(jù):引導(dǎo)數(shù)據(jù)通過(guò)指令:WAVE:PRE來(lái)對(duì)選擇的波形進(jìn)行的相關(guān)信息如下所示:FORMATTYPEPOINTSCOUNTXINCREMENTXORINGINXREFERENCE、YINCREMENT、YORIGIN、YREFERENCE其中,詳細(xì)信息如下:FORMANT:從示波器傳送給計(jì)算機(jī)的數(shù)據(jù)的格式化字符;0表示BYTE,1表示W(wǎng)ORD

格式,2表示ASCII格式,用一個(gè)整數(shù)表示(由指令:WAVEFORM:FORMAT進(jìn)行設(shè)置)

TYPE:0表示正常模式,1表示PEAK模式,2表示平均模式,用一個(gè)整數(shù)表示(有指令:ACQUIRE:TYPE來(lái)進(jìn)行設(shè)置)POINTS:數(shù)據(jù)傳送的個(gè)數(shù)COUNT:該參數(shù)常為1XINCREMENT:該參數(shù)是指當(dāng)前的通道源的時(shí)間增益(在兩個(gè)連續(xù)數(shù)據(jù)之間)XORIGIN:在內(nèi)存中的第一個(gè)數(shù)據(jù)值XREFERENCE:與X-ORIGIN相聯(lián)系的數(shù)據(jù)點(diǎn)的索引值,該值經(jīng)常是0YINCREMENT:該參數(shù)是指當(dāng)前的通道源的電壓增益(在兩個(gè)連續(xù)數(shù)據(jù)之間)YORIGIN:該參數(shù)是指當(dāng)前的通道源的Y的原點(diǎn)值YREFERENCE:該參數(shù)指的是Y-ORIGIN起點(diǎn)的數(shù)據(jù)值只有正確的讀回引導(dǎo)數(shù)據(jù)才能結(jié)合下面的波形數(shù)據(jù)進(jìn)行計(jì)算出真正的實(shí)際波形數(shù)據(jù)值。通過(guò)指令:waveform:data?來(lái)查詢(xún)采樣回來(lái)的二進(jìn)制數(shù)據(jù)塊(使用ieee488.2任意數(shù)據(jù)塊格式)。通過(guò)指令:waveform:unsigned,:waveform:byteorder,:waveform:format中的任意一個(gè)指令來(lái)對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行格式化操作。而該數(shù)據(jù)點(diǎn)的個(gè)數(shù)是由指令:waveform:points來(lái)進(jìn)行設(shè)定的。該二進(jìn)制數(shù)據(jù)塊由兩個(gè)部分組成:<header><waveformdatablock><nl>舉個(gè)例子:<header>=#48”#8”會(huì)從頭部去掉,而留下數(shù)值部分,表示波形數(shù)據(jù):waveform:points來(lái)設(shè)置數(shù)據(jù)點(diǎn)的數(shù)據(jù)和波形數(shù)據(jù)的部分代碼:ViStatuserror;viPrintf(/*oscillograph*/m_Session,":ACQ:COMPLETE100\n");

viPrintf(/*oscillograph*/m_Session,":wave:points2000\n");

viPrintf(/*oscillograph*/m_Session,":DIGITIZE%s\n",osciset.m_Channel)

;//************************************preamble的采集***************************************viPrintf(/*oscillograph*/m_Session,":waveform:preamble?\n");error=viScanf(/*oscillograph*/m_Session,"%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n",&preamble[0],&preamble[1],&preamble[2],&preamble[3],&preamble[4],&preamble[5],&preamble[6],&preamble[7],&preamble[8],&preamble[9]);if(error!=VI_SUCCESS){error_handler(/*oscillograph*/m_Session,error);return;}//************************************數(shù)據(jù)點(diǎn)的采集部分**************************************//利用字符轉(zhuǎn)換符和viScanf函數(shù)來(lái)進(jìn)行讀取數(shù)據(jù)并定義一個(gè)無(wú)符號(hào)的字符數(shù)組來(lái)對(duì)讀//取的數(shù)據(jù)進(jìn)行存儲(chǔ)--隨后進(jìn)行數(shù)據(jù)//**************************************的轉(zhuǎn)換和數(shù)據(jù)的處理---200517viPrintf(/*oscillograph*/m_Session,":waveform:data?\n");unsignedchartemp[2000];for(inti=0;i<2000;i++){error=viScanf(/*oscillograph*/m_Session,"%c",&temp[i]);if(error!=VI_SUCCESS){error_handler(/*oscillograph*/m_Session,error);return;}}//*****************************************數(shù)據(jù)的轉(zhuǎn)換*****************************************intj=0;for(i=18;i<2000;i+=20,j++){temp[j]=(int)temp[i];n++;//數(shù)據(jù)的個(gè)數(shù)}數(shù)據(jù)采集這一塊我花了不少的時(shí)間,不斷的對(duì)指令進(jìn)行測(cè)試,但是以為只要通過(guò):waveform:data?指令然后進(jìn)行讀取就OK給難住了!二進(jìn)制數(shù)據(jù)該怎么讀呢??從安捷倫網(wǎng)站上下載下來(lái)的資料中雖然提供了怎樣進(jìn)行波形數(shù)據(jù)的讀取的方法,但它并沒(méi)有給出在VISA情況下的數(shù)據(jù)的讀取的方法。但是它也給了我一定的提示:頭部給出了數(shù)據(jù)塊的字節(jié)的個(gè)數(shù),測(cè)試,一切OK!我好高興~~~~~理,并將數(shù)據(jù)傳遞給給類(lèi)的一個(gè)數(shù)組就可以了??!//*****************************************數(shù)據(jù)的轉(zhuǎn)換*****************************************intj=0;for(i=18;i<2000;i+=20,j++){temp[j]=(int)temp[i];n++;//數(shù)據(jù)的個(gè)數(shù)}//*****************************************數(shù)據(jù)存儲(chǔ)*******************************************for(intk=0;k<n;k++){m__data[k]=(((float)temp[k]-preamble[9])*preamble[7]+preamble[8])*m_Y;//這里使用Y}Invalidate();//這個(gè)用于屏幕畫(huà)面的刷新對(duì)來(lái)說(shuō)要容易的些!下面是示波器顯示窗口部分初始化代碼://*******下面是另外一種方法---更方便控制示波器的顯示的尺度,也就是在對(duì)

話框模板上//改一下它的ID,然//后通過(guò)下列語(yǔ)句來(lái)進(jìn)行創(chuàng)建顯示CRectm_nRect;CStatic*pStatic=(CStatic*)GetDlgItem(IDC_STATIC_SHOW);pStatic->GetClientRect(&m_nRect);m_(IDC_STATIC_SHOW,this);m_Static.m_rect=m_nRect;m_Static.m_nStaticLeft=m_+20;m_Static.m_nStaticTop=m_+15;m_Static.m_nStaticRight=m_-3;m_Static.m_nStaticBottom=m_-16;的示波器更完美。于是就添加了兩個(gè)Slider控件來(lái)控制波形的拉伸,起初的設(shè)計(jì)就是刷新窗口的問(wèn)題:因?yàn)橥ㄟ^(guò)滑塊來(lái)改變XY上網(wǎng)咨詢(xún),論壇的朋友建議我使用線程函數(shù)進(jìn)行對(duì)特定的窗口進(jìn)行刷新。于是,:staticCEventg_End;//事件對(duì)象的建立structdata//需要傳遞的數(shù)據(jù){CRectrect;COSCILLOGRAPH*dlg;CStatic*m_pCS;}m_Data;//***************************關(guān)鍵的線程函數(shù)UINTThreadProc(LPVOIDparam){if(::WaitForSingleObject(g_End,0)==WAIT_OBJECT_0)//該語(yǔ)句用來(lái)判斷是否掛起或結(jié)束線程{data*p=(data*)param;//現(xiàn)閃屏問(wèn)題p->m_pCS->InvalidateRect(p->rect,TRUE);g_();return0;}return0;}5萬(wàn)用表模塊5.1AgilentE1412A6.5高精度萬(wàn)用表介紹安捷倫的E1412A6位半高精度萬(wàn)用表是一個(gè)規(guī)格為C,具有一個(gè)槽,基于消息基的VXI模塊,它與E1312A模塊只是規(guī)格上的不同。它具有更多的功能和更高的5位半的萬(wàn)用表相當(dāng)。該萬(wàn)用表提供了廣泛的測(cè)量功TTL輸出和直流電壓比ac/dcac/dc2-4線電阻和頻率與周期的測(cè)65次范圍變化和每秒30次函數(shù)變化。5.2AgilentE1412A6.5高精度萬(wàn)用表界面設(shè)計(jì)和編程通過(guò)閱讀AgilentE1412AAgilentE1412A能進(jìn)行高精度的測(cè)量誤差。在使用手冊(cè)中給出了一些常見(jiàn)的錯(cuò)誤,并提供了一些解決的辦法。譬如在DC電壓測(cè)量過(guò)程中,就會(huì)遇上如下的一些常見(jiàn)的錯(cuò)誤:等,都提供了一些解決的思路。而在進(jìn)行測(cè)量之前也需要對(duì)萬(wàn)用表進(jìn)行適當(dāng)?shù)呐渲?比如說(shuō)AC三種不同的ACAC電壓以及電流測(cè)DCDC電壓范圍的輸入阻抗是10100mVdc,1Vdcand10Vdc范圍的直流電壓設(shè)置輸入阻抗高于10G用戶(hù)手冊(cè)中都給出了說(shuō)明。最簡(jiǎn)單的測(cè)量是通過(guò)使用MEASURE量和置數(shù)據(jù)于緩沖區(qū)以便計(jì)算機(jī)利用IO命令的讀取。一條MEASURE命令將會(huì)啟1塊的輸出緩沖區(qū)滿時(shí),測(cè)量將會(huì)停止直至有空間來(lái)存儲(chǔ)數(shù)據(jù)時(shí)才重新啟動(dòng)測(cè)量。譬如:*RST//復(fù)位萬(wàn)用表MEAS:VOLT:DC?//配置dc電壓測(cè)量,并從萬(wàn)用表返回?cái)?shù)據(jù)ENTERstatement//將數(shù)據(jù)傳送給計(jì)算機(jī)而指令read?也是可以用來(lái)啟動(dòng)測(cè)量的,在使用read?指令之前,需要使用所需

的測(cè)量函數(shù)對(duì)萬(wàn)用表進(jìn)行配置。該命令啟動(dòng)測(cè)量并將數(shù)據(jù)直接放入輸出緩沖區(qū),

接著由用戶(hù)提供IOread?指令可以啟動(dòng)多

個(gè)測(cè)量(如果觸發(fā)數(shù)或采樣數(shù)大于1塊的輸出緩沖區(qū)滿時(shí),測(cè)量將會(huì)停止直至有空間來(lái)存儲(chǔ)數(shù)據(jù)時(shí)才重新啟動(dòng)測(cè)量。

read?指令被分解為兩個(gè)命令:init和fetc?.指令init置萬(wàn)用表于等待觸發(fā)狀

fetc?

將萬(wàn)用表的內(nèi)存中的數(shù)據(jù)輸出到輸出緩沖區(qū)中并由計(jì)算機(jī)取回?cái)?shù)據(jù)。注意:在使

用init和fetc?命令時(shí)應(yīng)當(dāng)小心,萬(wàn)用表的內(nèi)部存儲(chǔ)器的容量只有有512個(gè)字

節(jié),超過(guò)該范圍的最先的數(shù)據(jù)將會(huì)被丟棄。每個(gè)測(cè)量以LFHP-IBEndorIndentify信號(hào)將會(huì)在最后一個(gè)字節(jié)

被發(fā)送。如果多個(gè)測(cè)量被返回,測(cè)量值會(huì)以逗號(hào)分隔,EOI也會(huì)在最后一個(gè)字節(jié)

被發(fā)送。例如:+1.23456E+LF,+1.234567E+12LF,+1.23456E+12LFEOI。做外部觸發(fā)測(cè)量時(shí),必須提供TTL外部觸發(fā)信號(hào)到BNC(同軸電纜插接件);測(cè)量:Configure命令并不啟動(dòng)測(cè)量。:萬(wàn)用表的初始化觸發(fā)器、輸入輸出配置樣的:采用多選按鈕,也就意味著可以不選,采用默認(rèn)的參數(shù)值;而用戶(hù)如果需測(cè)量配置配置測(cè)量函數(shù)和參數(shù)以及要設(shè)置的話,則單會(huì)彈出一個(gè)對(duì)話框提參數(shù)的附加參數(shù)圖5-1上面就是我的啟動(dòng)測(cè)量式信息框的形式來(lái)對(duì)測(cè)量結(jié)果進(jìn)行顯示。這里給出了程序的部分代碼如下://結(jié)果顯示中的//控件進(jìn)行傳遞的viPrintf(/*multimeter*/theApp.m_Session,"SAMPLE:COUNT%s\n",m_nStr_Sample);viPrintf(/*multimeter*/theApp.m_Session,"INPUT:IMPEDANCE:AUTO%s\n",m_nStr_Input);viPrintf(/*multimeter*/theApp.m_Session,"OUTPUT:%s\n",m_nStr_Output);//置操作//通過(guò)變量m_btrigger進(jìn)行判斷if(m_btrigger==1){viPrintf(/*multimeter*/theApp.m_Session,"TRIG:SOURCE%s\n",SetParam.m_nTrigger_Source);viPrintf(/*multimeter*/theApp.m_Session,"TRIG:COUNT%s\n",SetParam.m_nTrigger_Count);viPrintf(/*multimeter*/theApp.m_Session,"TRIG:DELAY%s\n",SetParam.m_nTrigger_Delay);//這里要對(duì)延時(shí)做處理判斷//*******************參數(shù)是否已經(jīng)被選擇的判斷200522*********************intm_nID;m_nID=GetCheckedRadioButton(IDC_RADIO_VOLTAGE,IDC_RADIO_PERIOD);if(m_nID==0){MessageBox("請(qǐng)先選擇測(cè)量參數(shù)!","提示信息",MB_OK);return;}switch(m_nID)//通過(guò)這個(gè)switch語(yǔ)句對(duì)用戶(hù)選擇的測(cè)量參數(shù)的判斷{caseIDC_RADIO_VOLTAGE://電壓測(cè)量viPrintf(/*multimeter*/theApp.m_Session,"CONF:VOLT:%s%s,%s\n",SetParam.m_nParam_Type,SetParam.m_nParam_Range,SetParam.m_nParam_Resolution);if("DC"==SetParam.m_nParam_Type){viPrintf(/*multimeter*/theApp.m_Session,"VOLT:DC:%s\n",SetParam.m_nParam_Aper);viPrintf(/*multimeter*/theApp.m_Session,"VOLT:DC:%s\n",SetParam.m_nParam_NPLC);}break;………………//通過(guò)如下的SCPI命令啟動(dòng)測(cè)量viPrintf(/*multimeter*/theApp.m_Session,"INIT;FETC?\n");//通過(guò)函數(shù)viScanf()來(lái)讀取讀取數(shù)據(jù),并通過(guò)一個(gè)彈出式信息框?qū)y(cè)量結(jié)果進(jìn)行顯示charbuff[100];viScanf(/*multimeter*/theApp.m_Session,"%s",buff);CStringtemp;("Resultis%s",buff);MessageBox(temp,"測(cè)量結(jié)果顯示",MB_OK);以工作進(jìn)度就相對(duì)來(lái)的快一些,關(guān)鍵的的問(wèn)題還在于程序的調(diào)試上。6測(cè)試系統(tǒng)的測(cè)試舉例6.1利用函數(shù)信號(hào)發(fā)生器調(diào)頻波和調(diào)制波的實(shí)現(xiàn)首先,運(yùn)行主程序如下:如左圖所示,通過(guò)單擊查找資源按鈕來(lái)搜索儀器并通過(guò)一個(gè)列表控件將有效的資源列于表中,通過(guò)雙擊列表框中的資源地址來(lái)激活建立會(huì)話按鈕從而允許用戶(hù)建立會(huì)話(會(huì)話建立成功與否會(huì)提數(shù)中,對(duì)地址進(jìn)行有效的判斷,從而無(wú)需用戶(hù)來(lái)通過(guò)單擊此按鈕來(lái)搜索儀器資源記憶儀器的地址,即使單擊錯(cuò)誤也沒(méi)有什么關(guān)圖6-1系,重新進(jìn)行建立即可。一部分:圖6-2過(guò)自己的示波器軟件對(duì)波形進(jìn)行讀取操作,得到如下的波形圖:圖6-3以上是調(diào)頻波的實(shí)現(xiàn)過(guò)程。下面是調(diào)幅波的實(shí)現(xiàn):圖6-4調(diào)幅波的實(shí)現(xiàn)過(guò)程如圖所示,和調(diào)頻波類(lèi)似,其結(jié)果如下圖:圖6-5函數(shù)信號(hào)發(fā)生器可以實(shí)現(xiàn)基本的功能,不過(guò)在某些細(xì)節(jié)方面也存在一定的問(wèn)題,數(shù)字或字符等)以及對(duì)參數(shù)單位處理操作。這些都是需要改進(jìn)的地方。6.2利用示波器實(shí)現(xiàn)對(duì)波形的顯示54622D生器的會(huì)話,并建立與該示波器的會(huì)話來(lái)進(jìn)行數(shù)據(jù)的測(cè)量以及波形的顯示操作。樣顯示了,需要重新的退出再建立會(huì)話才行(這個(gè)問(wèn)題是在調(diào)試的過(guò)程中發(fā)現(xiàn)事項(xiàng)。下面是軟面板示波器對(duì)采集回來(lái)的數(shù)據(jù)的處理以及顯示部分:X軸的波形的縮放操作,Y軸的縮放功能沒(méi)有被實(shí)現(xiàn)(當(dāng)設(shè)法去實(shí)現(xiàn)Y軸的縮放通過(guò)建立一個(gè)單獨(dú)的CMyStatic即可,所以在Y軸縮放的處理上就出現(xiàn)了問(wèn)題,而相對(duì)來(lái)說(shuō),X軸就比較的容易20059)同樣,調(diào)節(jié)滑塊也能實(shí)現(xiàn)Y軸的縮放功能。下面給出了利用示波器進(jìn)行數(shù)據(jù)的測(cè)量的例子,如圖:頻率的測(cè)量:圖6-6電壓的測(cè)量:圖6-7來(lái)進(jìn)行顯示,這種顯示方式直觀方便。6.3利用萬(wàn)用表模塊實(shí)現(xiàn)測(cè)量圖:可以看到在資源列表中,有許多資源的地址。用戶(hù)只要選中一個(gè)地址,并相那樣。圖6-8萬(wàn)用表的主界面如下圖:圖6-9當(dāng)用戶(hù)選擇測(cè)量的是DC電壓時(shí)才激活。下面是電壓的測(cè)量示意圖:圖6-10/電流、2線/4線、周期/頻率以及公共參數(shù)設(shè)置好參數(shù)后,就可以通過(guò)測(cè)量按鈕來(lái)執(zhí)行測(cè)量操作,如下圖:圖6-11是否真的放棄過(guò)去參數(shù)的配置,如下圖:圖6-12許多方面都本著人性化的設(shè)計(jì)考慮,盡量的使用戶(hù)的操作顯得簡(jiǎn)單和明了。7開(kāi)發(fā)的心得和體會(huì)通過(guò)這個(gè)課題的開(kāi)發(fā)制作,首先,讓我認(rèn)識(shí)了虛擬儀器,這種比傳統(tǒng)儀器更為先進(jìn)的儀器結(jié)合了現(xiàn)代計(jì)算機(jī)技術(shù)、測(cè)量技術(shù)、顯示技術(shù)/控制技術(shù)、

傳感器技術(shù)以及網(wǎng)絡(luò)技術(shù)等當(dāng)今先進(jìn)的科學(xué)技術(shù),給測(cè)量領(lǐng)域帶來(lái)了一場(chǎng)新

并通過(guò)計(jì)算機(jī)強(qiáng)大的數(shù)據(jù)處理能力和圖形繪制能力對(duì)數(shù)據(jù)進(jìn)行處理和顯示操

作,提高了測(cè)量的精度和速度以及改變了人們的測(cè)量環(huán)境和人為的測(cè)量的誤

差。人們只需要在計(jì)算機(jī)的虛擬面板上輸入各種配置參數(shù)和測(cè)量參數(shù),點(diǎn)擊

按鈕就可以實(shí)現(xiàn)快速準(zhǔn)確的測(cè)量,而無(wú)需人們深入到測(cè)量現(xiàn)場(chǎng)。人們可以利

用虛擬儀器系統(tǒng)來(lái)組建適合自己的任何測(cè)試系統(tǒng),擺脫傳統(tǒng)儀器帶來(lái)的功能

固定、缺乏靈活性以及高昂的價(jià)格的煩惱。虛擬儀器將會(huì)給科技和工業(yè)生產(chǎn)

產(chǎn)生不可估量的影響。其次,通過(guò)這次的制作,讓自己也有幸接觸價(jià)格不菲的可程控的儀器,

并通過(guò)自己的編程對(duì)其進(jìn)行遠(yuǎn)程的控制操作。我所接觸的是一些消息基的儀

CPU前面的面板操作更便捷和人性化,由于具有CPU和應(yīng)用軟件,功能更強(qiáng)大,

速度越快,精度越高。價(jià)格也不菲,一臺(tái)就是5~6萬(wàn),頂上十幾臺(tái)電腦了。

VC開(kāi)發(fā)工具開(kāi)發(fā)一個(gè)

簡(jiǎn)單的虛擬儀器。剛開(kāi)始接觸的時(shí)候,也是模模糊糊的概念。后來(lái)通過(guò)資料

的閱讀,才明確自己的工作。在這個(gè)過(guò)程中,資料的搜索和閱讀是比較的重

要。這會(huì)加快自己認(rèn)識(shí)。在軟件的編寫(xiě)過(guò)程中,經(jīng)常會(huì)碰上這樣那樣的小問(wèn)

題,問(wèn)題雖小,可也是煩人?。【湍靡粋€(gè)這樣的問(wèn)題,我在頭文件中定義了

一個(gè)函數(shù),在執(zhí)行文件中進(jìn)行具體的編寫(xiě)。按理說(shuō),在編寫(xiě)的過(guò)程中,時(shí)會(huì)有提示的,卻奇怪的卻沒(méi)有給出提示,如果沒(méi)有碰到過(guò)這樣問(wèn)題,還真

VC的一

種記憶功能而已,如果遇到這樣的問(wèn)題,只要退出程序,把NCB為后綴的文

件刪了就OKNI的LABVIEW的機(jī)子上運(yùn)行自己的程序(不管

是MFC還是WIN32)都會(huì)出現(xiàn)這樣的問(wèn)

題:Thetypeofinterfaceisvalidbutthespecifiedinterfacenumberisnotconfigured.后來(lái)解決了,原來(lái)是一個(gè)NI-VISA和AgilentVISA的設(shè)置的問(wèn)題,只要通過(guò)NI-VISA中的設(shè)置一下就行了。還有數(shù)據(jù)傳遞問(wèn)題,因?yàn)槲沂窍胪ㄟ^(guò)設(shè)置一個(gè)全局的變量進(jìn)行傳遞總的資源會(huì)話和某個(gè)儀器的會(huì)話的值給三個(gè)模塊,這樣的設(shè)計(jì)不僅使自己軟件的功能上更符合實(shí)際,而且對(duì)資源的管理更合理,省得在每一個(gè)模塊中進(jìn)行獨(dú)立的會(huì)話的建立和關(guān)閉,而且,用戶(hù)沒(méi)有選擇的余地,資源的地址是固定的,當(dāng)外部的儀器的地址改變的時(shí)候,需要修改地址,重新的編譯連接。在軟件設(shè)計(jì)的過(guò)程中,應(yīng)該竭力使自己的軟件符合人們的使用習(xí)慣,便于操作和界面的簡(jiǎn)潔,一切的設(shè)計(jì)都要從方便人們的操作和使用為前提。這是軟件設(shè)計(jì)過(guò)程中一個(gè)比較重要的方面。在軟件的設(shè)計(jì)過(guò)程中遇到的其他問(wèn)題在前面的各個(gè)模塊的章節(jié)中做了一些說(shuō)明,這里就不說(shuō)了。8結(jié)論本課題是基于LAN的VXI和操作。其原理是通過(guò)Agilent的IO庫(kù)之一visa實(shí)現(xiàn)SCPI指令的發(fā)送和數(shù)據(jù)的接收,而基于消息基的各種儀器接收計(jì)算機(jī)發(fā)送過(guò)來(lái)的SCPI指令,并通過(guò)儀器本身的CPU展前景。該虛擬儀器軟件通過(guò)不斷地進(jìn)行實(shí)驗(yàn)和調(diào)試,基本能實(shí)現(xiàn)函數(shù)信號(hào)發(fā)生器、過(guò)萬(wàn)用表進(jìn)行相關(guān)參數(shù)更精確的測(cè)量,三個(gè)模塊在測(cè)試系統(tǒng)中是比較常用的:函以及萬(wàn)用表來(lái)實(shí)現(xiàn)對(duì)各種參數(shù)的較為準(zhǔn)確的測(cè)量。在三個(gè)模塊的調(diào)試過(guò)程中,遇到了許多問(wèn)題:數(shù)據(jù)如何的傳遞問(wèn)題、窗口圖一個(gè)一個(gè)的將問(wèn)題解決。用戶(hù)自己輸入以Hz為單位的數(shù)字,所以會(huì)輸入比較大的數(shù)據(jù),如果能夠改變頻一步完善的地方。希望各位老師能給予諒解!參考文獻(xiàn)(黑體四號(hào)、頂格)[1]張毅剛,彭喜元,姜守達(dá)等.自動(dòng)測(cè)試系統(tǒng).哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2001,9:1~258.[2]胡曉軍,鄧波,高宏偉.VisualC++高級(jí)開(kāi)發(fā)范例解析.2002,1:1~326.[3]陳尚松,雷加,郭慶.電子測(cè)量與儀器.北京:電子工業(yè)出版社,2005,1:1~435.[4]張毅,周紹磊,楊秀霞.虛擬儀器技術(shù)分析與應(yīng)用.北京:機(jī)械工業(yè)出版社,2004,2:1~301.[5]辛長(zhǎng)安,梅林.VC++編程技術(shù)與難點(diǎn)剖析.北京:清華大學(xué)出版社,2002,4:1~514.[6]AgilentVISAUser’guideManualPartNumber:E2090-90040PrintedinU.S.A.E0801[7]Agilent54621D41D/42D混合信號(hào)示波器.出版號(hào)54622-02年3月[8]Agilent33250A80MHz函數(shù)/任意波形發(fā)生器.出版號(hào)33250-00年4月[9]AgilentE5810ALAN/GPIBGatewayforWindowsUser’sguide附錄一函數(shù)信號(hào)發(fā)生器重點(diǎn)的編寫(xiě)函數(shù)voidCGENERATER::OnBtnOk(){ViStatuserror;//對(duì)錯(cuò)誤信息的存儲(chǔ)//獲得調(diào)制方式的IDintnID_Select_Modul;nID_Select_Modul=GetCheckedRadioButton(IDC_RADIO_BW,IDC_RADIO_FM);//問(wèn)題的關(guān)鍵就出現(xiàn)在這里--該函數(shù)沒(méi)有執(zhí)行--2005、4、28//問(wèn)題解決了!!原來(lái)是單選按鈕的ID的值的大小問(wèn)題!!//在該函數(shù)中,小的在前,大的在后!!!--200529UpdateData(TRUE);//******************************************測(cè)試代碼---成功---200529//sprintf(buffer,"%d",nID_Select_Modul);//MessageBox(buffer);//******************************************//進(jìn)行判斷處理switch(nID_Select_Modul){caseIDC_RADIO_BW:viPrintf(/*funcgen*/theApp.m_Session,"OUTPut:LOAD%s\n",m_nResistance);//輸出端的設(shè)置viPrintf(/*funcgen*/theApp.m_Session,"OUTPut:SYNC%s\n",m_nSignal);//設(shè)置同步信號(hào)CheckWaveRadioButton();//波形選擇的判斷--將波形的字符串存儲(chǔ)在m_nBaseShape中//**********************************判斷用戶(hù)選擇的波形是否是方波if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_FWAVE)

{viPrintf(/*funcgen*/theApp.m_Session,"FUNC%s\n",m_nBaseShape);viPrintf(/*funcgen*/theApp.m_Session,"FREQ%f\n",m_nFreq);viPrintf(/*funcgen*/theApp.m_Session,"VOLT%f\n",m_nAmpl);viPrintf(/*funcgen*/theApp.m_Session,"VOLT:OFFS%f\n",m_nOffs);viPrintf(/*funcgen*/theApp.m_Session,"FUNC:SQU:DCYC%f\n",m_nDcycle);}//******************************判斷用戶(hù)選擇的是否是任意波elseif(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_ARBI){error=viPrintf(/*funcgen*/theApp.m_Session,"APPL:USER%f,%f,%f\n",m_nFreq,m_nAmpl,m_nOffs);if(error!=VI_SUCCESS){error_handler(/*funcgen*/theApp.m_Session,error);break;}viPrintf(/*funcgen*/theApp.m_Session,"FUNC:USER%s\n",WaveForm.m_Arbitrary);}else{error=viPrintf(/*funcgen*/theApp.m_Session,"APPL:%s%f,%f,%f\n",m_nBaseShape,m_nFreq,m_nAmpl,m

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論