基于VISA庫(kù)的任意波形發(fā)生器驅(qū)動(dòng)程序的開(kāi)發(fā)設(shè)計(jì)_第1頁(yè)
基于VISA庫(kù)的任意波形發(fā)生器驅(qū)動(dòng)程序的開(kāi)發(fā)設(shè)計(jì)_第2頁(yè)
基于VISA庫(kù)的任意波形發(fā)生器驅(qū)動(dòng)程序的開(kāi)發(fā)設(shè)計(jì)_第3頁(yè)
基于VISA庫(kù)的任意波形發(fā)生器驅(qū)動(dòng)程序的開(kāi)發(fā)設(shè)計(jì)_第4頁(yè)
基于VISA庫(kù)的任意波形發(fā)生器驅(qū)動(dòng)程序的開(kāi)發(fā)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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、第三章 基于VISA庫(kù)的驅(qū)動(dòng)程序的研究本章簡(jiǎn)介:VXI總線以其良好的測(cè)控性能成為虛擬儀器的一個(gè)重要發(fā)展方向,作為一個(gè)開(kāi)放式的測(cè)控系統(tǒng),虛擬儀器軟件結(jié)構(gòu)(VISA)為不同廠商的VXI器件的驅(qū)動(dòng)程序提供了統(tǒng)一的軟件基礎(chǔ)。本文通過(guò)對(duì)VISA庫(kù)及VXIplug &play規(guī)范的介紹來(lái)闡述儀器驅(qū)動(dòng)程序的開(kāi)發(fā),并描述了VXI總線寄存器基器件任意波形發(fā)生器驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)。3.1 VISA簡(jiǎn)介隨著VXI儀器的廣泛使用,出現(xiàn)了相應(yīng)的的I/O控制軟件,由于不同廠商的硬件提供的I/O庫(kù)不同,儀器驅(qū)動(dòng)程序不兼容,儀器之間很難集成。VXIplug&play聯(lián)盟的宗旨是通過(guò)開(kāi)放的、不同廠商的VXI系統(tǒng)使得VXI技術(shù)

2、的最終用戶可簡(jiǎn)便使用VXI儀器。聯(lián)盟制定了Virtual Instrument Software Architecture,即虛擬軟件結(jié)構(gòu)(VISA)。VISA是一個(gè)標(biāo)準(zhǔn)的獨(dú)立于硬件設(shè)備、接口、操作系統(tǒng)、編程語(yǔ)言和網(wǎng)絡(luò)環(huán)境的I/O控制庫(kù),目的是處理計(jì)算機(jī)與儀器間物理連接的通信細(xì)節(jié)。通過(guò)VISA,由不同硬件接口(如GPIB、VXI或RS232等)連接的設(shè)備可以集成到一個(gè)系統(tǒng)中,由一個(gè)軟件完成所有儀器設(shè)備的控制。因此,VISA是生成虛擬儀器驅(qū)動(dòng)程序的軟件基礎(chǔ)。本文所介紹的儀器驅(qū)動(dòng)程序是在LabWindows/CVI環(huán)境下開(kāi)發(fā)的。LabWindows/CVI為基于C語(yǔ)言的應(yīng)用程序開(kāi)發(fā)環(huán)境(ADE)。

3、ADE通過(guò)驅(qū)動(dòng)程序頭文件,獲得有關(guān)儀器驅(qū)動(dòng)程序函數(shù)的必要信息。LabWindows/CVI提供了VISA庫(kù)的各類(lèi)函數(shù),用戶在開(kāi)發(fā)驅(qū)動(dòng)程序時(shí)可方便的調(diào)用其中的函數(shù)。3.1.1 VISA資源模板VISA模板為所有應(yīng)用程序提供基本的資源控制服務(wù),包括控制與資源或器件間的通話使用期和控制資源特性等。1 使用期控制VISA控制器件通話、查找列表和事件的使用期。當(dāng)這些控制使用完畢之后,可用viClose( )釋放與之相關(guān)的系統(tǒng)資源。2 訪問(wèn)控制應(yīng)用程序可以同時(shí)打開(kāi)多個(gè)與VISA資源的通話,也可以同時(shí)通過(guò)不同的通話句柄同時(shí)訪問(wèn)資源。在某些情況下,訪問(wèn)VISA資源的應(yīng)用程序希望禁止別的應(yīng)用程序訪問(wèn)該資源。為此

4、,VISA定義一種鎖定機(jī)制來(lái)限制對(duì)資源的訪問(wèn)。鎖定資源的操作是調(diào)用函數(shù)viLock( ),解鎖的操作是調(diào)用函數(shù)viUnLock( )。訪問(wèn)控制服務(wù) viLock(ViSession instr,ViAccessMode lockType,ViUInt32 timeout,ViKeyId requestedKey,ViKeyId accessKey);LockType表示請(qǐng)求鎖定的類(lèi)型,它有兩個(gè)值,要么是VI_EXCLUSIVE_LOCK,表示獨(dú)占鎖定;要么是VI_SHARED_LOCK,表示共享鎖定。timeout表示超時(shí)設(shè)置,即在設(shè)定的時(shí)間內(nèi)未完成操作,則返回錯(cuò)誤碼。否則忽略此參數(shù),此時(shí)ti

