使用 Measurement Studio VISA 進行序列、GPIB 與 VXI 儀器控制

概觀

您可以透過單一介面 - VISA,Virtual Instrument Software Architecture 應用程式設計介面 (API),設定並控制序列、GPIB 與 VXI 儀器。這是一款高階驅動程式,可呼叫每個儀器的低階驅動程式。本應用說明介紹 VISA,並說明如何運用 Visual Basic 中的 Measurement Studio VISA (CWVISA) ActiveX 控制元件,透過單一程式設計介面,透過 序列、GPIB 與 VXI 儀器來執行儀器控制

  • 附註



內容

什麼是 VISA?

NI 開發的 VISA 驅動程式軟體架構,可將序列、GPIB 與 VXI 儀器的通訊整合,並簡化儀器控制程式。VISA API 可透過作業系統呼叫與 NI-488.2 與 NI-VXI 驅動程式軟體,存取序列、GPIB 與 VXI 儀器,如圖 1 所示。


圖 1.VISA 架構


VISA 能發揮下列優勢:

  • 介面獨立,因此 VISA 使用相同的方法與儀器通訊,無論介面類型為何。舉例來說,不論是序列、GPIB 或 USB,將 ASCII 字串寫入訊息架構 (Message-based) 儀器所用的 VISA 指令均相同。透過此功能,即可使用單一 API 搭配不同的儀器。
  • 物件導向架構可輕鬆因應未來開發的新儀器介面。您可以輕鬆納入新的介面。

使用極為精巧的指令集,內建儀器程式設計功能。

什麼是 CWVISA?


CWVISA 是一種 ActiveX 控制元件,可將 VISA API 抽象化,因此您可透過互動式屬性頁面與簡化的 API,介接序列、GPIB 與 VXI 儀器。例如,您可以使用 CWVISA 屬性頁面,在設計階段以互動方式尋找與儀器進行通訊、找出介面問題,或驗證與儀器的通訊。您可以在任何 ActiveX 控制容器中使用 VISA ActiveX 控制元件,包括 Microsoft Visual Basic、Visual C++ 與 Borland Delphi。

秘訣:請參閱 Measurement Studio 參考,以進一步了解 Measurement Studio 或 CWVISA 控制元件。您可以在 Windows 開始功能表中啟動參考。

如何使用 CWVISA?

 

首先要將 CWVISA 控制項放置在使用者介面表格上。請注意,Visual Basic 將此控制項命名為 CWVisa1。以滑鼠右鍵按一下控制項,並選擇 Properties (屬性)。本應用說明的其他部分說明如何使用屬性頁面選擇資源與通訊屬性、測試通訊,以及從儀器剖析資料,以及如何透過簡化的 API 以程式設計方式控制通訊。


判斷儀器資源名稱

資源是指想要與之通訊的序列、GPIB 或 VXI 儀器或控制器。資源名稱指定 VISA 資源的確切名稱與位置。舉例來說,資源名稱 ASRL1::INSTR 說明電腦 COM 埠 1 的儀器,而圖 2 所示的 GPIB0::13::INSTR 則說明位於 13 的 GPIB 儀器。


圖 2.從一般屬性頁面中選擇儀器


儀器互動所面臨的第一項挑戰,通常就是決定其地址與資源名稱。CWVISA 會搜尋電腦中的所有可用 COM 埠,以及啟用的 GPIB 與 VXI 儀器,並將所有可用的資源納入 資源名稱清單中。如果您知道要與之通訊的儀器資源名稱,或是想要在執行期間變更資源,請以程式設計方式指定資源名稱,如下列程式碼列所示:

CWVisa1.RsrcName = "GPIB::13::INSTR"

設定讀寫設定

在 RdWrt 屬性頁面中設定下列一般介面與通訊設定。圖 3 顯示了可能設定通訊設定的方法之一。


圖 3.使用 RdWrt Property 頁面設定一般通訊設定
注意:屬性頁面與屬性選項為內容敏感,也就是說,可用的選項取決於您嘗試通訊的儀器類型。

序列 I/O 協定 -- -- 選擇 一般ASRL488。如果序列儀器接受 488.2 型指令,請使用 ASRL488 設定。透過 ASRL488 設定,即可與儀器通訊,就像任何其他訊息架構裝置一樣,如下方範例所示:

以 DIM 狀態為變數

'設定 I/O 協定 ASRL488 資料傳輸
CWVisa1.RdWrt.IOProtocol = cwvisaProtocolASRL488

「清除裝置」
CWVisa1.清除

「對儀器寫入「*IDN?」
CWVisa1.寫入「*IDN?」

‘取得序列輪詢值 (狀態位元)
status = CWVisa1.ReadSTB

「使用者介面上以文字框讀取並顯示響應」
Text1.Text = CWVisa1.Read

