2017-04-06 200 views
0

我對除了基本的.NET項目以外的任何東西都比較陌生,但我目前正在嘗試製作一個測試系統,以便與使用SCPI通過各種媒體(如GPIB,USB等)進行通信的M儀器配合使用。我有Keysight IO庫已安裝並已閱讀其中的VISA.NET幫助文檔。我應該使用哪種IVI參考?

我希望我的程序是VISA廠商中立(儘可能),所以決定堅持只通過Ivi.Visa接口使用實現。我在想用的工具類似下面的僞代碼編碼通訊:

//Access implementation only via IVI interfaces to keep things vendor neutral 
using Ivi.Visa; 
// Get a session from the manager 
var Session = (IGpibSession)GlobalResourceManager.Open(Alias, AccessMode, Timeout); 
// Use the formatted IO interface of the session 
var io = Session.FormattedIO; 

// Some communication operations 
// UserCommand is some faux type object 
io.PrintfAndFlush("%s", UserCommand.ToString); 
if (UserCommand.Query) 
    io.Scanf("%s", out UserCommand.Result); 

// Doesn't seem to be any Close method on resource manager, session or interface? 
Session.DiscardEvents(EventType.AllEnabled); 
Session.Dispose(); 

我不過注意的是,雖然我以前以爲我其它文件中看到,COM的例子主要是指老的用法,COM的例子是仍然被提及(例如Sending SCPI/GPIB commands over USB from C#)。我發現不僅有VISA COM類型庫,還有工具特定的IVI程序集(例如:IVI Scope Assembly)和類似的COM類型庫(例如:IviScope 3.0 Type Library )。

我對這些都是爲了什麼以及我應該使用或不使用哪些而感到有些困惑!

這些都是爲了什麼?我的意思是,它們之間有什麼區別,或者爲什麼我會用另一種呢? (也許有一個來源可以簡潔地解釋某個地方的差異或一般用例?)。

+0

爲什麼倒票和收票? – Toby

回答

3

這是一些背景信息。最後,我認爲我不能給你直接回答你問題的最新信息。

您可以與您的儀器從不同層面溝通:

  1. 低級別的I/O
  2. VISA
  3. 供應商提供的IVI驅動程序
  4. 類IVI驅動程序

不同的級別可能取決於組件是否存在較低級別,並可能允許您訪問較低級別的特定級別特徵。

低級I/O驅動程序由操作系統或I/O硬件製造商提供。 USBTMC和GPIB就是例子。

VISA抽象I/O驅動程序,允許通用代碼獨立於特定安裝的I/O硬件。它確實允許檢測I/O資源功能,以便您可以在需要時執行特殊操作的分支,如RS-232線路終端檢測或某些低級GPIB功能。您發送的數據必須與儀器的命令語言(如SCPI)相匹配。

IVI驅動程序是一個提供儀器域特定功能的庫。驅動程序通過其命令語言與儀器進行交互,因此您無需對其進行編碼。它可能提供直通功能,因此您可以使用該儀器的命令語言讀取和寫入該庫不包括的功能。 IVI驅動程序可能使用VISA進行通信(通常是這樣),並且可能需要特定的VISA供應商(通常不會)。

IVI類驅動程序是一種爲一類儀器(如DMM和信號發生器)提供通用領域特定功能的庫。這使您的程序代碼獨立於儀器供應商。類驅動程序確實需要安裝符合類的供應商提供的IVI驅動程序。

現在,VISA實現是COM或共享庫(函數導出),其中任何一個都可以在Visual Basic(以及大多數其他.NET語言)中使用。我幾乎沒有這些經驗,但幾年前,安捷倫和NI之間,安捷倫提供了COM接口和NI提供的共享庫接口。

+0

謝謝湯姆,那幫了很多! – Toby