5、meout值取VI_NULL。 viUnLock(ViSession instr);該操作取消對(duì)指定資源的鎖定。3.1.2 VISA資源管理函數(shù)VISA資源管理器為應(yīng)用程序提供基本服務(wù),包括查找資源和打開(kāi)與資源的通話。下面簡(jiǎn)述這些服務(wù):訪問(wèn)函數(shù)和操作資源管理器允許打開(kāi)與資源的通話,通話由應(yīng)用程序請(qǐng)求而建立。在應(yīng)用程序關(guān)閉通話或功能失常時(shí)系統(tǒng)負(fù)責(zé)釋放與通話相關(guān)的全部系統(tǒng)資源。 viOpenDefaultRM(ViPSession &defaultRM);該函數(shù)必須在調(diào)用任何VISA操作之前調(diào)用。第一次調(diào)用該函數(shù)使VISA系統(tǒng)初始化,包括初始化默認(rèn)資源,同時(shí)返回與該資源的通話。對(duì)函數(shù)的再次調(diào)用返回

6、與默認(rèn)資源的另一唯一通話。許多VXIplug&play儀器驅(qū)動(dòng)程序要求輸入作為通話句柄的參數(shù)以便識(shí)別目標(biāo)儀器。為了給開(kāi)發(fā)者提供使用模型的一致性,必須定義這個(gè)參數(shù)的類(lèi)型和位置,VISA要求這種函數(shù)的通話句柄定義為ViSession類(lèi)型,并要求它是參數(shù)表中的第一個(gè)參數(shù)。ViPSession型數(shù)據(jù)為ViSession型數(shù)據(jù)的地址。 viOpen(ViSession defaultRm,ViRsrc rsrcName,ViAccesssMode accessMode,ViUInt32 timeout,ViPSession instr)本操作打開(kāi)與指定器件的通話并返回調(diào)用此器件其它操作的通話標(biāo)識(shí)符ins

7、tr。defaultRM為由viOpenDefaultRM( )返回的與VISA默認(rèn)資源通話的唯一邏輯標(biāo)識(shí)符。在參數(shù)表中用到兩個(gè)通話標(biāo)識(shí)符defaultRM、instr,ViOpen( )是在已知的資源上操作,defaultRM為與該資源通話的標(biāo)識(shí)符,相當(dāng)于與此資源的通訊的通道,而實(shí)際上我們想與具體的器件通話,這就是返回的與該器件通話的標(biāo)識(shí)符instr,即與該器件通訊的通道。這就象打長(zhǎng)途電話,先撥區(qū)號(hào),再撥你想要的用戶號(hào)碼,這樣就可進(jìn)行通訊。rsrcName為器件的唯一符號(hào)名稱(chēng)。該參數(shù)為一字符串,可唯一標(biāo)識(shí)這一器件資源。表3-1為一些較典型器件資源的描述符。地址字符串說(shuō)明VXI0:1:INST

8、RVXI接口0槽模塊上邏輯地址為1的VXI器件GPIB-VXI:9:INSTRGPIB-VXI控制系統(tǒng)中邏輯地址為9的VXI器件GPIB:1:0:INSTRGPIB接口0上主地址為1,副地址為0的GPIB器件ASRL1:INSTR位于端口COM1上的串行器件VXI:MEMACC對(duì)VXI接口板級(jí)寄存器的訪問(wèn)GPIB-VXI1:MEMACC對(duì)1號(hào)GPIB-VXI接口板級(jí)寄存器的訪問(wèn)表3-1 器件資源描述符VXI0槽為VXI儀器總線的運(yùn)行提供所需要的硬件資源。它們?yōu)橥獠客ㄐ沤涌谂cVXI總線之間提供轉(zhuǎn)換,并提供協(xié)議。VXI0槽模塊還可以提供訪問(wèn)VXI儀器的功能。在一些情況下串行器件(ASRL)的命名規(guī)

9、則會(huì)混淆,在WINDOW平臺(tái)上,ASRL1對(duì)應(yīng)COM1,而在Macintosh平臺(tái)上ASRL1對(duì)應(yīng)調(diào)制解調(diào)器端口。accessMode為訪問(wèn)指定器件資源的模式,值為VI_EXCLUSIVE_LOCK表示通話開(kāi)啟后立即獲取獨(dú)占鎖定,如果鎖定未能獲得,就關(guān)閉通話并返回錯(cuò)誤碼;如果值為VI_LOAD_CONFIG,表示用外部組態(tài)應(yīng)用程序設(shè)定屬性值,否則用VISA規(guī)范定義的缺省屬性值VI_NULL,可以用以上兩值的“位或”表示同時(shí)使用兩種訪問(wèn)模式。若accessMode請(qǐng)求鎖定,timeout表示錯(cuò)誤碼返回之前這一操作等待的最長(zhǎng)時(shí)間間隔,單位為毫秒。查找此服務(wù)用于查找器件并與之建立通訊聯(lián)系。VISA資

