?? 3.虛擬儀器系統(tǒng)io接口軟件.txt
字號:
VISA儀器控制組織器資源 VICO VI_RSRC_VISA_IC_ORG
寫資源 WR VI_RSRC_WR
讀資源 RD VI_RSRC_RD
格式化I/O資源 FIO VI_RSRC_FMT_IO
觸發(fā)資源 TRIG VI_RSRC_TRIG
清除資源 CLR VI_RSRC_CLR
狀態(tài)/服務(wù)請求資源 SRQ VI_RSRC_SRQ
高級存取資源 HILA VI_RSRC_HL_ACC
低級存取資源 LOLA VI_RSRC_LL_ACC
器件特定命令資源 DEVC VI_RSRC_DEV_CMD
CPU接口資源 CPUI VI_RSRC_CPU_INTF
GPIB總線接口控制資源 GBIC VI_RSRC_GPIB_INTF
VXI總線器件配置資源 VXDC VI_RSRC_VXI_DEV_CONF
VXI總線接口控制資源 VXIC VI_RSRC_VXI_INTF
VXI總線零槽資源 VXS0 VI_RSRC_VXI_SLOT_0
VXI總線系統(tǒng)中斷資源 VXSI VI_RSRC_SYS_INTR
VXI總線信號處理器資源 VXSP VI_RSRC_SIG_PROCESSOR
VXI總線信號資源 VXS VI_RSRC_VXI_SIG
VXI總線中斷資源 VXIN VI_RSRC_VXI_INTR
VXI總線擴(kuò)展器接口資源 VXEI VI_RSRC_VXI_EXTDR
異步串行總線接口控制資源 ASIC VI_RSRC_ASRL_INTF
表3.2 VISA資源類型定義
下面對VISA資源描述格式中各部分進(jìn)行逐一分析:
1、 資源概述:簡要說明資源所要實(shí)現(xiàn)的功能,一般不針對特定儀器類型或接口進(jìn)
行描述,只提供一個(gè)通用概念。
2、 資源屬性表及屬性描述:資源屬性表列出了資源所有屬性,并在以后的屬性描
述中作較詳細(xì)的說明。資源屬性表如表3.3所示。
屬性符號名 存取特性 數(shù)據(jù)類型 取值范圍
讀/寫特性 私有/公有特性
表3.3 VISA資源屬性表
l 屬性符號名:用于標(biāo)識屬性。
l 存取特性:包括讀/寫特性與私有/公有特性。讀/寫特性可選擇R/W(可讀可寫)
與RO(只讀);私有/公有特性可選擇Local(對話通道私有)與Global(資源內(nèi)所
有對話通道公有)。
l 數(shù)據(jù)類型:VISA數(shù)據(jù)類型是獨(dú)立于編程語言定義的,在具體編程中調(diào)用VISA函數(shù)
進(jìn)行實(shí)際操作時(shí),VISA數(shù)據(jù)類型與具體數(shù)據(jù)類型將一一映射。VISA定義了兩類數(shù)據(jù)
類型:基本數(shù)據(jù)類型與復(fù)雜數(shù)據(jù)類型。分別見表3.4和表3.5。
l 取值范圍:定義了該屬性數(shù)據(jù)的取值范圍。
基本數(shù)據(jù)類型 數(shù)據(jù)類型描述 基本數(shù)據(jù)類型 數(shù)據(jù)類型描述
ViChar 字符類型 ViInt32 32位整型
ViPChar 字符指針類型 ViPInt32 32位整型指針類型
ViByte 字節(jié)類型 ViInt64 64位整型
ViPByte 字節(jié)指針類型 ViPInt64 64位整型指針類型
ViString 字符串類型 ViUInt8 8位無符號整型
ViPString 字符串指針類型 ViPUInt8 8位無符號整型指針類型
ViBoolean 布爾類型 ViUInt16 16位無符號整型
ViPBoolean 布爾指針類型 ViPUInt16 16位無符號整型指針類型
ViInt8 8位整型 ViUInt32 32位無符號整型
ViPInt8 8位整型指針類型 ViPUInt32 32位無符號整型指針類型
ViInt16 16位整型 ViUInt64 64位無符號整型
ViPInt16 16位整型指針類型 ViPUInt64 64位無符號整型指針類型
ViReal32 32位實(shí)型 ViReal64 64位實(shí)型
ViPReal32 32位實(shí)型指針類型 ViPReal64 64位實(shí)型指針類型
表3.4 VISA基本數(shù)據(jù)類型
復(fù)雜數(shù)據(jù)類型 數(shù)據(jù)類型描述 復(fù)雜數(shù)據(jù)類型 數(shù)據(jù)類型描述
ViRsrc 資源標(biāo)識類型 ViHndlr 操作句柄類型
ViPRsrc ViRsrc指針類型 ViPHndlr ViHndlr指針類型
ViStatus 返回狀態(tài)值類型 ViVAList 參數(shù)列類型
ViPStatus ViStatus指針類型 ViJobId 操作請求類型
ViBuf 數(shù)據(jù)塊類型 ViPJobId ViJobId指針類型
ViPBuf ViBuf指針類型 ViJobStatus 操作請求狀態(tài)類型
ViAddr 邏輯地址類型 ViPJobStatus ViJobStatus指針類型
ViPAddr ViAddr指針類型 ViSpaceInfo 內(nèi)存映射類型
ViSession 資源對話通道類型 ViPhysAddr 物理地址類型
ViPSession ViSession指針類型 ViSigMask 信號過濾類型
ViVersion 資源版本類型 ViIntrMask 中斷屏蔽類型
ViPVersion ViVersion指針類型 ViBusAddress 總線地址類型
ViObject 資源對象類型 ViBusSize 地址長度類型
ViPObject ViObject指針類型 ViAttr 資源屬性類型
ViRsrcList 資源標(biāo)識列類型 ViAttrState 資源屬性值類型
ViClass 資源類類型 ViLock 資源進(jìn)程/線程管理類型
ViEvent 資源事件類型 ViPLock ViLock指針類型
ViPEvent ViEvent指針類型 ViEventType 資源事件類型類型
ViAccessMode 控制存取機(jī)制類型 ViPEventType ViEventType 指針類型
表3.5 VISA復(fù)雜數(shù)據(jù)類型
3、 資源事件集:VISA定義了一種運(yùn)行機(jī)制,用于在一定條件下通知應(yīng)用程序一個(gè)
行為的發(fā)生,這些條件與發(fā)生被稱為VISA事件。VISA事件模型如圖3.2所示。
VISA事件模型由三部分組成。1)事件捕捉與通知:資源感知到事件發(fā)生,并與對
話通道相聯(lián)系;2)事件請求與處理:告知應(yīng)用程序事件已發(fā)生,VISA定義了事件
處理機(jī)制;3)事件響應(yīng):根據(jù)協(xié)議對事件進(jìn)行響應(yīng)。
圖3.2 VISA事件模型
根據(jù)VISA事件引發(fā)的原因,事件類型可分為以下幾種:
l 由硬件請求產(chǎn)生:如GPIB器件SRQ信號有效。
l 由硬件響應(yīng)產(chǎn)生:如VXI總線中的SYSFAIL線有效。
l 由于資源行為的起始與結(jié)束所產(chǎn)生:如應(yīng)用程序想知道系統(tǒng)服務(wù)是處于在線狀態(tài)
還是離線狀態(tài)。
l 由于資源轉(zhuǎn)換到不正常操作,必須終止正常操作所產(chǎn)生的事件。
l 在應(yīng)用程序正常運(yùn)行過程中的錯(cuò)誤散轉(zhuǎn)情況。
在VISA中,定義了兩種事件處理機(jī)制。一種是事件排隊(duì)方式(Queuing),它主要
分兩步進(jìn)行:首先允許特定事件的處理機(jī)制,然后在一定時(shí)刻點(diǎn)去查詢事件是否已
經(jīng)發(fā)生(調(diào)用VISA中的viWaitOnEvent()函數(shù),事件類型見VI_EVENT_類參數(shù)),在
事件發(fā)生之后,必須關(guān)閉特定事件的處理機(jī)制,以防止資源溢出。例3.4所示為用
事件排隊(duì)方式處理VISA事件。
例3.4 排隊(duì)方式處理VISA事件
另一種事件處理方式為回調(diào)方式(Callback),也即中斷方式。它首先安裝回調(diào)句
柄,然后在程序中允許事件處理機(jī)制,并應(yīng)編寫相應(yīng)的中斷子程序。利用回調(diào)方式
進(jìn)行處理的事件類型主要有以下幾種:
l VI_EVENT_SERVICE_REQ:該事件表示VXI器件服務(wù)請求
l VI_EVENT_TRIG:該事件表示從VXI器件接收到硬件觸發(fā)信號
l VI_EVENT_VXI_SIGP:該事件表示從VXI器件接收到總線信號或總線中斷信號
例3.5、例3.6與例3.7分別是利用回調(diào)方式對各種類型事件進(jìn)行處理的實(shí)例,其中
例3.5是對HP公司推出的VXI數(shù)字萬用表模塊進(jìn)行服務(wù)請求事件的處理,而例3.6與
例3.7是對浙江大學(xué)數(shù)字所自主開發(fā)的VXI數(shù)字輸入/輸出模塊進(jìn)行觸發(fā)事件與總線
中斷事件處理。事實(shí)上,這幾種事件處理示例可直接推廣應(yīng)用到其它的消息基器件
與寄存器基器件中。
例3.5 利用回調(diào)方式對VXI模塊進(jìn)行服務(wù)請求事件處理:
例3.5 回調(diào)方式進(jìn)行服務(wù)請求事件處理
在這種模式中,主程序安裝的事件句柄類型為VI_EVENT_SERVICE_REQ,并須將服務(wù)
請求使能。當(dāng)服務(wù)請求事件發(fā)生時(shí),安裝的事件句柄被激活,系統(tǒng)進(jìn)入中斷子程序
。中斷子程序首先對事件類型進(jìn)行判斷,然后進(jìn)行具體事件處理。在主程序退回時(shí)
,必須關(guān)閉事件允許機(jī)制,并將安裝的事件句柄進(jìn)行卸載。
例3.6 利用回調(diào)方式對VXI模塊進(jìn)行觸發(fā)事件處理:
例3.6 回調(diào)方式進(jìn)行觸發(fā)事件處理
在這種模式中,主程序安裝的事件句柄類型為VI_EVENT_TRIG,并須將服務(wù)請求使
能。本主程序利用設(shè)置儀器屬性的方式進(jìn)行觸發(fā)總線的選擇與有效,并利用軟件進(jìn)
行同步觸發(fā)信號線TTL0。當(dāng)觸發(fā)事件發(fā)生時(shí),安裝的事件句柄被激活,系統(tǒng)進(jìn)入中
斷子程序。中斷子程序首先對事件類型進(jìn)行判斷,然后進(jìn)行具體事件處理。需要注
意的是,在中斷子程序中獲取事件的句柄不再是儀器句柄vi,而是ViEvent類型的
事件句柄ctx。在主程序退回時(shí),必須將安裝的事件句柄進(jìn)行卸載。
例3.7 利用回調(diào)方式對VXI模塊進(jìn)行總線中斷事件處理:
例3.7 回調(diào)方式進(jìn)行總線中斷事件處理
在這種模式中,主程序安裝的事件句柄類型為VI_EVENT_VXI_SIGP,并須將服務(wù)請
求使能。本主程序直接對器件內(nèi)部控制寄存器進(jìn)行寫操作,允許中斷產(chǎn)生并強(qiáng)制中
斷產(chǎn)生。當(dāng)觸發(fā)事件發(fā)生時(shí),安裝的事件句柄被激活,系統(tǒng)進(jìn)入中斷子程序。中斷
子程序首先對事件類型進(jìn)行判斷,然后進(jìn)行具體事件處理。同樣,在中斷子程序中
獲取事件的句柄不再是儀器句柄vi,而是ViEvent類型的事件句柄ctx。在主程序退
回時(shí),必須將安裝的事件句柄進(jìn)行卸載。
4、 資源操作集:包括了一系列VISA資源操作。而每個(gè)操作又分別包括以下各項(xiàng):
l 名字(含形參名):用于操作函數(shù)原型的簡單描述。
l 目標(biāo):簡要描述相應(yīng)的操作功能。
l 參數(shù)表:列出了操作中所有參數(shù)的相關(guān)信息,包括參數(shù)名、輸入/輸出方向、參
數(shù)數(shù)據(jù)類型及參數(shù)描述。操作參數(shù)表如表3.6所示。
參數(shù)名 輸入/輸出方向 數(shù)據(jù)類型 描述
表3.6資源操作參數(shù)表
l 返回狀態(tài)值:VISA資源操作返回狀態(tài)值類型是唯一的,即為ViStatus。操作返回
狀態(tài)值包括完成代碼與錯(cuò)誤代碼兩類。
l 描述:對每個(gè)函數(shù)的功能及其中關(guān)鍵參數(shù)的含義等作較詳細(xì)的描述。
l 相關(guān)操作項(xiàng):可參考的其它相關(guān)操作。
l 實(shí)現(xiàn)要求:操作實(shí)現(xiàn)時(shí)應(yīng)滿足的一些條件與備注要求。
3.3 VISA資源定義
3.3.1 VISA資源模板
VISA資源模板相當(dāng)于面向?qū)ο蟪绦颍∣OP)中的基類,VISA其它資源類全部是它的
子類。VISA資源模板上本身沒有定義資源,它定義的是公共屬性、事件與操作,所
有VISA資源全部繼承了資源模板的屬性、事件與操作。在其它VISA資源定義中,實(shí)
際上是定義了資源特有的屬性、事件與操作,VISA資源真正擁有的屬性、事件與操
作包括資源模板定義的公共部分與資源特有的私有部分。
VISA資源模板中主要定義了以下幾個(gè)共性功能:
l 資源定位與查尋
l 資源創(chuàng)建與刪除
l 資源屬性讀取與修改
l 資源存取模式與權(quán)限控制
l 基本通訊服務(wù)(包括操作激活與事件報(bào)告)
VISA資源模板的定義也包括相應(yīng)的屬性、事件與操作,各自的描述格式與定義方式
與其它VISA資源描述是一致的,這主要是為了其他資源可以方便地從基類繼承所有
屬性、事件與操作。
資源模板定義的屬性如表3.7所示:
屬性符號名 存取特性 數(shù)據(jù)類型 取值范圍
讀寫特性 公私特性
VI_ATTR_RSRC_CLASS 只讀 公有 ViClass 無
VI_ATTR_RSRC_NAME 只讀 公有 ViString 無
VI_ATTR_RSRC_VERSION 只讀 公有 ViVersion 無
VI_ATTR_RSRC_LOCK_STATE 只讀 公有
ViUInt16 VI_NO_LOCKVI_NON_EXCLUSIVE_LOCKVI_EXCLUSIVE_LOCK
VI_ATTR_MAX_QUEUE_LENGTH 可讀可寫 私有 ViUInt32 無
VI_ATTR_QUEUE_TRIP_POINT 可讀可寫 私有 ViUInt32 無
VI_ATTR_USER_DATA 可讀可寫 私有 ViAddr 無
表3.7 VISA資源模板屬性表
VISA資源模板屬性描述:
屬性名 描述
VI_ATTR_RSRC_CLASS 資源所屬類的標(biāo)識符
VI_ATTR_RSRC_NAME 資源名標(biāo)識符
VI_ATTR_RSRC_VERSION 資源版本標(biāo)識符
VI_ATTR_RSRC_LOCK_STATE 資源存取鎖定模式(取值為表3.7中所列三種)
VI_ATTR_MAX_QUEUE_LENGTH 任一時(shí)間特定對話通道最大排隊(duì)的事件長度
VI_ATTR_QUEUE_TRIP_POINT 排隊(duì)事件的觸發(fā)點(diǎn)
VI_ATTR_USER_DATA 資源特定對話通道所用的私有數(shù)據(jù)
資源模板定義的事件如下所示:
事件 說明
VI_EVENT_ALERT 通知應(yīng)用程序?qū)υ捦ǖ阑蛸Y源退出、復(fù)位或關(guān)閉
VI_EVENT_RSRC_ACTIVE 通知應(yīng)用程序資源已激活
VI_EVENT_RSRC_INACTIVE 通知應(yīng)用程序資源未被激活
VI_EVENT_RSRC_LOCK_CHANGED 通知應(yīng)用程序存取鎖定狀態(tài)已更新
VI_EVENT_QUEUE_FULL 通知應(yīng)用程序等待操作事件隊(duì)列已滿
VI_EVENT_QUEUE_TRIP 通知應(yīng)用程序事件等待操作觸發(fā)點(diǎn)已到
VI_EVENT_RSRC_AVAILABLE 通知應(yīng)用程序特定資源已有效
資源模板定義的操作如下:
viFindRsrc(vi,expr,accessLink)
viOpen(sesn,rsrcname,accessMode,timeout,vi)
viClose(vi)
viTerminate(vi,target,degree,jobId,immediate,flagFlushData)
viAttachRsrc(vi,rsrcName,refName)
viDetachRsrc(vi,refName)
viSetAttribute(vi,attribute,attrState)
viSetRsrcAttribute(vi,rsrcName,attribute,attrState)
viGetAttribute(vi,attribute,attrState)
viGetRsrcAttribute(vi,attribute,attrState)
viLock(vi,lockType,shareType,timeout,lockId)
viLockRsrc(vi,rsrcName,lockType,shareType,timeout,lockId)
viUnlock(vi,lockId)
viUnlockRsrc(vi,rsrcName,lockId)
viEnableEvent(vi,eventType,mechanism,context)
viDisableEvent(vi,eventType,mechanism)
viQueryEventMech(vi,eventType,mechanism)
viInstallHandler(vi,eventType,handler,userHandle)
viUnInstallHandler(vi,eventType,handler,userHandle)
viQueryHandlers(vi,eventType,handlers,userHandle)
viAcknowledgeEvent(vi,eventType,context)
viWaitOnEvent(vi,eventType,timeout,outContext)
viWaitOnMultipleEvent(vi,eventTypeList,timeout,outContext,
outEventType)
viDiscardEvents(vi,eventType,mechanism)
viGetEventInfo(vi,eventType,context,rsrcName,info)
viRaiseEvent(vi,eventType,context,target)
viEventHandler(vi,eventType,context,userHandle)
下面將分別對各個(gè)操作作一詳細(xì)描述。
1、 viFindRsrc(vi,expr,accessLink)
1) 目標(biāo):查詢VISA系統(tǒng),進(jìn)行資源定位
2) 參數(shù)表:
參數(shù)名 輸入/輸出方向 數(shù)據(jù)類型 描述
vi 輸入 ViSession 資源對話通道標(biāo)識符
expr 輸入 ViString 用于資源名匹配的表達(dá)式
accessLink 輸出 ViRsrcList 資源所在位置列表
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -