VISA操作

 

VISA操作

VISA操作表

操作表:

1、VISA資源模板:

viClose(vi):關閉特定的對話通道。

viGetAttribute(vi,attribute,attrState):獲取資源屬性狀態值。

viSetAttribute(vi,attribute,attrState):設置資源屬性狀態值。

viStatusDesc(vi,status,desc):獲取返回狀態描述字符串。

viTerminate(vi,degree,jobId):請求VISA資源終止一個或所有對話通道的正常運行。

viLock(vi,lockType,timeout,requestId,accessKey):設置資源存取模式。

viUnlock(vi):取消資源存取模式。

viEnableEvent(vi,eventType,mechanism,context):允許特定事件通知。

viDisableEvent(vi,eventType,mechanism):不允許特定事件通知。

viDiscardEvents(vi,eventType,mechanism):刷新一個對話通道上事件發生。

viWaitOnEvent(vi,ineventTypeList,timeout,outEventType,outContext):等待特定事件的發生。

viInstallHandler(vi,eventType,handler,userHandle):安裝回調事件句柄 。

viUnInstallHandler(vi,eventType,handler,userHandle):卸載回調事件句柄。

2、VISA資源管理器:

viOpenDefaultRM(sesn):打開缺省資源管理器資源對話通道。

viOpen(sesn,rsrcname,accessMode,timeout,vi):打開特定資源的對話通道。

viFindRsrc(sesn,expr,findList,retcnt,instrDesc):查詢VISA系統進行資源定位。

viFindNext(findList,instrDesc):返回前一個查詢操作查得的資源。

3、儀器控制管理:

viRead(vi,buf,count,retCount):從器件同步讀取數據。

viReadAsync(vi,buf,count,jobId):從器件異步讀取數據。

viWrite(vi,buf,count,retCount):將數據同步寫入到器件中。

viWriteAsync(vi,buf,count,jobId):將數據異步寫入到器件中。

viAssertTrigger(vi,protocol):用特定協議確認硬件或軟件觸發。

viReadSTB(vi,status):讀取服務請求狀態字節。

viClear(vi):清除器件。

viSetBuf(vi,mask,size):設置格式化I/O緩衝區大小。

viFlush(vi,mask):手動刷新格式化I/O緩衝區。

viPrintf(vi,writeFmt,arg1,arg2…):按設定格式將數據傳送到器件中。

viVPrintf(vi,writeFmt,params):按設定格式將數據傳送到器件中。

viScanf(vi,readFmt,arg1,arg2…):按設定格式從器件中讀取數據。

viVScanf(vi,readFmt,params):按設定格式從器件中讀取數據。

viQuery(vi,writeFmt,readFmt,arg1,arg2…):按設定格式對器件進行數據讀寫。

viVQuery(vi,writeFmt,readFmt,params):按設定格式對器件進行數據讀寫。

viIn8(vi,space,offset,value):從接口總線讀取8位(字節)單位。

viIn16(vi,space,offset,value):從接口總線讀取16位(字)單位數據。

viIn32(vi,space,offset,value):從接口總線讀取32位(雙字)單位數據。

 

viOut8(vi,space,offset,value):向接口總線寫入8位(字節)單位數據。

viOut16(vi,space,offset,value):向接口總線寫入16位(字)單位數據。

viOut32(vi,space,offset,value):向接口總線寫入32位(雙字)單位數據。

viMoveIn8(vi,space,offset,length,buf8):從器件存儲器向當地存儲器移動8位(字節)單位數據。

viMoveIn16(vi,space,offset,length,buf8):從器件存儲器向當地存儲器移動16位(字)單位數據。

viMoveIn32(vi,space,offset,length,buf8):從器件存儲器向當地存儲器移動32位(雙字)單位數據。

viMoveOut8(vi,space,offset,length,buf8):從當地存儲器向器件存儲器移動8位(字節)單位數據。

viMoveOut16(vi,space,offset,length,buf8):從當地存儲器向器件存儲器移動16位(字)單位數據。

