<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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




          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();