摘 要: 提出了一個通用計算機平臺上IEEE-488兼容儀器的設(shè)計方案,,給出了系統(tǒng)的軟硬件組成,,并且對儀器端程序以及狀態(tài)報告模型的設(shè)計進行了說明,。該方案主要通過C++" title="C++">C++語言編程實現(xiàn),具有成本低和可移植性強的特點,目前已經(jīng)在某基于計算機的測試儀器上得到初步應(yīng)用并取得了較好的效果,。
關(guān)鍵詞: IEEE-488(GPIB)接口 SCPI 自動測試系統(tǒng)
通用計算機系統(tǒng)具有強大的處理能力以及豐富的軟件資源,,正在被越來越多的現(xiàn)代儀器所采用。在儀器的設(shè)計過程中,,往往需要提供GPIB接口以及相應(yīng)的指令集" title="指令集">指令集以方便用戶組成自動測試系統(tǒng),。針對這一需求,本文提出了一個通用計算機平臺上IEEE-488兼容儀器的設(shè)計方案:通過使用GPIB接口卡和編寫相應(yīng)的儀器端程序,,使得基于計算機的儀器能夠模擬一個或者多個GPIB儀器,。
1 IEEE-488儀器簡介
IEEE-488儀器模型如圖1所示。儀器提供GPIB接口以及相應(yīng)的指令集,,指令集由以下幾部分組成[1~2]:
(1) IEEE-488.2公用命令集,,如:*IDN?,*STB?,*CLS等,。
(2) SCPI標準規(guī)定的STATus和SYSTem子系統(tǒng),,主要用來報告儀器狀態(tài)和進行系統(tǒng)設(shè)置。
(3) 儀器特定測量功能指令,。
其中,(1)和(2)是儀器必備指令,,(3)的選取與儀器的實際功能有關(guān)。用戶只需要將PC機與帶有GPIB接口的儀器連接,,通過調(diào)用儀器控制軟件如NI-488.2和VISA等提供的I/O" title="I/O">I/O庫向儀器寫入指令,,就能實現(xiàn)對儀器的控制,。
2 系統(tǒng)設(shè)計
2.1 系統(tǒng)組成
根據(jù)圖1所示的模型,,在通用計算機平臺上設(shè)計的IEEE-488兼容儀器軟硬件組成如圖2所示。
儀器運行在Windows操作系統(tǒng)下,,其各部分的功能如下:
?。?)PCI-GPIB是NI公司提供的GPIB接口卡。通過安裝設(shè)備端軟件NI-Device" title="NI-Device">NI-Device,,使GPIB接口卡完成Talker/Listener功能,。
(2)模塊函數(shù)和必備函數(shù)與IEEE-488儀器模型中的儀器函數(shù)相對應(yīng):模塊函數(shù)是模塊制造商提供的API,,大部分用來處理儀器特定測量功能指令,;必備函數(shù)通過訪問狀態(tài)報告模型和調(diào)用某些模塊函數(shù)處理IEEE-488.2與SCPI標準規(guī)定的必備指令。
?。?)狀態(tài)報告模型由若干狀態(tài)寄存器組" title="寄存器組">寄存器組構(gòu)成,,用來描述儀器的狀態(tài),。大部分儀器函數(shù)都會訪問此模型。
?。?)儀器端程序采用C++編寫,,主要負責接收主控計算機發(fā)送的指令,然后找到對應(yīng)的儀器函數(shù)進行處理,。如果接收的是查詢指令,,還負責將儀器函數(shù)的響應(yīng)結(jié)果返回給主控計算機。
系統(tǒng)的核心是儀器端程序和狀態(tài)報告模型的設(shè)計,,以下將對這兩部分進行詳細說明,。
2.2 儀器端程序設(shè)計
儀器端的程序完成圖1中除儀器函數(shù)以外的所有功能。其中,,總線的消息處理即圖1中GPIB總線,、I/O組件、輸出隊列,、消息交換組件,、輸入隊列部分的功能通過調(diào)用NI-Device提供的API完成,其余部分由設(shè)計者自行完成,。
2.2.1 總線消息處理
總線上的消息處理主要通過調(diào)用NI-Device提供的API完成,。NI-Device是NI公司推出的一款面向儀器制造商的設(shè)備端軟件,可以為儀器開發(fā)人員處理絕大部分的IEEE-488協(xié)議要求,,并且支持面向?qū)ο蟮腃++語言接口[3],。 IEEE-488兼容儀器主要使用以下幾個類:
(1)C4882Device:是一個抽象類,,是所有設(shè)備類的基類,,它定義了設(shè)備類與總線接口方式。當總線上發(fā)生某個事件時,,就調(diào)用相應(yīng)的事件處理函數(shù),。此外,C4882Device類還負責輸入輸出隊列管理和狀態(tài)字節(jié)報告等。
?。?)CGpibDevice:使用GPIB總線的設(shè)備類都必須是CGpibDevice類的派生類,,它負責處理GPIB總線協(xié)議。
?。?)C4882MsgBuffer:輸入和輸出隊列使用這個類來存儲指令,。
NI-Device采用事件驅(qū)動的方式處理總線上的消息。儀器端程序只需要從CGpibDevice類派生出自定義的儀器類,,然后重載基類C4882Device的InputQueueEvent Handler,、OutputQueueEventHandler、 DeviceClearEventHandler事件響應(yīng)函數(shù),,最后編寫事件響應(yīng)代碼就能完成與總線間的消息交換,。
基于NI-Device的儀器端程序流程如圖3所示,。其中,從輸出隊列取出的指令存放在InputQueueEvent Handler函數(shù)的pMsgBuf參數(shù)中,。通過調(diào)用AcknowledgeEndOfMessage()即可通知消息交換組件指令已解釋完畢,;此外,通過調(diào)用QueryDetected()可通知消息交換組件檢測到一個查詢操作,。而將結(jié)果放入輸出隊列則通過調(diào)用QueueResponseMsg()完成,。
需要說明的是,在主控計算機讀取響應(yīng)結(jié)果時,,NI-Device會自動將輸出隊列的隊首內(nèi)容取出并返回給主控計算機,,并且以一個MSG_SENT事件通知儀器響應(yīng)結(jié)果已被取走,該事件將在OutputQueueEventHandler響應(yīng)函數(shù)中進行處理,。DeviceClearEventHandler函數(shù)在主控計算機發(fā)送Device Clear消息的時候被調(diào)用,,在該事件處理函數(shù)中,儀器端程序完成一些必要的清除工作,。
在圖3中,,SCPI解釋器是最關(guān)鍵的部分,它的效率高低直接影響到儀器的性能,。以下將說明SCPI解釋器的設(shè)計,。
2.2.2 SCPI解釋器
SCPI 是IEEE-488.2上的可程控儀器標準指令集。其命令格式為樹狀層次結(jié)構(gòu),,可分為多個子系統(tǒng),,每個子系統(tǒng)由一個根命令和一個或數(shù)個層次命令構(gòu)成[4]。例如,,MEASure子系統(tǒng)中測量電壓周期的命令為:“MEASure:VOLTage:PERiod,?”。
解釋器的功能是對輸入指令進行語法檢查并找到對應(yīng)的儀器函數(shù),,其工作流程如下:
?。?)首先對輸入指令進行掃描,根據(jù)分割符(:,,空格等)位置將輸入的命令拆分為子系統(tǒng)根命令,、層次命令,、參數(shù)以及單位部分,。
(2)根據(jù)(1)識別的子系統(tǒng)根命令動態(tài)加載相應(yīng)的命令樹,。圖4是一個子系統(tǒng)命令樹的例子,,每個葉節(jié)點除節(jié)點內(nèi)容以外還存放對應(yīng)儀器函數(shù)的編號。
?。?)根據(jù)(1)識別的層次命令自頂向下遍歷命令樹,,如果遍歷成功則返回葉節(jié)點儀器函數(shù)的編號,。如果失敗則說明發(fā)生語法錯誤,返回錯誤編碼,。最后從內(nèi)存中釋放樹結(jié)構(gòu),。
執(zhí)行組件維護著一個編號與儀器函數(shù)的對應(yīng)表。根據(jù)解釋器的返回值,,執(zhí)行組件首先判斷是否有語法錯誤,。如果沒有則通過查表找到該函數(shù),然后驗證參數(shù)并執(zhí)行,,如果是查詢命令,,還要將執(zhí)行結(jié)果放入輸出隊列。如果發(fā)生語法錯誤則通過修改狀態(tài)報告模型中的相應(yīng)位表明產(chǎn)生了語法錯誤,。
2.3 狀態(tài)報告模型
一個符合IEEE-488標準的儀器必須具備如圖5所示的狀態(tài)報告模型,。絕大部分儀器函數(shù)都會影響到這個模型。其中,,每一個寄存器組都是由條件寄存器,、邊沿過濾器、事件寄存器和事件使能寄存器組成,,具體的定義在參考文獻[1]和[2]中有明確的規(guī)定,在此不再贅述,。
一般在兩種情況下需要向主控計算機報告儀器的狀態(tài):
(1)執(zhí)行STATus和SYSTem子系統(tǒng)對應(yīng)的儀器函數(shù)時,。例如,,儀器端接收到指令'STATus:OPERation?”后,對應(yīng)的儀器函數(shù)返回操作狀態(tài)寄存器組中的事件寄存器的內(nèi)容,,然后由響應(yīng)格式化組件將返回內(nèi)容放入輸出隊列,,等待主控計算機的讀取。
?。?)執(zhí)行某些IEEE-488.2公用命令對應(yīng)的儀器函數(shù)時,。
例如,接收到公用命令“*STB?”后,,對應(yīng)的儀器函數(shù)返回狀態(tài)字節(jié)的內(nèi)容,,隨后處理流程同(1)。
另外,,在執(zhí)行一些測量功能和公用命令時需要更新儀器狀態(tài),。例如用戶設(shè)置了一個可能引起不穩(wěn)定因素的電壓,對應(yīng)的儀器函數(shù)將可疑狀態(tài)寄存器組中事件寄存器的VOLTage位置為1,。狀態(tài)報告模型的設(shè)計需要根據(jù)儀器的特定功能對某些寄存器進行擴展或者只實現(xiàn)其中的某些位,。
3 實驗結(jié)果
目前該方案已經(jīng)在某基于計算機的手機終端測試儀上得到初步應(yīng)用并取得較好的效果。在主控計算機上用NI-MAX軟件向該儀器發(fā)送指令詢問激活小區(qū)是否激活,,儀器的返回結(jié)果如圖6所示,。實驗結(jié)果表明儀器端的程序能夠正常工作,,且沒有出現(xiàn)明顯的延時。
以上提出了一個通用計算機平臺上IEEE-488儀器的設(shè)計方案并在實際應(yīng)用中取得了較好的效果,。由于該方案采用高級語言編程實現(xiàn),且用戶不需要對原有系統(tǒng)做大的修改就能使基于計算機的儀器支持IEEE-488標準,,因此具有成本低和可移植性強的特點。
參考文獻
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