viMoveOut32(vi,space,offset,length,buf8):從當地存儲器向器件存儲器移動32位(雙字)單位數據。

viMapAddress(vi,mapSpace,mapBase,mapSize,access,suggested,address):映射內存空間。

viUnMapAddress(vi):取消內存映射。

viPeek8(vi,addr,val8):從特定地址讀8位數據。

viPeek16(vi,addr,val16):從特定地址讀16位數據。

viPeek32(vi,addr,val32):從特定地址讀32位數據。

viPoke8(vi,addr,val8):向特定地址寫8位數據。

viPoke16(vi,addr,val16):向特定地址寫16位數據。

viPoke32(vi,addr,val32):向特定地址寫32位數據。

viMemAlloc(vi,size,offset):從器件存儲器分配內存。

viMemFree(vi,offset):釋放內存分配。

 

 

 

屬性表:
1、VISA資源模板:
VI_ATTR_MAX_QUEUE_LENGTH    任一時間特定對話通道最大事件排隊長度
VI_ATTR_RM_SESSION 資源管理器對話通道
VI_ATTR_RSRC_IMPL_VERSION   資源版本
VI_ATTR_RSRC_LOCK_STATE 資源存取鎖定模式(取值爲表中所列三種)
VI_ATTR_RSRC_MANF_ID    生產廠家標號
VI_ATTR_RSRC_MANF_NAME 生產廠家名
VI_ATTR_RSRC_NAME   資源名
VI_ATTR_RSRC_SPEC_VERSION   VISA規範版本
VI_ATTR_USER_DATA   資源特定對話通道所用的私有數據
2、儀器控制資源:
通用儀器控制屬性:
VI_ATTR_INTF_TYPE   對話通道接口類型
VI_ATTR_INTF_NUM    接口板號
VI_ATTR_IO_PROT I/O協議
VI_ATTR_RD_BUF_OPER_MODE    讀緩衝區操作模式
VI_ATTR_SEND_END_EN 最後一個字節是否有END字符
VI_ATTR_SUPPRESS_END_EN 是否禁止END字符
VI_ATTR_TERMCHAR    終止符
VI_ATTR_TERMCHAR_EN 是否允許終止符
VI_ATTR_TMO_VALUE   超時值
VI_ATTR_TRIG_ID 當前觸發機制
VI_ATTR_WR_BUF_OPER_MODE    寫緩衝區操作模式
GPIB儀器控制屬性:
VI_ATTR_GPIB_PRIMARY_ADDR   GPIB主地址
VI_ATTR_GPIB_SECONDARY       GPIB副地址
_ADDR
VI_ATTR_INTF_PAERNT_NUM GPIB板號
VXI儀器控制屬性:
VI_ATTR_MAINFRAME_LA    主機箱地址
VI_ATTR_MANF_ID VXI器件製造廠家標識符
VI_ATTR_MEM_BASE    內存基地址
VI_ATTR_MEM_SIZE    內存大小
VI_ATTR_MEM_SPACE   內存空間類型
VI_ATTR_MODEL_CODE 器件標號
VI_ATTR_SLOT    VXI器件槽位
VI_ATTR_VXI_LA VXI器件邏輯地址
VI_ATTR_CMDR_LA VXI總線控制器地址
VI_ATTR_IMMEDIATE_SERV 是否爲立即從者
VI_ATTR_FDC_CHNL    FDC數據傳送通道
VI_ATTR_FDC_GEN_SIGNAL_EN   是否允許通過FDC傳送數據
VI_ATTR_FDC_MODE    FDC模式
VI_ATTR_FDC_USE_PAIR    一對或一個FDC有效
VI_ATTR_SRC_INCREMENT   源偏移量
VI_ATTR_DEST_INCREMENT 目標偏移量
VI_ATTR_WIN_ACCESS 當前窗存取模式
VI_ATTR_WIN_BASE_ADDR   總線基地址
VI_ATTR_WIN_SIZE    當前窗長度
異步串行儀器控制屬性:
VI_ATTR_ASRL_AVAIL_NUM 接收緩衝區字節個數
VI_ATTR_ASRL_BAUD   波特率
VI_ATTR_ASRL_DATA_BITS 數據位
VI_ATTR_ASRL_END_IN 讀操作終止方式
VI_ATTR_ASRL_END_OUT    寫操作終止方式
VI_ATTR_ASRL_FLOW_CNTRL 數據流控制
VI_ATTR_ASRL_PARITY 檢驗極性
VI_ATTR_ASRL_STOP_BITS 停止位
VI_ATTR_DEST_INCREMENT 目標偏移量
VI_ATTR_FDC_CHNL    FDC數據傳送通道
VI_ATTR_FDC_GEN_SIGNAL_EN   是否允許通過FDC傳送數據
VI_ATTR_FDC_MODE    FDC模式
VI_ATTR_FDC_USE_PAIR    一對或一個FDC有效
      對於屬性的操作,一般用viSetAttribute(ViSession/ViEvent/ViFindList vi, ViAttr attribute, ViAttrState attrState)及viGetAttribute(ViSession/ViEvent/ViFindList vi, ViAttr attribute, ViPAttrState attrState)來進行屬性設置與獲取,屬性的主體可以是器件句柄類型、事件類型、資源對象類型等,應該分情況對待。如例3.6與例3.7的事件中斷子程序中的屬性主體即爲事件類型。

