1. 程式人生 > >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(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):釋放記憶體分配。
       在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);
}