GPIB I/O 協定 -- 針對一般 IEEE488 通訊選擇 Normal (正常) 或 HS488,以進行高速 488 資料傳輸。

VXI I/O 協定 -- 針對大多數 VXI 儀器,請選擇「一般」。有些儀器支援 FDC (快速資料通道) I/O。

注意:請參閱儀器或控制器的說明文件,以判斷可接受的 I/O 協定。

交換位元會反轉裝置的位元組。如果您的裝置是 Big Endian,請啟用這個選項。請參閱裝置說明文件,以判斷儀器是否以 Big Endian 格式傳回資料。

'大位元格式 (最有效位元先)
CWGPIB1.SwapBytes = 對

終止係數指定想要用來終止讀取作業的字元。請參閱您的儀器說明文件,以判斷您是否需要使用終止字元,以及該終止字元的內容。

'使用車輛退貨字元做為終止字元
CWVisa1.RdWrt.TerminationCharacter = 13

「啟用終止字元」
CWVisa1.RdWrt.TerminationCharacterEnable = True

設定介面設定

若要與序列或 VXI 儀器通訊,您需要設定額外的介面屬性。

序列通訊 -- 使用序列屬性頁面設定鮑率、資料位元、停止位元與流量控制方法,如圖 4 所示,或是透過程式設計方式設定序列屬性,如下方範例所示:

CWVisa1.Asrl.BaudRate = 9600
CWVisa1.Asrl.DataBits = cwasrlDataBits8
CWVisa1.Asrl.StopBits = cwasrlStopBits1
CWVisa1.Asrl.FlowControl = cwasrlFlowNone


圖 4.使用序列屬性頁面設定序列介面設定


VXI Communication -- 使用 VXI 記憶體屬性頁面來設定與 VXI 暫存器存取相關的屬性。暫存器架構的儀器具有稱為「暫存器」的處理器裝置,可於處理期間暫時儲存資料。源極和「目的地」屬性適用於高階暫存器存取作業,而「視窗」屬性則適用於低階暫存器存取。使用 Access Priv 屬性來指定 VME 存取權限,並使用 Address Incr 在每次使用 MoveIn 或 MoveOut 方法傳輸後,將目標位址加 1。

圖 5 顯示 VXI 儀器的資料傳輸方式。


圖 5.使用 VXI 記憶體屬性頁面來設定 VXI Register-Access 屬性


您可以透過程式設計方式來設定這些相同的通訊屬性。下列範例會設定 CWVisa1 控制項,以存取 FIFO (非加壓位址):

"資料獲得原始存取權限隱私權

CWVisa1.VxiMemory.SrcAccessPriv = cwVxiMemoryDataPriv
「轉換訂單至 Big Endian」
CWVisa1.VxiMemory.SrcByteOrder = cwVxiMemoryBigEndian
‘Address Incr. 至 0
CWVisa1.VxiMemory.Src增量 = 0

測試儀器通訊

Measurement Studio 讓您可輕鬆測試通訊,以便確認儀器是否正常運作。

1.開啟測試屬性頁面。您可以在這個屬性頁面中寫入與讀取訊息架構的指令。所有序列儀器、GPIB 儀器與許多 VXI 儀器均可辨識各種訊息架構的指令字串。

2.在 傳送字串欄位中輸入指令,例如 *idn? 識別查詢。請參閱您的儀器說明文件,以判斷可辨識的訊息架構字串。

注意:並非所有 VXI 儀器與控制器均使用訊息架構通訊。若您的 VXI 裝置不接受訊息架構指令,請改為使用暫存器存取。如需訊息與暫存器架構通訊的相關資訊,請參閱「傳輸資料」一節。

3.按下「執行」。請注意在 字串接收指示元件中出現的響應。圖 6 顯示 NI GPIB 與序列裝置模擬器收到的響應。您也可以按下「寫入」以寫入資料至儀器,並「讀取」以讀取儀器的回應。


圖 6.使用測試屬性頁面讀取至儀器並從儀器寫入


開啟 VISA 工作階段

開啟工作階段,並從程式與儀器進行通訊。工作階段是 CWVISA 控制項與該資源之間的連線或連結,您可以使用 Open 方法來開啟工作階段。Open 方法可初始化資源,並使用您在屬性頁面中指定的設定,或透過程式設計方式來設定 VISA 通訊工作階段。例如,當使用者按一下人機介面上的「開啟工作階段」按鈕時,您可能會想要開啟 VISA 工作階段,如下列事件程序所示:

開放研討會
私人子 OpenSession_Click()

CWVisa1.開啟

結束子

傳輸資料

CWVISA 可與序列、GPIB,以及訊息架構與暫存器架構的 VXI 儀器及控制器進行通訊。訊息架構的儀器執行已定義的 VXIbus 暫存器與通訊協定,並且認識 Word 序列協定。所有序列儀器、GPIB 儀器與許多 VXI 儀器均可辨識各種訊息架構的指令字串。您將使用一組標準的方法呼叫來寫入所有訊息架構儀器並讀取這些儀器。CWVISA 控制提供一組可搭配 VXI 儀器使用的暫存器存取方法。若要存取高階暫存器,請使用 In 與 Out 方法。針對低階暫存器存取,請使用 Peek 與 Poke 方法。

訊息架構的同步 I/O -- 使用「寫入與讀取」方法,執行訊息架構的同步 I/O。舉例來說,下列程式碼會傳送識別詢問至儀器,接著在使用者介面上的文字框中顯示儀器回應:

CWVisa1.開啟
CWVisa1.寫入「*IDN?」& vbLf
Text1.Text = CWVisa1.Read

訊息架構的非同步 I/O -- 您可以使用 WriteAsync 和 ReadAsync 執行非同步 I/O,讓寫入與讀取作業立即開始與返回。當 ReadAsync 方法完成時,CWVISA 控制項會產生事件,並將資料傳遞至 DataReady 事件程序。當 WriteAsync 方法完成時,CWVISA 控制元件會產生一個 WriteComplete 事件。您可以使用這些非同步方法與事件,在長時間的讀取或寫入作業期間,繼續執行其他作業。舉例來說,當您呼叫 ReadAsync 時,程式會結束讀取資料,而 CWVISA 控制元件會產生 DataReady 事件,並呼叫下列事件程序:

私人子 CWVisa1_DataReady (ByVal taskNumber As Integer, data As Variant)

“在文字框中讀取資料後立即顯示資料
Text1.Text = data

結束子

使用 In 與 Out 方法存取高階暫存器 -- 若要讀取高階 VXI 暫存器的資料,請使用 In8、In16 與 In32 方法讀取 8、16 與 32 位元的值,如下方範例所示:

'讀取 VXI 匯流排 A32 空間中的偏移 0 的 32 位元值
X = CWVisa1.In32 cwVxiA32Space,0

注意:In 方法有兩個參數:空間與 偏移。相對於基本位址,偏移參數會指定指定位址空間中的位址。

使用相對應的 Out 方法,以將資料寫入指定的偏移,如下方範例所示:

'在 VXI 匯流排的區域空間中,從偏移 0 寫入 32 位元的 Y 值
CWVisa1.Out32 cwVxiLocalSpace、0、Y

提示 如果想要移動大型資料區塊,請使用 MoveIn 和 MoveOut 方法,並選擇 Address Increment 屬性,以免將資料移至單一位置 (FIFO)。

使用 Peek 與 Poke 方法存取低階暫存器 -- 在使用 Peek 與 Poke 方法之前,請使用 MapAddress 方法將部分 VXI 記憶體空間對應至本機記憶體。MapAddress 會將位址空間、基本 VXI 位址、位元格式記憶體大小,以及可對應記憶體的建議區域位址做為參數。此方法會回傳指定的基本 VXI 位址已對應的實際本地位址。接著,使用 Peek 與 Poke 方法讀取與寫入對應空間的資料。

下列程式碼會對應區域記憶體中的區域空間,並針對該區域進行讀取與修改,並解析該區域:

'對應 A16 空間中的 16 位元記憶體
X = CWVisa1.MapAddress(cwVxiA16Space, &hC000, 64, False, 0)

「讀取位址間的 16 位元值」
Y = CWVisa1.Peek16(X)

‘在位址空間的第 2 位元組位元中,將 16 位元值 35 寫入暫存器
CWVisa1.Poke16 X + 2、35

「釋放本機記憶體中的空間」
CWVisa1.UnmapAddress

注意:使用 MapAddress 方法將 VXI 位址空間的某個區域對應至本機記憶體。檢查對應的視窗大小與視窗基本屬性,以確保您不會存取此視窗以外的區域。

使用事件同步通訊

事件可提供 VISA 資源與您的計畫之間的通訊功能。若要讓 程式回應下列任何情況,請針對適當活動定義事件程序:

  • 服務需求:當裝置要求其控制器提供服務時,會通知您的計畫。此事件會傳回序列輪詢產生要求的裝置所取得的狀態位元。這個事件主要是由插入 GPIB SRQ 線路與訊息架構 VXI 儀器的 GPIB 儀器所造成。
  • 觸發器 -- 當裝置在 VXI 背板上插入觸發線時,通知您的程式。傳回的 VISA 事件包含一個 TriggerId 屬性,該屬性會指定與該事件相關的觸發行。
  • VxiSignalProc -- 當裝置在 VXI 背板上造成中斷或產生 VXI 訊號時,通知您的程式。發生 VXI 中斷或訊號時,會由 VXISignalProc 事件傳回 StatusId 值。StatusId 的下 8 位元設定為產生訊號或中斷的儀器邏輯位址。
  • VxiVmeInterrupt -- 當儀器在 VXI 背板上插入中斷時,通知您的程式。這個事件與 VxiSignalProc 事件相似,只是針對 VXI 或 VME 中斷而產生,而非訊號。