事件表:
VI_EVENT_SERVICE_REQ    服務請求通知事件
VI_EVENT_VXI_SIGP   VXI總線信號或中斷引發事件
VI_EVENT_TRIG   硬件觸發產生
VI_EVENT_IO_COMPLETION 異步I/O操作已完成
事件處理方式分事件排隊方式與事件回調方式,具體見例3.4~例3.7。

操作表:
1、VISA資源模板:
viClose(vi):關閉特定的對話通道。
viGetAttribute(vi,attribute,attrState):獲取資源屬性狀態值。
viSetAttribute(vi,attribute,attrState):設置資源屬性狀態值。
viStatusDesc(vi,status,desc):獲取返回狀態描述字符串。
viTerminate(vi,degree,jobId):請求VISA資源終止一個或所有對話通道的正常運行。
viLock(vi,lockType,timeout,requestId,accessKey):設置資源存取模式。
viUnlock(vi):取消資源存取模式。
viEnableEvent(vi,eventType,mechanism,context):允許特定事件通知。
viDisableEvent(vi,eventType,mechanism):不允許特定事件通知。
viDiscardEvents(vi,eventType,mechanism):刷新一個對話通道上事件發生。
viWaitOnEvent(vi,ineventTypeList,timeout,outEventType,outContext):等待特定事件的發生。
viInstallHandler(vi,eventType,handler,userHandle):安裝回調事件句柄。
viUnInstallHandler(vi,eventType,handler,userHandle):卸載回調事件句柄。
2、VISA資源管理器:
viOpenDefaultRM(sesn):打開缺省資源管理器資源對話通道。
viOpen(sesn,rsrcname,accessMode,timeout,vi):打開特定資源的對話通道。
viFindRsrc(sesn,expr,findList,retcnt,instrDesc):查詢VISA系統進行資源定位。
viFindNext(findList,instrDesc):返回前一個查詢操作查得的資源。
3、儀器控制管理:
viRead(vibufcountretCount):從器件同步讀取數據。
viReadAsync(vibufcount,jobId):從器件異步讀取數據。
viWritevibufcountretCount):將數據同步寫入到器件中。
viWriteAsync(vibufcount,jobId):將數據異步寫入到器件中。
viAssertTrigger(vi,protocol):用特定協議確認硬件或軟件觸發。
viReadSTB(vi,status):讀取服務請求狀態字節。
viClear(vi):清除器件。
viSetBuf(vi,mask,size):設置格式化I/O緩衝區大小。
viFlush(vi,mask):手動刷新格式化I/O緩衝區。
viPrintf(vi,writeFmt,arg1,arg2…):按設定格式將數據傳送到器件中。
viVPrintf(vi,writeFmt,params):按設定格式將數據傳送到器件中。
viScanf(vi,readFmt,arg1,arg2…):按設定格式從器件中讀取數據。
viVScanf(vi,readFmt,params):按設定格式從器件中讀取數據。
viQuery(vi,writeFmt,readFmt,arg1,arg2…):按設定格式對器件進行數據讀寫。
viVQuery(vi,writeFmt,readFmt,params):按設定格式對器件進行數據讀寫。
viIn8(vi,space,offset,value):從接口總線讀取8位(字節)單位。
viIn16(vi,space,offset,value):從接口總線讀取16位(字)單位數據。
viIn32(vi,space,offset,value):從接口總線讀取32位(雙字)單位數據。

