新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于HP-VISA庫的VXI總線測試應(yīng)用編程

基于HP-VISA庫的VXI總線測試應(yīng)用編程

作者: 時間:2013-03-30 來源:網(wǎng)絡(luò) 收藏

  5.屬性
  屬性(Attribute)是與會話或資源相關(guān)的,可以通過查詢或設(shè)備屬性的值來獲取或改變會話、資源的狀態(tài)(某些屬性是只讀的,另有一些屬性則是可讀寫的)。屬性可分為以下幾類:
  ①資源屬性
  包括與資源的制造商及VISA庫版本有關(guān)的信息,以及資源管理會話的狀態(tài)。
 ?、谝话銉x器屬性
  與會話相關(guān)的,主要用于確定諸如超時設(shè)置、緩沖區(qū)是否清除、接口類型等信息。
 ?、厶囟ń涌陬愋拖嚓P(guān)的屬性
  包括與、GPIB、ASRL、GPIB-等接口類型相關(guān)儀器的狀態(tài)信息。
  ④事件屬性
  這是一些只讀的屬性,可以查詢?nèi)绠?dāng)前允許的事件、觸發(fā)線設(shè)置等信息。
  6.事件及句柄
  事件指需要應(yīng)用程序進(jìn)行處理的一些情況,一般有三類:服務(wù)請求(SRQs)、中斷及硬件觸發(fā)器(Trigger)。事件只有在被設(shè)置為允許狀態(tài)后才能被接收和處理。
  這可以通過兩種方式完成:
  ①首先裝載一個事件句柄(ViInstallHandler函數(shù)),設(shè)置事件為允許狀態(tài)(ViEnableEvent)。這樣,當(dāng)指定的事件發(fā)生后,就可以轉(zhuǎn)到事件句柄回調(diào)函數(shù)中進(jìn)行處理(通常是提供一些提示信息)。
  ②用ViEnableEvent函數(shù)設(shè)置事件為允許,然后在程序中適當(dāng)?shù)牡胤秸{(diào)用ViWaitOnEvent函數(shù)以等待事件的發(fā)生,這將暫停程序的執(zhí)行過程直到事件發(fā)生并被處理或超時。(這兩種方法在同一個會話中也不能并用)。
  另外,在事件響應(yīng)完之后,設(shè)置為允許的事件應(yīng)在適當(dāng)?shù)牡胤街匦抡{(diào)為禁止,并卸載事件句柄(ViUNInstallHandler函數(shù)和ViDisableEvent函數(shù))。
  7.出錯處理
  在程序中考慮對出錯的處理是一種好的編程風(fēng)格。VISA庫對此也提供了支持。一般可以在每一個VISA庫函數(shù)的調(diào)用后通過檢查返回值(與VI-Success常量比較)來判別是否有錯誤發(fā)生。同樣,這里也需要定義相應(yīng)的錯誤句柄回調(diào)函數(shù),完成對錯誤的處理(如顯示提示信息、關(guān)閉會話、退出應(yīng)用等)。
  8.鎖機(jī)制
  在VISA庫編程中,可以同時對同一個設(shè)備保持多個會話,同樣,多個應(yīng)用也可以通過不同的會話對同一個設(shè)備或資源訪問。在某些情況下,這將帶來問題(與數(shù)據(jù)庫中的并發(fā)操作以及完整性概念相似)。這樣,可能某一應(yīng)用在訪問資源時就希望能限制其它應(yīng)用對這一資源的訪問。這時,就需要用到加/解鎖函數(shù)調(diào)用。
  ViLock函數(shù):對資源加鎖,可以有兩種類型的鎖:排他鎖與共享鎖。
  ViUnLock函數(shù):解鎖。
  9.對設(shè)備編程
  VISA庫中對VXI儀器模塊的應(yīng)用開發(fā)提供了豐富的函數(shù),并可以支持VXI、GPIB及GPIB-VXI三種接口類型。
  VXI儀器模塊可分類為兩種:消息基設(shè)備和寄存器基設(shè)備。前者擁有自己的處理器,因而可以直接解釋并執(zhí)行SCPI命令,在VISA庫函數(shù)調(diào)用中,這只需把SCPI命令字串作為相應(yīng)的調(diào)用參數(shù)即可。同時,VISA庫中還提供了直接對其寄存器操作的函數(shù)。后者則沒有自己的處理器,因而不能解釋SCPI命令。
  VISA庫中為VXI儀器模塊提供了兩級內(nèi)存操作函數(shù)接口:
 ?、俑呒墐?nèi)存函數(shù)
  它屏蔽了低層的內(nèi)存映射及寄存器訪問機(jī)制,向用戶提供了簡單易用的函數(shù)調(diào)用接口,從而可以方便地訪問VXI接口上指定的內(nèi)存空間。
  ViInxx函數(shù):讀入指定內(nèi)存空間的值
  ViOutxx函數(shù):向指定內(nèi)存空間輸出值
  ViMoveInxx函數(shù):對指定內(nèi)存處成塊數(shù)據(jù)的讀入
  ViMoveOutxx函數(shù):向內(nèi)存輸出成塊數(shù)據(jù)
  xx分別對應(yīng)8、16或32位數(shù)據(jù),相應(yīng)為8、16、32。
  ②低級內(nèi)存函數(shù)
  高級內(nèi)存函數(shù)簡單易用,但其缺陷在于速度上的損失(內(nèi)部的地址映射及寄存器訪問帶來的影響),因而在某些對速度有較高要求的場合,還需使用VISA庫中的低層內(nèi)存函數(shù)。
  ViMapAddress函數(shù):完成內(nèi)存空間的映射
  ViPeekxx函數(shù):讀入寄存器內(nèi)容
  ViPokexx函數(shù):向寄存器中寫入
  ViUnMapAddress函數(shù):釋放內(nèi)存映射
  xx同樣代表8、16或32位后綴。
  10.應(yīng)用示例
  前面幾小節(jié)中分別討論了基于的VXI應(yīng)用開發(fā)中的一些細(xì)節(jié),下面,通過給出一個具體的程序?qū)嵗M(jìn)一步說明:
  //示例程序example.c源代碼清單
  #include<visa.h>    //包含VISA庫頭文件
  #include<stdio.h>
  voidmainO
  {
  ViSessiondefaultRm,Vi;  //定義保存會話句柄的變量
  doubleres;
  doublelist【2】=(1,0.001);
  ViOpenDefaultRM(defaultRM);//打開缺省資源管理器會話
  //打開儀器會話(接口類型為VXIO,邏輯地址24)
  ViOpen(defaultRM,“VXIO∶∶22∶∶INSTR”,VI-NULL,VI-NULL,Vi);
  //設(shè)置對會話的獨(dú)占鎖
  ViLock(Vi,VI-EXCLUSIVE-LOCK,2000,VI-NULL,VI-NULL);
  /*下面一段代碼為格式化I/O函數(shù)演示*/
  ViPrintf(Vi,“*RST\n”);//利用格式化I/O函數(shù),初始化儀器
  ViPrintf(Vi,“CALC∶DBM∶REF50\n”);//利用格式化I/O函數(shù)向儀器發(fā)送命令,
  VIPrintf(Vi,“MEAS∶VOLT∶AC?%,2f\n”,list);//本例為進(jìn)行直流電壓測量
  ViScanf(Vi,“%lf”,res);//利用格式化I/O函數(shù)讀出測量結(jié)果
  printf(“MeasurementResults:%lf\n”,res);

c++相關(guān)文章:c++教程




關(guān)鍵詞: HP-VISA庫 VXI 總線測試

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