CWVISA 控制項會排列事件,以便您日後存取並處理事件。CWVISA 會針對所有事件類型自動呼叫 EnableEvent 方法,除了呼叫 Open 方法時的 觸發器之外。您可以使用「EnableEvent」(啟用活動) 方法,只新增您希望將的事件放入事件队列中。舉例來說,下列 Visual Basic 程式碼可針對 VxiVmeInterrupt 事件啟用事件排列,這樣一來,當該事件發生時,就會將其放置在排列中,而不會呼叫事件程序:

CWVisa1.EnableEvent cwvisaEventVXIVME中斷

下列 Visual Basic 程式碼會檢查事件队列,以判斷 VXIVMEInterrupt 事件是否位於队列中,如果是的話,則會取得中斷的 StatusId 值:

以 Dim ReturnEvent 為 CWVisaEvent
以Dim stat 為布林值

stat = CWVisa1.WaitOnEvent(cwvisaEventVXIVMEInterrupt, 0、ReturnEvent)
如果是這樣

“在使用者介面上的文字框中顯示 StatusID
Text1.Text = ReturnEvent.StatusId

結束若

如果您擔心在程式內特定點發生的事件,可以清空队列或停用事件队列。若要清空相同類型的所有事件的接聽,請使用「離散事件」方法:

CWVisa1.DiscardEvents cwvisaEventVXIVME中斷

若要停用將事件放入队列中的方式,請使用「DisableEvent」 方法:

CWVisa1.DisableEvent cwvisaEventVXIVME中斷

剖析資料

儀器通常會傳回含有標頭與資料資訊組合的加密二進位字串或字串。要將這些字串解析為可用的資料格式,通常會是非常挫敗的做法。CWVISA 控制可提供內建的資料剖析功能,輕鬆處理儀器資料。

使用 Parsing Property 頁面來建立剖析作業。解析工作說明您想要分析資料的方式。接著,您可從程式碼執行這項作業,以自動剖析從儀器傳回的資料。您可以根據自己的需求指定許多剖析作業,因此您可以以不同的方式剖析每種與儀器的互動。

CWVISA 控制項提供名為「Number Parser」的內建作業。數字分析器會將分隔的字串轉換為數字陣列,排除標頭與其他非數值資訊。舉例來說,假設儀器回應 DATA? 指令時,會傳回以逗號分隔的數字清單,前者是標題資訊。字串的外觀可能會類似於 WFM3.246,3.295,4.653,3.334。如果沒有「Number Parser」(數字解析器) 工作項目,您就必須解析字串,以檢索每個以 ASCII 表示的數字,並將其轉換為實際的數字類型。使用「Number Parser」(數字解析器) 工作項目,您可以使用相同方式呼叫來解析與讀取資料。下列 Visual Basic 程式碼示範如何開啟 VISA 工作階段、使用 Data? 指令查詢訊息架構的儀器,以及讀取已剖析的資料:

「變數將包含一組雙精度資料 - 剖析資料」
以資料為變數取樣
"開啟 VISA 工作階段
CWVisa1.開啟
「將資料寫入儀器?」
CWVisa1.寫入「Data?」
閱讀答覆
data = CWVisa1.Tasks.Item(「Number Parser」)。讀取

秘訣:如需使用 CWVISA 控制元件的進階剖析技術,請參閱應用說明 148,在 Visual Basic 中剖析儀器資料。

關閉 VISA 工作階段

使用「關閉」方法去分配資源,並結束 VISA 工作階段。在下列事件程序中,當使用者按下「關閉工作階段」 指令按鈕時,VISA 工作階段就會結束:

關閉工作階段

私人子 CloseSession_Click()

CWVisa1.關閉

結束子

結論


NI VISA 是適用於多種儀器控制的解決方案。Measurement Studio 提供屬性頁面,讓您能透過互動化方式將 VISA 儀器控制功能整合至您的程式。舉例來說,CWVISA 控制項會尋找所有 VISA 資源,因此您只需要從所列的項目中進行選擇。CWVISA 提供測試屬性頁面,能用於與儀器互動並排除通訊問題。您可以使用解析屬性頁面來指定解析工作,以便以可用的格式將資料傳回至您的程式。透過 Measurement Studio VISA API,您可以與序列儀器、GPIB 與 VXI 儀器執行同步與非同步通訊,並使用事件處理與排列功能來加快程式的執行速度。

Was this information helpful?

Yes

No