• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于HP-VISA庫的VXI總線測試應用編程

    基于HP-VISA庫的VXI總線測試應用編程

    作者: 時間:2013-03-30 來源:網絡 收藏

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

    c++相關文章:c++教程




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 阳春市| 汶上县| 海盐县| 丹棱县| 区。| 青田县| 河西区| 吴桥县| 虞城县| 凤庆县| 广东省| 五华县| 鹿邑县| 清苑县| 旬阳县| 二连浩特市| 陆川县| 台江县| 济南市| 区。| 南宫市| 宝丰县| 綦江县| 高台县| 左权县| 锡林郭勒盟| 岳阳市| 许昌市| 临沭县| 黄山市| 大宁县| 和静县| 文安县| 浦城县| 思茅市| 台东县| 曲沃县| 清苑县| 海原县| 石泉县| 高清|