《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 業(yè)界動(dòng)態(tài) > 通用計(jì)算機(jī)平臺(tái)上IEEE-488兼容儀器的設(shè)計(jì)

通用計(jì)算機(jī)平臺(tái)上IEEE-488兼容儀器的設(shè)計(jì)

2008-04-01
作者:呂 鋒, 陳 園
關(guān)鍵詞: NI-Device 寄存器組 指令集 C++ I/O

  摘 要: 提出了一個(gè)通用計(jì)算機(jī)平臺(tái)上IEEE-488兼容儀器的設(shè)計(jì)方案,給出了系統(tǒng)的軟硬件組成,并且對儀器端程序以及狀態(tài)報(bào)告模型的設(shè)計(jì)進(jìn)行了說明。該方案主要通過C++" title="C++">C++語言編程實(shí)現(xiàn),具有成本低和可移植性強(qiáng)的特點(diǎn),目前已經(jīng)在某基于計(jì)算機(jī)的測試儀器上得到初步應(yīng)用并取得了較好的效果。
  關(guān)鍵詞: IEEE-488(GPIB)接口 SCPI 自動(dòng)測試系統(tǒng)


  通用計(jì)算機(jī)系統(tǒng)具有強(qiáng)大的處理能力以及豐富的軟件資源,正在被越來越多的現(xiàn)代儀器所采用。在儀器的設(shè)計(jì)過程中,往往需要提供GPIB接口以及相應(yīng)的指令集" title="指令集">指令集以方便用戶組成自動(dòng)測試系統(tǒng)。針對這一需求,本文提出了一個(gè)通用計(jì)算機(jī)平臺(tái)上IEEE-488兼容儀器的設(shè)計(jì)方案:通過使用GPIB接口卡和編寫相應(yīng)的儀器端程序,使得基于計(jì)算機(jī)的儀器能夠模擬一個(gè)或者多個(gè)GPIB儀器。


1 IEEE-488儀器簡介
  IEEE-488儀器模型如圖1所示。儀器提供GPIB接口以及相應(yīng)的指令集,指令集由以下幾部分組成[1~2]
  (1) IEEE-488.2公用命令集,如:*IDN?,*STB?,*CLS等。
  (2) SCPI標(biāo)準(zhǔn)規(guī)定的STATus和SYSTem子系統(tǒng),主要用來報(bào)告儀器狀態(tài)和進(jìn)行系統(tǒng)設(shè)置。
  (3) 儀器特定測量功能指令。
  其中,(1)和(2)是儀器必備指令,(3)的選取與儀器的實(shí)際功能有關(guān)。用戶只需要將PC機(jī)與帶有GPIB接口的儀器連接,通過調(diào)用儀器控制軟件如NI-488.2和VISA等提供的I/O" title="I/O">I/O庫向儀器寫入指令,就能實(shí)現(xiàn)對儀器的控制。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)組成
  根據(jù)圖1所示的模型,在通用計(jì)算機(jī)平臺(tái)上設(shè)計(jì)的IEEE-488兼容儀器軟硬件組成如圖2所示。


  儀器運(yùn)行在Windows操作系統(tǒng)下,其各部分的功能如下:
 ?。?)PCI-GPIB是NI公司提供的GPIB接口卡。通過安裝設(shè)備端軟件NI-Device" title="NI-Device">NI-Device,使GPIB接口卡完成Talker/Listener功能。
 ?。?)模塊函數(shù)和必備函數(shù)與IEEE-488儀器模型中的儀器函數(shù)相對應(yīng):模塊函數(shù)是模塊制造商提供的API,大部分用來處理儀器特定測量功能指令;必備函數(shù)通過訪問狀態(tài)報(bào)告模型和調(diào)用某些模塊函數(shù)處理IEEE-488.2與SCPI標(biāo)準(zhǔn)規(guī)定的必備指令。
  (3)狀態(tài)報(bào)告模型由若干狀態(tài)寄存器組" title="寄存器組">寄存器組構(gòu)成,用來描述儀器的狀態(tài)。大部分儀器函數(shù)都會(huì)訪問此模型。
  (4)儀器端程序采用C++編寫,主要負(fù)責(zé)接收主控計(jì)算機(jī)發(fā)送的指令,然后找到對應(yīng)的儀器函數(shù)進(jìn)行處理。如果接收的是查詢指令,還負(fù)責(zé)將儀器函數(shù)的響應(yīng)結(jié)果返回給主控計(jì)算機(jī)。
  系統(tǒng)的核心是儀器端程序和狀態(tài)報(bào)告模型的設(shè)計(jì),以下將對這兩部分進(jìn)行詳細(xì)說明。
2.2 儀器端程序設(shè)計(jì)
  儀器端的程序完成圖1中除儀器函數(shù)以外的所有功能。其中,總線的消息處理即圖1中GPIB總線、I/O組件、輸出隊(duì)列、消息交換組件、輸入隊(duì)列部分的功能通過調(diào)用NI-Device提供的API完成,其余部分由設(shè)計(jì)者自行完成。
2.2.1 總線消息處理
  總線上的消息處理主要通過調(diào)用NI-Device提供的API完成。NI-Device是NI公司推出的一款面向儀器制造商的設(shè)備端軟件,可以為儀器開發(fā)人員處理絕大部分的IEEE-488協(xié)議要求,并且支持面向?qū)ο蟮腃++語言接口[3]。 IEEE-488兼容儀器主要使用以下幾個(gè)類:
  (1)C4882Device:是一個(gè)抽象類,是所有設(shè)備類的基類,它定義了設(shè)備類與總線接口方式。當(dāng)總線上發(fā)生某個(gè)事件時(shí),就調(diào)用相應(yīng)的事件處理函數(shù)。此外,C4882Device類還負(fù)責(zé)輸入輸出隊(duì)列管理和狀態(tài)字節(jié)報(bào)告等。
 ?。?)CGpibDevice:使用GPIB總線的設(shè)備類都必須是CGpibDevice類的派生類,它負(fù)責(zé)處理GPIB總線協(xié)議。
  (3)C4882MsgBuffer:輸入和輸出隊(duì)列使用這個(gè)類來存儲(chǔ)指令。
  NI-Device采用事件驅(qū)動(dòng)的方式處理總線上的消息。儀器端程序只需要從CGpibDevice類派生出自定義的儀器類,然后重載基類C4882Device的InputQueueEvent Handler、OutputQueueEventHandler、 DeviceClearEventHandler事件響應(yīng)函數(shù),最后編寫事件響應(yīng)代碼就能完成與總線間的消息交換。
  基于NI-Device的儀器端程序流程如圖3所示。其中,從輸出隊(duì)列取出的指令存放在InputQueueEvent Handler函數(shù)的pMsgBuf參數(shù)中。通過調(diào)用AcknowledgeEndOfMessage()即可通知消息交換組件指令已解釋完畢;此外,通過調(diào)用QueryDetected()可通知消息交換組件檢測到一個(gè)查詢操作。而將結(jié)果放入輸出隊(duì)列則通過調(diào)用QueueResponseMsg()完成。
  需要說明的是,在主控計(jì)算機(jī)讀取響應(yīng)結(jié)果時(shí),NI-Device會(huì)自動(dòng)將輸出隊(duì)列的隊(duì)首內(nèi)容取出并返回給主控計(jì)算機(jī),并且以一個(gè)MSG_SENT事件通知儀器響應(yīng)結(jié)果已被取走,該事件將在OutputQueueEventHandler響應(yīng)函數(shù)中進(jìn)行處理。DeviceClearEventHandler函數(shù)在主控計(jì)算機(jī)發(fā)送Device Clear消息的時(shí)候被調(diào)用,在該事件處理函數(shù)中,儀器端程序完成一些必要的清除工作。
  在圖3中,SCPI解釋器是最關(guān)鍵的部分,它的效率高低直接影響到儀器的性能。以下將說明SCPI解釋器的設(shè)計(jì)。


2.2.2 SCPI解釋器
  SCPI 是IEEE-488.2上的可程控儀器標(biāo)準(zhǔn)指令集。其命令格式為樹狀層次結(jié)構(gòu),可分為多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)由一個(gè)根命令和一個(gè)或數(shù)個(gè)層次命令構(gòu)成[4]。例如,MEASure子系統(tǒng)中測量電壓周期的命令為:“MEASure:VOLTage:PERiod?”。
  解釋器的功能是對輸入指令進(jìn)行語法檢查并找到對應(yīng)的儀器函數(shù),其工作流程如下:
  (1)首先對輸入指令進(jìn)行掃描,根據(jù)分割符(:,空格等)位置將輸入的命令拆分為子系統(tǒng)根命令、層次命令、參數(shù)以及單位部分。
 ?。?)根據(jù)(1)識(shí)別的子系統(tǒng)根命令動(dòng)態(tài)加載相應(yīng)的命令樹。圖4是一個(gè)子系統(tǒng)命令樹的例子,每個(gè)葉節(jié)點(diǎn)除節(jié)點(diǎn)內(nèi)容以外還存放對應(yīng)儀器函數(shù)的編號。
 ?。?)根據(jù)(1)識(shí)別的層次命令自頂向下遍歷命令樹,如果遍歷成功則返回葉節(jié)點(diǎn)儀器函數(shù)的編號。如果失敗則說明發(fā)生語法錯(cuò)誤,返回錯(cuò)誤編碼。最后從內(nèi)存中釋放樹結(jié)構(gòu)。


  執(zhí)行組件維護(hù)著一個(gè)編號與儀器函數(shù)的對應(yīng)表。根據(jù)解釋器的返回值,執(zhí)行組件首先判斷是否有語法錯(cuò)誤。如果沒有則通過查表找到該函數(shù),然后驗(yàn)證參數(shù)并執(zhí)行,如果是查詢命令,還要將執(zhí)行結(jié)果放入輸出隊(duì)列。如果發(fā)生語法錯(cuò)誤則通過修改狀態(tài)報(bào)告模型中的相應(yīng)位表明產(chǎn)生了語法錯(cuò)誤。
