基于VISA庫的任意波形發(fā)生器驅(qū)動程序的開發(fā)設(shè)計說明_第1頁
基于VISA庫的任意波形發(fā)生器驅(qū)動程序的開發(fā)設(shè)計說明_第2頁
基于VISA庫的任意波形發(fā)生器驅(qū)動程序的開發(fā)設(shè)計說明_第3頁
基于VISA庫的任意波形發(fā)生器驅(qū)動程序的開發(fā)設(shè)計說明_第4頁
基于VISA庫的任意波形發(fā)生器驅(qū)動程序的開發(fā)設(shè)計說明_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 PAGE31 / NUMPAGES14第三章 基于VISA庫的驅(qū)動程序的研究本章簡介:VXI總線以其良好的測控性能成為虛擬儀器的一個重要發(fā)展方向,作為一個開放式的測控系統(tǒng),虛擬儀器軟件結(jié)構(gòu)(VISA)為不同廠商的VXI器件的驅(qū)動程序提供了統(tǒng)一的軟件基礎(chǔ)。本文通過對VISA庫與VXIplug &play規(guī)的介紹來闡述儀器驅(qū)動程序的開發(fā),并描述了VXI總線寄存器基器件任意波形發(fā)生器驅(qū)動程序的設(shè)計與實現(xiàn)。3.1 VISA簡介隨著VXI儀器的廣泛使用,出現(xiàn)了相應(yīng)的的I/O控制軟件,由于不同廠商的硬件提供的I/O庫不同,儀器驅(qū)動程序不兼容,儀器之間很難集成。VXIplug&play聯(lián)盟的宗旨是通過開放

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

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

4、望禁止別的應(yīng)用程序訪問該資源。為此,VISA定義一種鎖定機(jī)制來限制對資源的訪問。鎖定資源的操作是調(diào)用函數(shù)viLock( ),解鎖的操作是調(diào)用函數(shù)viUnLock( )。訪問控制服務(wù)viLock(ViSession instr,ViAccessMode lockType,ViUInt32 timeout,ViKeyId requestedKey,ViKeyId accessKey);LockType表示請求鎖定的類型,它有兩個值,要么是VI_EXCLUSIVE_LOCK,表示獨占鎖定;要么是VI_SHARED_LOCK,表示共享鎖定。timeout表示超時設(shè)置,即在設(shè)定的時間未完成操作,則返回錯

5、誤碼。否則忽略此參數(shù),此時timeout值取VI_NULL。viUnLock(ViSession instr);該操作取消對指定資源的鎖定。3.1.2 VISA資源管理函數(shù)VISA資源管理器為應(yīng)用程序提供基本服務(wù),包括查找資源和打開與資源的通話。下面簡述這些服務(wù):訪問函數(shù)和操作資源管理器允許打開與資源的通話,通話由應(yīng)用程序請求而建立。在應(yīng)用程序關(guān)閉通話或功能失常時系統(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)資源,同時返回與該資源的

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

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