viOut8(vi,space,offset,value):向接口總線寫入8位(字節)單位數據。
viOut16(vi,space,offset,value):向接口總線寫入16位(字)單位數據。
viOut32(vi,space,offset,value):向接口總線寫入32位(雙字)單位數據。


viMoveIn8(vi,space,offset,length,buf8):從器件存儲器向當地存儲器移動8位(字節)單位數據。
viMoveIn16(vi,space,offset,length,buf8):從器件存儲器向當地存儲器移動16位(字)單位數據。
viMoveIn32(vi,space,offset,length,buf8):從器件存儲器向當地存儲器移動32位(雙字)單位數據。
viMoveOut8(vi,space,offset,length,buf8):從當地存儲器向器件存儲器移動8位(字節)單位數據。
viMoveOut16(vi,space,offset,length,buf8):從當地存儲器向器件存儲器移動16位(字)單位數據。
viMoveOut32(vi,space,offset,length,buf8):從當地存儲器向器件存儲器移動32位(雙字)單位數據。
viMapAddress(vi,mapSpace,mapBase,mapSize,access,suggested,address):映射內存空間。
viUnMapAddress(vi):取消內存映射。
viPeek8(vi,addr,val8):從特定地址讀8位數據。
viPeek16(vi,addr,val16):從特定地址讀16位數據。
viPeek32(vi,addr,val32):從特定地址讀32位數據。
viPoke8(vi,addr,val8):向特定地址寫8位數據。
viPoke16(vi,addr,val16):向特定地址寫16位數據。
viPoke32(vi,addr,val32):向特定地址寫32位數據。
viMemAlloc(vi,size,offset):從器件存儲器分配內存。
viMemFree(vi,offset):釋放內存分配。
       在VISA定義的操作函數列,只是VISA規範的一小部分,但有一些操作函數並沒有在VISA規範中定義過,屬於軟件本身補充定義的,如打開資源管理器函數viOpenDefaultRM()函數在儀器系統初始化時進行調用,建立儀器系統資源管理器與VISA軟件的關聯;viStatusDesc()函數在VISA函數調用返回後調用,並將前一個VISA函數調用返回值作爲輸入參數,獲取字符串形式的狀態描述;viFindNext()函數是viFindRsrc()函數的補充,用於查尋VISA系統資源;viMemAlloc()函數與viMemFree()函數用於器件存儲器內存操作。而對於VISA規範中的VISA儀器控制組織器資源與VISA特定接口儀器控制資源定義的操作,VISA1.1中均沒有定義,這也爲VISA軟件今後的發展提供了方向。可以看到,應用VISA1.1函數,可以實現儀器系統基本編程要求,但對於特定的操作,尚需要進一步擴充,VISA軟件本身是一個不斷完善與發展的產物。如果要修改與開發VISA軟件,必須遵循VISA規範,並基於VISA模型進行開發

 

 

 