10、源管理器查找與接口相關(guān)的所有資源,而不是對(duì)各資源分別定位和查找。執(zhí)行此操作后,用戶可查找到所有可利用的接口硬件資源。3.1.3 VISA存儲(chǔ)器I/O服務(wù)在討論存儲(chǔ)器訪問(wèn)時(shí),在速度與復(fù)雜性,軟件開(kāi)銷(xiāo)與封裝之間要折衷考慮。高級(jí)訪問(wèn)的目的與低級(jí)訪問(wèn)相似。兩者的區(qū)別在于高級(jí)訪問(wèn)具有更大的軟件開(kāi)銷(xiāo),因?yàn)樗庋b用于存儲(chǔ)器訪問(wèn)的絕大部分代碼,如窗口映射和錯(cuò)誤檢驗(yàn)。通常,高級(jí)訪問(wèn)的速度低于低級(jí)訪問(wèn)的速度,但封裝了進(jìn)行訪問(wèn)的所需要的操作,因此比低級(jí)訪問(wèn)更安全。低級(jí)訪問(wèn)服務(wù)通過(guò)降低軟件開(kāi)銷(xiāo)提高訪問(wèn)速度,但它要求進(jìn)行更多的編程工作。為減少存儲(chǔ)器訪問(wèn)的開(kāi)銷(xiāo)量,低級(jí)訪問(wèn)服務(wù)在操作中不返回任何錯(cuò)誤信息。低級(jí)訪問(wèn)服務(wù)允許

11、對(duì)接口上支持直接存儲(chǔ)器訪問(wèn)的器件進(jìn)行寄存器級(jí)訪問(wèn),在應(yīng)用程序使用接口總線的低級(jí)服務(wù)訪問(wèn)之前,應(yīng)利用viMapAddress( )映射一個(gè)地址范圍,將寄存器映射到內(nèi)存中,再利用viPeek( )、viPoke( )進(jìn)行讀寫(xiě),這樣就可以用對(duì)內(nèi)存的操作代替對(duì)模塊寄存器的操作。雖然資源可以處理對(duì)窗口的分配和操作,但在低級(jí)訪問(wèn)完成時(shí),應(yīng)調(diào)用viUnmapAddress( )清除窗口。只有這樣,系統(tǒng)才能對(duì)窗口進(jìn)行重新分配。由于一批數(shù)據(jù)的傳輸只使用了一次映射,因此大大節(jié)省了操作時(shí)間,提高了數(shù)據(jù)傳輸速度。高級(jí)訪問(wèn)服務(wù)允許對(duì)接口上支持直接存儲(chǔ)器訪問(wèn)的器件進(jìn)行寄存器級(jí)訪問(wèn),編程人員可利用簡(jiǎn)單的操作,如viIn16

12、( )、viOut16( )訪問(wèn)接口總線上的存儲(chǔ)器。這些操作封裝了低級(jí)服務(wù)中的map/unmap和peek/poke。因此沒(méi)必要明確的把存儲(chǔ)器映射成一個(gè)窗口。 viIn816、32(ViSession instr,ViUInt space,ViBusAddress offset,ViUInt816、32 val); 該操作通過(guò)使用指定的地址空間方式從指定的器件偏移地址offset(以字節(jié)為單位)讀取8、16、32位無(wú)符號(hào)的整數(shù)。space表示指定的地址空間,下表列出指定的地址空間的有效入口。space取值 說(shuō)明VI_A16_SPACE尋址VXI/MXI總線的A16地址空間VI_A24_SPAC

13、E尋址VXI/MXI總線的A24地址空間VI_A32_SPACE尋址VXI/MXI總線的A32地址空間表3-2 VXI器件的地址空間 viOut816、32(ViSession instr,ViUInt space,ViBusAddress offset,ViUInt816、32 val);該操作通過(guò)使用指定的地址空間方式從指定的偏移地址寫(xiě)入8、16、32位無(wú)符號(hào)的整數(shù)3.2 VXI儀器驅(qū)動(dòng)程序3.2.1 VXIplug&play對(duì)儀器驅(qū)動(dòng)程序的要求與規(guī)范在虛擬儀器系統(tǒng)中,儀器驅(qū)動(dòng)程序是連接儀器與用戶界面的橋梁,是測(cè)試系統(tǒng)設(shè)計(jì)的重要一環(huán)。在規(guī)定儀器驅(qū)動(dòng)程序設(shè)計(jì)標(biāo)準(zhǔn)時(shí),需遵守三個(gè)主要結(jié)構(gòu)原則。第

14、一,儀器驅(qū)動(dòng)程序以源代碼形式提供,以便用戶自己能開(kāi)發(fā)和優(yōu)化操作。第二,結(jié)構(gòu)應(yīng)是模塊式的應(yīng)為函數(shù)提供多層訪問(wèn),以便用戶可使用各個(gè)驅(qū)動(dòng)函數(shù)的子集。最后,不同廠商的VXIplug&play儀器驅(qū)動(dòng)程序結(jié)構(gòu)是相似的,因此在讀懂一個(gè)儀器驅(qū)動(dòng)程序時(shí)所得到的知識(shí)可用于其它VXIplug&play儀器驅(qū)動(dòng)程序中。虛擬儀器驅(qū)動(dòng)程序圖3-1驅(qū)動(dòng)程序的外部接口模型VXI總線即插即用系統(tǒng)聯(lián)盟規(guī)范要求、儀器供應(yīng)商在提供以VXI為代表的虛擬儀器硬件模塊的同時(shí),必須提供相應(yīng)的儀器驅(qū)動(dòng)程序、儀器軟面板及相關(guān)文檔。VXI總線即插既用規(guī)范詳細(xì)定義了儀器驅(qū)動(dòng)程序的內(nèi)部設(shè)計(jì)模型與外部接口模型,規(guī)定了儀器驅(qū)動(dòng)程序的設(shè)計(jì)要求及與系統(tǒng)中其