2.3 狀態(tài)報(bào)告模型
  一個(gè)符合IEEE-488標(biāo)準(zhǔn)的儀器必須具備如圖5所示的狀態(tài)報(bào)告模型。絕大部分儀器函數(shù)都會(huì)影響到這個(gè)模型。其中,每一個(gè)寄存器組都是由條件寄存器、邊沿過濾器、事件寄存器和事件使能寄存器組成,具體的定義在參考文獻(xiàn)[1][2]中有明確的規(guī)定,在此不再贅述。


  一般在兩種情況下需要向主控計(jì)算機(jī)報(bào)告儀器的狀態(tài):
 ?。?)執(zhí)行STATus和SYSTem子系統(tǒng)對應(yīng)的儀器函數(shù)時(shí)。例如,儀器端接收到指令'STATus:OPERation?”后,對應(yīng)的儀器函數(shù)返回操作狀態(tài)寄存器組中的事件寄存器的內(nèi)容,然后由響應(yīng)格式化組件將返回內(nèi)容放入輸出隊(duì)列,等待主控計(jì)算機(jī)的讀取。
  (2)執(zhí)行某些IEEE-488.2公用命令對應(yīng)的儀器函數(shù)時(shí)。
  例如,接收到公用命令“*STB?”后,對應(yīng)的儀器函數(shù)返回狀態(tài)字節(jié)的內(nèi)容,隨后處理流程同(1)。
  另外,在執(zhí)行一些測量功能和公用命令時(shí)需要更新儀器狀態(tài)。例如用戶設(shè)置了一個(gè)可能引起不穩(wěn)定因素的電壓,對應(yīng)的儀器函數(shù)將可疑狀態(tài)寄存器組中事件寄存器的VOLTage位置為1。狀態(tài)報(bào)告模型的設(shè)計(jì)需要根據(jù)儀器的特定功能對某些寄存器進(jìn)行擴(kuò)展或者只實(shí)現(xiàn)其中的某些位。
3 實(shí)驗(yàn)結(jié)果
  目前該方案已經(jīng)在某基于計(jì)算機(jī)的手機(jī)終端測試儀上得到初步應(yīng)用并取得較好的效果。在主控計(jì)算機(jī)上用NI-MAX軟件向該儀器發(fā)送指令詢問激活小區(qū)是否激活,儀器的返回結(jié)果如圖6所示。實(shí)驗(yàn)結(jié)果表明儀器端的程序能夠正常工作,且沒有出現(xiàn)明顯的延時(shí)。


  以上提出了一個(gè)通用計(jì)算機(jī)平臺(tái)上IEEE-488儀器的設(shè)計(jì)方案并在實(shí)際應(yīng)用中取得了較好的效果。由于該方案采用高級語言編程實(shí)現(xiàn),且用戶不需要對原有系統(tǒng)做大的修改就能使基于計(jì)算機(jī)的儀器支持IEEE-488標(biāo)準(zhǔn),因此具有成本低和可移植性強(qiáng)的特點(diǎn)。
參考文獻(xiàn)
1 IEEE std 488.2-1992,IEEE standard codes, formats, protocols, and common commands for use with IEEE std 488.1-1987. IEEE standards digital interface for programmable instrumentation. (ANSI)
2 Standard commands for programmable instruments (SCPI), Version 1999.0.SCPI Consortium, May 1999
3 NI-deviceTM help. National Instruments, April 2004
4 王,侯國屏,趙 偉.可編程儀器控制規(guī)范和關(guān)鍵技術(shù)(一)[J]. 電測與儀表,2004;(2):22~24

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。