三、 VISA(VPP-4)
VISA:Virtual Instrumentation Software Architecture,即虛擬儀器軟件結構,是VPP系統聯盟制定的I/O接口軟件標準及其相關規範的總稱。
VISA爲虛擬儀器提供了標準化的I/O接口軟件規範。VISA是整個工業界的統一的軟件基礎。
虛擬儀器軟件結構中的標準 I/O 接口軟件稱爲VISA庫。
1. VISA的作用
爲整個工業界提供統一的軟件基礎
對驅動程序、應用程序不必考慮接口類型
僅規定爲用戶提供的標準函數,不對具體實現作任何說明
用於編寫符合VPP規範的儀器驅動程序,完成計算機與儀器之間的命令和數據傳輸,實現對儀器的控制。
VISA庫作爲低層 I/O 接口軟件,運行於計算機系統中。
2. VISA的特點
適用於各類儀器:VXI, PXI, GPIB, RS-232, TCP, USB… …
與硬件接口無關
既適用於單處理器結構又適用於多處理器或分佈式結構
適用於多種網絡機制
3. VISA庫函數
資源管理類函數
viOpenDefaultRM (ViPSession Rsrc_Manager_Handle);
viOpenDefaultRM(&defaultRMHandle);
ViStatus viOpen (ViSession Rsrc_Manager_Handle, ViRsrc Instrument_Descriptor, ViAccessMode Access_Mode, ViUInt32 Open_Timeout, ViPSession Instrument_Handle);
viOpen (defaultRMHandle, "VXI0::24::INSTR", VI_NULL, VI_NULL, &dmmHandle);
ViStatus viClose (ViSession Session_Handle);
viClose(dmmHandle);

資源操作類函數
寄存器基儀器通訊
viIn8, viIn16, viIn32
viIn16 (dmmHandle, VI_A16_SPACE, 0, &manufactureID);
viOut8, viOut16, viOut32
viOut16 (dmmHandle, VI_A16_SPACE, 4, 0);
消息基儀器通訊
viRead, viWrite
viRead (dmmHandle, readbuf, 100, &count);
viWrite (dmmHandle, writebuf, 100, &count);
格式化I/O
viPrintf, viScanf
viPrintf (dmmHandle, "*IDN?\n"); 
viScanf (dmmHandle, "%t", result);


資源模板
事件處理
viEnableEvent, viDisableEvent
viInstallHandler, viUninstallHandler
viWaitOnEvent
資源屬性
viGetAttribute, viSetAttribute

用VISA函數操作儀器的步驟
打開VISA資源管理器句柄,用到的函數:viOpenDefaultRM;
打開儀器句柄,用到的函數:viFindRsrc、viFindNext、viOpen等;
設置儀器狀態、控制儀器操作、讀取測量數據、處理儀器事件,用到的函數: viGetAttribute、viSetAttribute、viIn16、viOut16、viPrintf、viScanf、viInstallHandler、viUninstallHandler、viEnableEvent、viDisableEvent、viWaitOnEvent等;
釋放儀器句柄,用到的函數:viClose;
釋放VISA資源管理器句柄,用到的函數:viClose。

VISA函數應用舉例
void main(void)
{
  error=viOpenDefaultRM (&rsrcManager); /*打開VISA資源管理器*/
  //rsrcManager爲得到的VISA資源管理器句柄
  if(error!=VI_SUCCESS) /*如果出錯,彈出錯誤信息對話框,返回*/
  { MessagePopup("Error","Open VISA Resource Manager Error!");
   return;
  }
  error = viOpen (rsrcManager, "VXI0::16::INSTR", VI_NULL, VI_NULL,          &instHandle);   //instHandle爲得到的儀器句柄

  if(error!=VI_SUCCESS){ 
   MessagePopup("Error","Open Instrument Error!");
   return;
  }
  else{ /*獲取儀器模塊代碼,設置儀器操作超時時間爲2000毫秒*/
   viGetAttribute (instHandle, VI_ATTR_MODEL_CODE, &moduleID);    viSetAttribute (instHandle, VI_ATTR_TMO_VALUE, 2000);
  }
  viClose(instHandle); /*關閉儀器句柄和VISA資源管理器*/
  viClose(rsrcManager);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章