15、它程序模塊之間的相互關(guān)系。虛擬儀器驅(qū)動(dòng)程序的外部接口模型如圖3-1所示,包括函數(shù)體、子程序接口、VISA I/O接口、交互式開(kāi)發(fā)者接口與應(yīng)用程序開(kāi)發(fā)者接口。 函數(shù)體儀器驅(qū)動(dòng)程序函數(shù)體是驅(qū)動(dòng)程序源代碼。可采用標(biāo)準(zhǔn)的編程語(yǔ)言或圖形化編程語(yǔ)言(G語(yǔ)言,例如LabVIEW和HP VEE)編寫(xiě)。 I/O接口 在VXIplug&play結(jié)構(gòu)中,I/O接口由標(biāo)準(zhǔn)的并能在多平臺(tái)上使用用的的獨(dú)立軟件層提供。VISA含有一控制VXI、GPIB、RS-232、以太網(wǎng)和其它類(lèi)型儀器的接口庫(kù)。它能對(duì)所有VXI功能提供訪問(wèn),包括消息基和寄存器基編程、中斷和事件處理,并能直接訪問(wèn)VXI底板。 子程序接口VXIplug&pl

16、ay儀器驅(qū)動(dòng)程序使用標(biāo)準(zhǔn)化編程技術(shù)和層次化設(shè)計(jì),因此驅(qū)動(dòng)程序可通過(guò)子程序接口訪問(wèn)使用其它庫(kù)的函數(shù)。子程序接口是驅(qū)動(dòng)程序調(diào)用其它軟件模塊的機(jī)構(gòu),這些模塊完成驅(qū)動(dòng)程序的任務(wù)。其它軟件模塊包括高級(jí)分析庫(kù)和格式化I/O庫(kù)。 編程式開(kāi)發(fā)者接口編程式開(kāi)發(fā)者接口是更高級(jí)軟件程序調(diào)用驅(qū)動(dòng)程序的機(jī)構(gòu)。最終用戶的測(cè)試系統(tǒng)程序是由幾個(gè)儀器驅(qū)動(dòng)程序的調(diào)用組成,每個(gè)調(diào)用使用多個(gè)參數(shù)。 交互式開(kāi)發(fā)者接口交互式開(kāi)發(fā)者接口通常是一圖形接口,這種接口有利于軟件開(kāi)發(fā)者理解儀器驅(qū)動(dòng)程序函數(shù)的作用和如何使用該接口調(diào)用驅(qū)動(dòng)程序中的函數(shù)。交互式開(kāi)發(fā)者接口的一個(gè)例子是Windows中使用的函數(shù)面板,函數(shù)面板文件代表儀器驅(qū)動(dòng)程序中的函數(shù)、函

17、數(shù)的參數(shù)名和數(shù)據(jù)類(lèi)型及相關(guān)的幫助文件。函數(shù)面板文件的樹(shù)形結(jié)構(gòu)VPP規(guī)范要求,儀器驅(qū)動(dòng)程序應(yīng)包括C源代碼(.h文件、.c文件)、動(dòng)態(tài)鏈接庫(kù)文件(.dll)、函數(shù)面板(.fp文件)及其他相關(guān)文檔,例如幫助文件。在儀器驅(qū)動(dòng)程序外部接口模型中定義的交互式開(kāi)發(fā)者接口,實(shí)質(zhì)就是函數(shù)面板文件。函數(shù)面板文件是對(duì)儀器驅(qū)動(dòng)程序的結(jié)構(gòu)化表達(dá)。利用函數(shù)面板文件,用戶可以交互式的理解整個(gè)儀器驅(qū)動(dòng)程序操作函數(shù)的組成與使用,并利用函數(shù)面板所帶有的幫助文件,進(jìn)一步的了解儀器的功能與儀器驅(qū)動(dòng)程序的各個(gè)函數(shù)及各個(gè)參數(shù)的意義與作用,使儀器驅(qū)動(dòng)程序的設(shè)計(jì)與使用都變得直觀與方便。根據(jù)VPP規(guī)范,函數(shù)面板文件的結(jié)構(gòu)采用了樹(shù)形結(jié)構(gòu),表3-