8、1:INSTRVXI接口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對VXI接口板級寄存器的訪問GPIB-VXI1:MEMACC對1號GPIB-VXI接口板級寄存器的訪問表3-1 器件資源描述符VXI0槽為VXI儀器總線的運(yùn)行提供所需要的硬件資源。它們?yōu)橥獠客ㄐ沤涌谂cVXI總線之間提供轉(zhuǎn)換,并提供協(xié)議。VXI0槽模塊還可以提供訪問VXI儀器的功能。在一些情況下串行器件(ASR

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29、給最終用戶的是DLL文件,相當(dāng)于一黑匣子,用戶可以調(diào)用其中的函數(shù),卻不能改動它。將驅(qū)動程序C程序源代碼生成DLL文件首先必須創(chuàng)建一個頭文件,它包含想要從DLL輸出的函數(shù)原型、結(jié)構(gòu)和符號。DLL的源代碼均包括該頭文件,以幫助創(chuàng)建DLL。如果程序發(fā)現(xiàn)DLL的源代碼模塊至少輸出了一個函數(shù)或變量,那么程序生成一LIB文件,這LIB文件很小,它不包含任何函數(shù)或變量,它只是列出了所有已輸出函數(shù)和變量的符號名。如果要DLL的輸出符號的任何可執(zhí)行模塊,該LIB文件是必不可少的。采用Labwindows/CVI編制DLL文件操作也很簡便,可由函數(shù)面板文件編輯器的菜單中option中的creatdll proje

30、ct 項,產(chǎn)生創(chuàng)造DLL文件的工程項目,其包含兩個文件.h和.c文件與函數(shù)面板文件.fp,這與前面介紹的由函數(shù)面板文件產(chǎn)生的函數(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文件,這樣只要編程人員偏好某種虛擬儀器的開發(fā)平臺,就可選用自己適合的編程語言,而不用當(dāng)心驅(qū)動程序的兼容性問題,從而使得驅(qū)動程序達(dá)到開放性的目的。而由這四種C開發(fā)的

31、DLL,LIB文件的驅(qū)動程序,如虛擬儀器的應(yīng)用程序開發(fā)平臺采用的是Labwindows/CVI,則有一些細(xì)節(jié)需注意,因Labwindows/CVI是基于標(biāo)準(zhǔn) C開發(fā)的,在某些細(xì)節(jié)方面和這四種C會有出入,若未注意到這些差別也會出錯。函數(shù)的許多標(biāo)準(zhǔn)返回值在頭文件Visatype.h和Vpptype.h中定義,類型為VISA庫的ViStatus類型。一般儀器驅(qū)動程序函數(shù)模型形式為:Vistatus_VI_FUNC(參數(shù)1,參數(shù)2,);為了簡約說明問題,以航空測控公司 amc2720任意波形發(fā)生器驅(qū)動程序的函數(shù)體為例進(jìn)行介紹,具體的以向器件寫入波形數(shù)據(jù)的函數(shù)來講解。這些函數(shù)體只是一些基本的結(jié)構(gòu)框架。實

32、際的函數(shù)要復(fù)雜豐富一些。儀器前綴為amc2720。初始化函數(shù)ViStatus _VI_FUNC amc2720_init (ViRsrcResource_name, ViBoolean id_query, ViBoolean reset_instr,ViSession *instrSession)Resource_name :器件資源的標(biāo)示符?!癡XI0:187:INSTR”表示受VXI零槽控制、邏輯地址為187的器件資源。任意波形發(fā)生器的邏輯地址,由器件板上的撥碼開關(guān)設(shè)置,只有零槽模塊的邏輯地址可設(shè)置為0,在同一機(jī)箱中,不同的器件的邏輯地址不要設(shè)置成一樣,如果需要用到兩塊一樣的器件,需要改變

33、其中一器件的邏輯地址。id_query:VISA布爾型的標(biāo)示查詢變量,為1表示進(jìn)行查詢,可確保初始化的儀器器件是該驅(qū)動程序支持的器件;為0時表示跳過查詢。reset_instr:VISA布爾型的復(fù)位變量,為1表示進(jìn)行復(fù)位,為0不進(jìn)行復(fù)位操作。InstrSession:與器件進(jìn)行通話的句柄的地址。函數(shù)返回值為VISA型,為0表示初始化成功,不為0表示有錯誤,具體錯誤類型可調(diào)用錯誤信息函數(shù)進(jìn)行查看,也可查詢VISA手冊。讀狀態(tài)寄存器函數(shù),狀態(tài)寄存器地址為0AViStatus CVIFUNC amc2720_readStatusByte (ViSession instrHandle ) ViInt1

34、6 wrdy=0;ViStatus amc2720_status = VI_SUCCESS;while(1) /讀狀態(tài)寄存器 amc2720_status=viIn16 (instrHandle, VI_A16_SPACE, 0 x0a, &wrdy); if(wrdy&0 x200)=0 x200) break;return amc2720_status; 載入波形數(shù)據(jù)函數(shù)ViStatus CVIFUNC amc2720_loadWaveformData (ViSession instrHandle, float 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 ); /寫數(shù)據(jù)準(zhǔn)備好 amc2720_status = viOut16 (instrHandle, VI_A16_SPACE, 0 x02, 0 x7f11);/清靜 for(i=0;i4096;i+) /態(tài)存儲器 amc2720_readStatusByte (ViSession instr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論