您可以透過單一介面 - VISA,Virtual Instrument Software Architecture 應用程式設計介面 (API),設定並控制序列、GPIB 與 VXI 儀器。這是一款高階驅動程式,可呼叫每個儀器的低階驅動程式。本應用說明介紹 VISA,並說明如何運用 Visual Basic 中的 Measurement Studio VISA (CWVISA) ActiveX 控制元件,透過單一程式設計介面,透過 序列、GPIB 與 VXI 儀器來執行儀器控制。
NI 開發的 VISA 驅動程式軟體架構,可將序列、GPIB 與 VXI 儀器的通訊整合,並簡化儀器控制程式。VISA API 可透過作業系統呼叫與 NI-488.2 與 NI-VXI 驅動程式軟體,存取序列、GPIB 與 VXI 儀器,如圖 1 所示。
VISA 能發揮下列優勢:
使用極為精巧的指令集,內建儀器程式設計功能。
CWVISA 是一種 ActiveX 控制元件,可將 VISA API 抽象化,因此您可透過互動式屬性頁面與簡化的 API,介接序列、GPIB 與 VXI 儀器。例如,您可以使用 CWVISA 屬性頁面,在設計階段以互動方式尋找與儀器進行通訊、找出介面問題,或驗證與儀器的通訊。您可以在任何 ActiveX 控制容器中使用 VISA ActiveX 控制元件,包括 Microsoft Visual Basic、Visual C++ 與 Borland Delphi。
| 首先要將 CWVISA 控制項放置在使用者介面表格上。請注意,Visual Basic 將此控制項命名為 CWVisa1。以滑鼠右鍵按一下控制項,並選擇 Properties (屬性)。本應用說明的其他部分說明如何使用屬性頁面選擇資源與通訊屬性、測試通訊,以及從儀器剖析資料,以及如何透過簡化的 API 以程式設計方式控制通訊。 |
判斷儀器資源名稱
資源是指想要與之通訊的序列、GPIB 或 VXI 儀器或控制器。資源名稱指定 VISA 資源的確切名稱與位置。舉例來說,資源名稱 ASRL1::INSTR 說明電腦 COM 埠 1 的儀器,而圖 2 所示的 GPIB0::13::INSTR 則說明位於 13 的 GPIB 儀器。
儀器互動所面臨的第一項挑戰,通常就是決定其地址與資源名稱。CWVISA 會搜尋電腦中的所有可用 COM 埠,以及啟用的 GPIB 與 VXI 儀器,並將所有可用的資源納入 資源名稱清單中。如果您知道要與之通訊的儀器資源名稱,或是想要在執行期間變更資源,請以程式設計方式指定資源名稱,如下列程式碼列所示:
CWVisa1.RsrcName = "GPIB::13::INSTR"
設定讀寫設定
在 RdWrt 屬性頁面中設定下列一般介面與通訊設定。圖 3 顯示了可能設定通訊設定的方法之一。
序列 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。
交換位元會反轉裝置的位元組。如果您的裝置是 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
VXI Communication -- 使用 VXI 記憶體屬性頁面來設定與 VXI 暫存器存取相關的屬性。暫存器架構的儀器具有稱為「暫存器」的處理器裝置,可於處理期間暫時儲存資料。源極和「目的地」屬性適用於高階暫存器存取作業,而「視窗」屬性則適用於低階暫存器存取。使用 Access Priv 屬性來指定 VME 存取權限,並使用 Address Incr 在每次使用 MoveIn 或 MoveOut 方法傳輸後,將目標位址加 1。
圖 5 顯示 VXI 儀器的資料傳輸方式。
您可以透過程式設計方式來設定這些相同的通訊屬性。下列範例會設定 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? 識別查詢。請參閱您的儀器說明文件,以判斷可辨識的訊息架構字串。
3.按下「執行」。請注意在 字串接收指示元件中出現的響應。圖 6 顯示 NI GPIB 與序列裝置模擬器收到的響應。您也可以按下「寫入」以寫入資料至儀器,並「讀取」以讀取儀器的回應。
開啟 VISA 工作階段
開啟工作階段,並從程式與儀器進行通訊。工作階段是 CWVISA 控制項與該資源之間的連線或連結,您可以使用 Open 方法來開啟工作階段。Open 方法可初始化資源,並使用您在屬性頁面中指定的設定,或透過程式設計方式來設定 VISA 通訊工作階段。例如,當使用者按一下人機介面上的「開啟工作階段」按鈕時,您可能會想要開啟 VISA 工作階段,如下列事件程序所示:
開放研討會
私人子 OpenSession_Click()
結束子
傳輸資料
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)
結束子
使用 In 與 Out 方法存取高階暫存器 -- 若要讀取高階 VXI 暫存器的資料,請使用 In8、In16 與 In32 方法讀取 8、16 與 32 位元的值,如下方範例所示:
'讀取 VXI 匯流排 A32 空間中的偏移 0 的 32 位元值
X = CWVisa1.In32 cwVxiA32Space,0
使用相對應的 Out 方法,以將資料寫入指定的偏移,如下方範例所示:
'在 VXI 匯流排的區域空間中,從偏移 0 寫入 32 位元的 Y 值
CWVisa1.Out32 cwVxiLocalSpace、0、Y
使用 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 資源與您的計畫之間的通訊功能。若要讓 程式回應下列任何情況,請針對適當活動定義事件程序:
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)
如果是這樣
結束若
如果您擔心在程式內特定點發生的事件,可以清空队列或停用事件队列。若要清空相同類型的所有事件的接聽,請使用「離散事件」方法:
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」)。讀取
關閉 VISA 工作階段
使用「關閉」方法去分配資源,並結束 VISA 工作階段。在下列事件程序中,當使用者按下「關閉工作階段」 指令按鈕時,VISA 工作階段就會結束:
關閉工作階段
私人子 CloseSession_Click()
結束子
NI VISA 是適用於多種儀器控制的解決方案。Measurement Studio 提供屬性頁面,讓您能透過互動化方式將 VISA 儀器控制功能整合至您的程式。舉例來說,CWVISA 控制項會尋找所有 VISA 資源,因此您只需要從所列的項目中進行選擇。CWVISA 提供測試屬性頁面,能用於與儀器互動並排除通訊問題。您可以使用解析屬性頁面來指定解析工作,以便以可用的格式將資料傳回至您的程式。透過 Measurement Studio VISA API,您可以與序列儀器、GPIB 與 VXI 儀器執行同步與非同步通訊,並使用事件處理與排列功能來加快程式的執行速度。