18、3以amc2720模塊的驅(qū)動(dòng)函數(shù)面板文件為例進(jìn)行介紹。表中定義了函數(shù)面板文件的最小的樹(shù)結(jié)構(gòu),包含了所有函數(shù)面板必需的部分。在表中,樹(shù)結(jié)構(gòu)是由幾層結(jié)點(diǎn)構(gòu)成的,最上層根結(jié)點(diǎn)定義了儀器結(jié)點(diǎn),表示整個(gè)函數(shù)面板文件:下一層為類(lèi)結(jié)點(diǎn),包括了一系列相近的儀器功能函數(shù),如實(shí)用(Utility)類(lèi),它包括了錯(cuò)誤信息函數(shù)、錯(cuò)誤查詢函數(shù)、復(fù)位函數(shù)、自檢函數(shù)及版本查詢函數(shù)等子結(jié)點(diǎn);再下一層為函數(shù)結(jié)點(diǎn)它對(duì)應(yīng)著儀器驅(qū)動(dòng)程序具體的函數(shù),由相應(yīng)的源代碼組成。函數(shù)面板樹(shù)結(jié)構(gòu)可以根據(jù)儀器功能的需要進(jìn)行擴(kuò)展,類(lèi)結(jié)點(diǎn)和函數(shù)結(jié)點(diǎn)的個(gè)數(shù)都可以進(jìn)行擴(kuò)展。一般由根結(jié)點(diǎn)直接生成的類(lèi)結(jié)點(diǎn)還可以包括組態(tài)類(lèi)結(jié)點(diǎn)、測(cè)量類(lèi)結(jié)點(diǎn)、開(kāi)關(guān)類(lèi)結(jié)點(diǎn)、激勵(lì)源類(lèi)結(jié)點(diǎn)

19、等,而測(cè)量類(lèi)結(jié)點(diǎn)向下又可以分為組態(tài)類(lèi)結(jié)點(diǎn)和讀類(lèi)結(jié)點(diǎn),讀類(lèi)結(jié)點(diǎn)又可分為初始化結(jié)點(diǎn)和取數(shù)結(jié)點(diǎn),直到分解到具體的函數(shù)為止。整個(gè)函數(shù)面板樹(shù)結(jié)構(gòu)與儀器的驅(qū)動(dòng)程序內(nèi)部設(shè)計(jì)的模型是完全一致的。整個(gè)樹(shù)結(jié)構(gòu)由儀器結(jié)點(diǎn)擴(kuò)展為多個(gè)類(lèi)結(jié)點(diǎn)或直接的函數(shù)結(jié)點(diǎn),而類(lèi)結(jié)點(diǎn)又?jǐn)U展為多個(gè)下級(jí)類(lèi)結(jié)點(diǎn)或函數(shù)結(jié)點(diǎn),由此構(gòu)成了完整的儀器驅(qū)動(dòng)程序函數(shù)面板文件結(jié)構(gòu)。表3-3 amc2720函數(shù)面板文件樹(shù)結(jié)構(gòu)儀器結(jié)點(diǎn)函數(shù) Initialize Low Level Control Load Waveform DataStatus Read Status ByteUtilityError MesssageError QueryResetRevis

20、ion QueryCloseamc2720_init (初始化函數(shù))amc2720_loadWaveformData(載入波形數(shù)據(jù)函數(shù))amc2720_readStatusByte(讀狀態(tài)位函數(shù))amc2720_error_message (錯(cuò)誤信息函數(shù))amc2720_error_query (錯(cuò)誤查詢函數(shù))amc2720_reset (復(fù)位函數(shù))amc2720_revision_query (版本查尋函數(shù))amc2720_close (關(guān)閉函數(shù))圖3-2驅(qū)動(dòng)程序的函數(shù)面板文件VXI儀器驅(qū)動(dòng)程序主要可分為如下幾類(lèi)函數(shù): 初始化函數(shù)使儀器的軟件連接初始化并完成一些必要的操作使儀器處于默認(rèn)上電或

21、其它特定狀態(tài)。首先打開(kāi)與默認(rèn)資源的通話,返回通話句柄,再打開(kāi)與器件資源的通話,返回通話句柄。 應(yīng)用函數(shù)應(yīng)用函數(shù)是完整的儀器驅(qū)動(dòng)程序函數(shù),當(dāng)用戶需要單一的高級(jí)驅(qū)動(dòng)函數(shù)接口時(shí),這些函數(shù)可通過(guò)它們自己的程序接口被調(diào)用。 部件函數(shù)部件函數(shù)將儀器功能劃分為控制儀器功能特定區(qū)域的若干類(lèi),這些函數(shù)為應(yīng)用程序開(kāi)發(fā)者提供儀器功能的直接訪問(wèn)的中間層,且通常將儀器的控制分解成更低級(jí)控制。 功能函數(shù)類(lèi)按照儀器功能(如測(cè)量、源、路徑等)將儀器驅(qū)動(dòng)函數(shù)分組。在使用最高級(jí)功能函數(shù)時(shí),每個(gè)函數(shù)執(zhí)行一個(gè)完整的操作。假定儀器沒(méi)有優(yōu)先狀態(tài),這就允許這些函數(shù)是順序獨(dú)立的。功能函數(shù)的執(zhí)行可產(chǎn)生已完成的結(jié)果,如測(cè)量值的返回、指定的源輸出

22、或由開(kāi)關(guān)控制的路徑的連接。 關(guān)閉函數(shù)結(jié)束與儀器的通話,并釋放與該通話的系統(tǒng)資源。與前面介紹的初始化函數(shù)相對(duì)應(yīng)的是先關(guān)閉與器件資源的通話,再關(guān)閉與默認(rèn)資源的通話。這樣可對(duì)系統(tǒng)資源重新分配。圖3-3驅(qū)動(dòng)程序的函數(shù)窗口在函數(shù)面板文件中,對(duì)于每個(gè)函數(shù)結(jié)點(diǎn),都對(duì)應(yīng)著一個(gè)函數(shù)窗口,在每個(gè)窗口中,包括了表示函數(shù)中所含的各個(gè)輸入?yún)?shù)、輸出參數(shù)與返回值的圖形化控件,分別與每個(gè)參數(shù)對(duì)應(yīng)。每個(gè)參數(shù)控件又分別包括控件標(biāo)號(hào)、控件位置號(hào)、數(shù)據(jù)類(lèi)型、默認(rèn)值與控件寬度等參數(shù)信息。VPP規(guī)定了函數(shù)窗口的幾種控件類(lèi)型,包括輸入類(lèi)型、游標(biāo)類(lèi)型、布爾類(lèi)型、組合類(lèi)型、數(shù)值類(lèi)型、輸出類(lèi)型、返回值類(lèi)型、全局變量類(lèi)型及信息類(lèi)型。其中輸入類(lèi)型

23、(往往是儀器句柄值)一般放在函數(shù)窗口的左下方,而返回值類(lèi)型控件一般放在函數(shù)窗口的右下方。函數(shù)面板樹(shù)形結(jié)構(gòu)的最底層單位為函數(shù)結(jié)點(diǎn),而圖形窗口的最基本單位為各種控件。在函數(shù)面板中,每個(gè)層次的部件都必須包括各自的幫助文檔,幫助文檔可按照函數(shù)面板文件的結(jié)點(diǎn)層次來(lái)劃分。圖3-4驅(qū)動(dòng)程序的函數(shù)參數(shù)信息根結(jié)點(diǎn)幫助文檔對(duì)應(yīng)于儀器結(jié)點(diǎn),描述整個(gè)儀器的功能及函數(shù)面板所含的類(lèi)結(jié)點(diǎn)與函數(shù)結(jié)點(diǎn)的概述;圖3-5驅(qū)動(dòng)程序的函數(shù)幫助文件編輯類(lèi)結(jié)點(diǎn)幫助文檔對(duì)應(yīng)于類(lèi)結(jié)點(diǎn),用來(lái)描述類(lèi)的功能與類(lèi)中所含的函數(shù)結(jié)點(diǎn)概述;函數(shù)結(jié)點(diǎn)幫助文檔對(duì)應(yīng)于函數(shù)結(jié)點(diǎn),用來(lái)描述該函數(shù)的功能及應(yīng)用范圍;控件幫助文檔對(duì)應(yīng)于函數(shù)的輸入、輸出參數(shù),分別描述其各自

24、的類(lèi)型、默認(rèn)值與注意事項(xiàng);返回值幫助文檔對(duì)應(yīng)于函數(shù)的返回狀態(tài)值,描述正確返回值與各種錯(cuò)誤返回值代碼及其所代表的含義。函數(shù)面板文件的設(shè)計(jì)根據(jù)函數(shù)面板的樹(shù)形結(jié)構(gòu),函數(shù)面板文件的設(shè)計(jì)分兩部分進(jìn)行。首先編輯函數(shù)面板樹(shù),然后在函數(shù)結(jié)點(diǎn)上的函數(shù)窗口編輯器中編輯該函數(shù)的各參數(shù)的圖形控件。函數(shù)面板的設(shè)計(jì)是儀器驅(qū)動(dòng)程序的一部分。它的開(kāi)發(fā)與源代碼的開(kāi)發(fā)是緊密連在一起的,也往往與儀器驅(qū)動(dòng)程序源代碼一起由儀器模塊的設(shè)計(jì)人員來(lái)完成。儀器驅(qū)動(dòng)程序的設(shè)計(jì)人員根據(jù)儀器模塊的功能設(shè)計(jì)出驅(qū)動(dòng)程序的函數(shù)面板文件的樹(shù)結(jié)構(gòu),將儀器驅(qū)動(dòng)程序的各個(gè)欲包括的函數(shù)按從上至下的模式進(jìn)行結(jié)構(gòu)性描述,源代碼則用C語(yǔ)言將各個(gè)函數(shù)的功能實(shí)現(xiàn)。當(dāng)源代碼編

25、寫(xiě)完成之后,再完成函數(shù)面板文件的的窗口設(shè)計(jì),可方便的為各函數(shù)在圖形化平臺(tái)中進(jìn)行測(cè)試提供圖形化接口及詳盡的幫助文檔。3.2.1 VXI儀器驅(qū)動(dòng)程序的的設(shè)計(jì)實(shí)現(xiàn)函數(shù)面板文件的應(yīng)用在儀器驅(qū)動(dòng)程序外部接口模型的描述中,儀器驅(qū)動(dòng)程序通過(guò)應(yīng)用程序開(kāi)發(fā)者接口與上層應(yīng)用程序開(kāi)發(fā)環(huán)境進(jìn)行通信,如何在圖形化軟件開(kāi)發(fā)平臺(tái)對(duì)儀器進(jìn)行交互式控制,是圖形化軟件平臺(tái)開(kāi)發(fā)中的一個(gè)關(guān)鍵問(wèn)題。由于圖形化軟件平臺(tái)是一個(gè)應(yīng)用程序的開(kāi)發(fā)環(huán)境,在測(cè)試系統(tǒng)組成之前,無(wú)法得知系統(tǒng)所含有的儀器類(lèi)型與個(gè)數(shù),也就無(wú)法象構(gòu)造虛擬儀器軟面板通過(guò)直接調(diào)用儀器驅(qū)動(dòng)程序的動(dòng)態(tài)鏈接庫(kù)DLL函數(shù)來(lái)進(jìn)行控制,而是需要一個(gè)通用性的接口。分析儀器驅(qū)動(dòng)程序的頭文件格式

26、,固然可以得知所有驅(qū)動(dòng)函數(shù)的函數(shù)原型與數(shù)據(jù)類(lèi)型,但由于頭文件的編寫(xiě)格式并不完全唯一,對(duì)于數(shù)據(jù)類(lèi)型的描述有時(shí)還會(huì)放在源代碼文件中,因此頭文件的信息量不大。而分析函數(shù)面板文件,一是所有符合VPP規(guī)范的虛擬儀器驅(qū)動(dòng)程序都含有函數(shù)面板文件,來(lái)源是確定的;二是其文件格式是統(tǒng)一的,分解函數(shù)面板格式是一個(gè)完整的結(jié)構(gòu)化文件;三是其不僅包含所有函數(shù)原型、所有數(shù)據(jù)類(lèi)型,還包括各個(gè)層次的幫助信息,有利于用戶的使用。因此,圖形化軟件平臺(tái)通過(guò)對(duì)函數(shù)面板文件的掃描,獲取儀器驅(qū)動(dòng)程序的信息,在調(diào)用相應(yīng)的函數(shù)實(shí)體,從而完成對(duì)儀器的各種操作。運(yùn)用LabWindows/CVI的函數(shù)面板編輯器將驅(qū)動(dòng)程序的函數(shù)面板文件編輯好之后,可

27、使用編輯器的功能自動(dòng)生成驅(qū)動(dòng)程序的頭文件(.h文件)和源代碼文件(.c文件),若是VXI器件的驅(qū)動(dòng)程序則必須確保在函數(shù)面板編輯器的菜單欄Options項(xiàng)的VXIplug&play Styles必需選中,頭文件包括了源代碼文件中函數(shù)的原型,此外在源代碼中有變量需要聲明或定義的及編譯環(huán)境的說(shuō)明都可在頭文件中進(jìn)行。生成的源代碼文件為函數(shù)的框架,函數(shù)所要實(shí)現(xiàn)的功能則要程序開(kāi)發(fā)人員來(lái)填寫(xiě)。自動(dòng)生成.h文件和.c文件給程序開(kāi)發(fā)人員省去了許多繁瑣的函數(shù)原型的輸入工作,也減少了人工輸入時(shí)出錯(cuò)的可能性,特別是函數(shù)比較多,而函數(shù)的參數(shù)也比較多且類(lèi)型復(fù)雜時(shí)更能顯示出其優(yōu)越性。這樣開(kāi)發(fā)人員只要集中精力進(jìn)行函數(shù)體的編寫(xiě)

28、就行了。下圖就是由只有一個(gè)函數(shù)的函數(shù)面板文件由函數(shù)編輯器自動(dòng)生成的頭文件與源代碼文件的例子。圖3-6自動(dòng)生成驅(qū)動(dòng)程序的頭文件窗口圖3-6自動(dòng)生成驅(qū)動(dòng)程序的C文件窗口驅(qū)動(dòng)程序采用動(dòng)態(tài)鏈接庫(kù)文件DLL有助于節(jié)省計(jì)算機(jī)內(nèi)存和實(shí)現(xiàn)資源共享。如果是兩個(gè)或更多的應(yīng)用程序使用同一個(gè)DLL,那么該DLL的頁(yè)面只要放入RAM一次,所有的應(yīng)用程序都可以共享它的各個(gè)頁(yè)面,這意味著內(nèi)存的使用更加有效。多個(gè)不同的應(yīng)用程序使用同一個(gè)DLL從而達(dá)到資源共享的目的。有助于解決不同的開(kāi)發(fā)平臺(tái)之間的差異。采用DLL文件也有助于保護(hù)虛擬儀器生產(chǎn)商的利益,例如VPP聯(lián)盟雖然規(guī)定了VISA庫(kù)函數(shù)的接口規(guī)范,但卻沒(méi)有規(guī)定其函數(shù)內(nèi)部的實(shí)現(xiàn)

29、機(jī)制,各生產(chǎn)商可根據(jù)VISA的接口規(guī)范開(kāi)發(fā)自己的VISA庫(kù)函數(shù),提供給最終用戶的是DLL文件,相當(dāng)于一黑匣子,用戶可以調(diào)用其中的函數(shù),卻不能改動(dòng)它。將驅(qū)動(dòng)程序C程序源代碼生成DLL文件首先必須創(chuàng)建一個(gè)頭文件,它包含想要從DLL輸出的函數(shù)原型、結(jié)構(gòu)和符號(hào)。DLL的源代碼均包括該頭文件,以幫助創(chuàng)建DLL。如果鏈接程序發(fā)現(xiàn)DLL的源代碼模塊至少輸出了一個(gè)函數(shù)或變量,那么鏈接程序生成一LIB文件,這LIB文件很小,它不包含任何函數(shù)或變量,它只是列出了所有已輸出函數(shù)和變量的符號(hào)名。如果要鏈接DLL的輸出符號(hào)的任何可執(zhí)行模塊,該LIB文件是必不可少的。采用Labwindows/CVI編制DLL文件操作也很

30、簡(jiǎn)便,可由函數(shù)面板文件編輯器的菜單中option中的creatdll project 項(xiàng),產(chǎn)生創(chuàng)造DLL文件的工程項(xiàng)目,其包含兩個(gè)文件.h和.c文件及函數(shù)面板文件.fp,這與前面介紹的由函數(shù)面板文件產(chǎn)生的函數(shù)源代碼框架文件實(shí)質(zhì)是一樣的,編程人員將函數(shù)代碼編入各函數(shù)中去之后,經(jīng)編譯之后,就可由該工程文件生成DLL文件和LIB文件,在使用VXIplug&play形式的函數(shù)面板文件產(chǎn)生的DLL 工程文件產(chǎn)生的LIB文件有四種,即BORLAND C Microsoft VC SYMANTEC WATCOM 四種C的LIB文件,這樣只要編程人員偏好某種虛擬儀器的開(kāi)發(fā)平臺(tái),就可選用自己適合的編程語(yǔ)言,而不

31、用當(dāng)心驅(qū)動(dòng)程序的兼容性問(wèn)題,從而使得驅(qū)動(dòng)程序達(dá)到開(kāi)放性的目的。而由這四種C開(kāi)發(fā)的DLL,LIB文件的驅(qū)動(dòng)程序,如虛擬儀器的應(yīng)用程序開(kāi)發(fā)平臺(tái)采用的是Labwindows/CVI,則有一些細(xì)節(jié)需注意,因Labwindows/CVI是基于標(biāo)準(zhǔn) C開(kāi)發(fā)的,在某些細(xì)節(jié)方面和這四種C會(huì)有出入,若未注意到這些差別也會(huì)出錯(cuò)。函數(shù)的許多標(biāo)準(zhǔn)返回值在頭文件Visatype.h和Vpptype.h中定義,類(lèi)型為VISA庫(kù)的ViStatus類(lèi)型。一般儀器驅(qū)動(dòng)程序函數(shù)模型形式為:Vistatus_VI_FUNC(參數(shù)1,參數(shù)2,);為了簡(jiǎn)約說(shuō)明問(wèn)題,以北京航空測(cè)控公司 amc2720任意波形發(fā)生器驅(qū)動(dòng)程序的函數(shù)體為例進(jìn)

32、行介紹,具體的以向器件寫(xiě)入波形數(shù)據(jù)的函數(shù)來(lái)講解。這些函數(shù)體只是一些基本的結(jié)構(gòu)框架。實(shí)際的函數(shù)要復(fù)雜豐富一些。儀器前綴為amc2720。初始化函數(shù)ViStatus _VI_FUNC amc2720_init (ViRsrc Resource_name, ViBoolean id_query, ViBoolean reset_instr,ViSession *instrSession)Resource_name :器件資源的標(biāo)示符?!癡XI0:187:INSTR”表示受VXI零槽控制、邏輯地址為187的器件資源。任意波形發(fā)生器的邏輯地址,由器件板上的撥碼開(kāi)關(guān)設(shè)置,只有零槽模塊的邏輯地址可設(shè)置為0,

33、在同一機(jī)箱中,不同的器件的邏輯地址不要設(shè)置成相同,如果需要用到兩塊相同的器件,需要改變其中一器件的邏輯地址。id_query:VISA布爾型的標(biāo)示查詢變量,為1表示進(jìn)行查詢,可確保初始化的儀器器件是該驅(qū)動(dòng)程序支持的器件;為0時(shí)表示跳過(guò)查詢。reset_instr:VISA布爾型的復(fù)位變量,為1表示進(jìn)行復(fù)位,為0不進(jìn)行復(fù)位操作。InstrSession:與器件進(jìn)行通話的句柄的地址。函數(shù)返回值為VISA型,為0表示初始化成功,不為0表示有錯(cuò)誤,具體錯(cuò)誤類(lèi)型可調(diào)用錯(cuò)誤信息函數(shù)進(jìn)行查看,也可查詢VISA手冊(cè)。讀狀態(tài)寄存器函數(shù),狀態(tài)寄存器地址為0AViStatus CVIFUNC amc2720_rea

34、dStatusByte (ViSession instrHandle ) ViInt16 wrdy=0;ViStatus amc2720_status = VI_SUCCESS;while(1) /讀狀態(tài)寄存器 amc2720_status=viIn16 (instrHandle, VI_A16_SPACE, 0x0a, &wrdy); if(wrdy&0x200)=0x200) break; return amc2720_status; 載入波形數(shù)據(jù)函數(shù)ViStatus CVIFUNC amc2720_loadWaveformData (ViSession instrHandle, floa

35、t frequency, float amplitude ViInt16 data4096) int i,j, k; float a; ViInt16 x; ViStatus amc2720_status = VI_SUCCESS; ViInt32 M,temp; amc2720_readStatusByte (ViSession instrHandle ); /寫(xiě)數(shù)據(jù)準(zhǔn)備好 amc2720_status = viOut16 (instrHandle, VI_A16_SPACE, 0x02, 0x7f11);/清靜 for(i=0;i4096;i+) /態(tài)存儲(chǔ)器 amc2720_readStatusByte (ViSession

溫馨提示

  • 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)論