NI-VISA .NET 函式庫

概觀

本頁介紹 NI-VISA .NET 函式庫的主要功能。如需下載 NI-VISA .NET 函式庫並尋找說明文件與範例,請參閱 .NET 軟硬體資源

內容

簡介

NI-VISA .NET 函式庫包含可為 NI-VISA 提供 .NET 介面的類別。此函式庫符合 IVI Foundation 所撰寫的 VISA Implementation Specification for .NET。這個函式庫取代了 NIVisaNS 函式庫,這個函式庫在 IVI Foundation 將 .NET API 標準化為 VISA 之前就實作了。NI-VISA 是 NI 執行業界標準虛擬儀器軟體架構 (VISA) 規格 的產品。VISA 與 VISA .NET 規格共同定義了一個標準且一致的 API,可用來與 .NET 環境中的儀器和其他裝置通訊。NI-VISA .NET 支援數種匯流排與介面技術,包括 TCP/IP、USB、GPIB、序列與 PCI/PXI。NI-VISA .NET 函式庫所提供的類別執行 IVI VISA .NET 函式庫 (Ivi.Visa) 所提供的 IVI Foundation 所定義的介面與使用類型。如需 IVI VISA .NET 函式庫的詳細資訊,請參閱 VPP-4.3.6:適用於 .NET 的 VISA 執行規格。

選擇儀器控制 API

在一般應用中,NI建議您使用儀器專屬的驅動程式 (若有)。請參閱適用於 NI 硬體與軟體的 .NET 資源 (.NET Resources for NI Hardware and Software) 中的「下載 API for Third Party Instrument」一節,以了解下載 Instrument Drivers 的位置。只有在無法使用此驅動程式或需要驅動程式中無法提供的其他功能時,即可使用 NI-VISA .NET 函式庫。

NI-VISA .NET 與 NI-VISA 驅動程式

NationalInstruments.Visa 命名空間包含 .NET 類別,可為 NI-VISA 驅動程式提供豐富的物件導向介面。VISA 工作階段物件是 VISA API 規格的基本概念。VISA 工作階段可識別資源。有多種資源類型,包含儀器資源、插槽資源與介面資源。在 NI-VISA .NET 類別函式庫中,來自 工作階段的類別稱為「工作階段產生類別」,會封裝 VISA 工作階段物件。

工作階段衍生類別的方法會在 VISA 工作階段物件上執行讀取或寫入資料等作業。NI-VISA .NET 類別方法可對應 NI-VISA C API 中的作業。工作階段衍生類別的屬性可設定 VISA 工作階段物件,並對應至 NI-VISA C API 中的屬性。

工作階段衍生類別具有 .NET 事件成員。您可以使用 .NET 事件註冊代表,以在事件發生時收到通知。工作階段衍生類別的方法與屬性可執行錯誤檢查,並將 NI-VISA 驅動程式錯誤碼轉換為 .NET 例外類型。

使用 Session-Derived 類別

NationalInstruments.Visa 命名空間的主要類別為:GpibSession、PxiSession、SerialSession、TCpipSession、TCpipSocket、UsbSession 與 VxiSession。這些來自 工作階段的類別在本文件中也稱為「表格」類別,其間接來自於 工作階段。這些類別提供核心 VISA 功能。每個由 工作階段導出的類別皆代表一個 VISA 資源類型。每個 工作階段衍生類別僅會顯示對該 工作階段衍生類別所代表之資源類型有效的方法、屬性與事件。GpibInterface、PxiBackplane、PxiMemory、UsbRaw、VxiBackplane 與 VxiMemory 等額外的工作階段衍生表類別適用於進階應用。

要與一般 .NET 應用程式或函式庫中的 VISA 資源通訊,請建立與該資源對應的特定 工作階段衍生類別實體。設定執行個體的屬性,以設定該資源。呼叫執行個體的方法,用於讀取與寫入資源。當您不再需要存取資源時,您必須呼叫 Dispose 才能釋出該資源。

某些類型的應用程式或函式庫 (例如 Instrument Drivers) 必須以無介面方式存取資源。NI-VISA .NET 包含額外的類別,可供您使用以不受介面影響的方式建立與存取 VISA 資源。例如,若要建立可透過 GPIB 介面或序列介面與儀器通訊的物件,請呼叫 Open 並將傳回值傳播至 MessageBasedSession。

使用 I/O 作業

您對以 工作階段導出之物件執行的主要作業集,是輸入/輸出作業集。相較於暫存器架構資源,您針對訊息架構資源的 I/O 所使用的作業不同。每個 工作階段衍生表類別僅提供適用於該 工作階段衍生類別所代表之資源的 I/O 方法。

要與訊息架構資源通訊,您必須在應用程式與資源之間傳遞字串或位元陣列。GPIB 儀器就是訊息架構資源的範例。要與暫存器架構的資源通訊,您必須在資源上設定暫存器,或直接存取資源匯出的記憶體。PXI 儀器就是暫存器架構資源的範例。

簡易訊息架構的 I/O 作業

代表訊息架構資源的 工作階段衍生類別,包含一個 RawIO 屬性,提供可用於讀取與寫入訊息架構資源的方法。RawIO 物件提供同步與非同步讀寫方法。同步方法會執行整個作業,並在作業完成後返回。非同步方法可開始作業,立即返回作業,並在作業完成時呼叫您提供的代表,或保留資料,直到您提出要求為止。

使用 ReadString 來同步讀取資源的字串。使用 Read 同步從資源讀取二進位資料陣列。使用 BeginRead 啟動非同步讀取作業。使用 EndReadString 或 EndRead 來取得非同步讀取作業的結果。

使用 Write 同步將字串或二進位資料陣列寫入資源。使用 BeginWrite 啟動非同步寫入作業。使用 EndWrite 來取得非同步寫入作業的結果。

格式化訊息架構 I/O 作業

代表訊息架構資源的 工作階段衍生類別,包含一個 FormattedIO 屬性,可提供較高階的格式化 I/O 操作,讓您讀取與寫入訊息架構資源。

使用其中一個 Write 或 WriteLine 方法,將文字架構訊息同步格式化並寫入資源。使用 WriteBinary 傳送二進位資料區塊。使用 二進位編碼屬性來指定 FormattedIO 物件為二進位資料的格式化方式。

使用其中一個讀取方法,以同步讀取與解析來自資源的純文字訊息與二進位資料。不同的讀取方法包含讀取位元、字元、雙數、整數與浮點值的功能。舉例來說,ReadInt64 讀取了編碼 ASCII 的 Int64 值,而 ReadDouble 則讀取了編碼 ASCII 的 Double 值。使用 BinaryEncoding 屬性來指定 FormattedIO 物件剖析二進位資料的方式。

使用其中一個 Printf 方法,將資料格式化為指定的格式,並寫入資源。使用其中一個 Scanf 方法讀取資源的格式化字串,並根據指定的格式剖析字串。提供給 Printf 與 Scanf 方法的格式字串所用的格式指定元件與 VISA viPrintf 與 viScanf 函式所用的格式指定元件非常相似,但有其差異。如需深入了解 FormattedIO 方法與可支援的格式指定元件,請參閱 VPP-4.3.6 規格中的 IMessageBasedFormattedIO 說明。

暫存器架構的 I/O 作業

代表暫存器架構資源的 工作階段衍生類別,包含可用於讀取和寫入暫存器架構資源匯出的記憶體的方法。

使用 In8、In16、In32 與 In64 讀取裝置記憶體中的純量值。使用MoveIn8、MoveIn16、MoveIn32 與 MoveIn64 讀取裝置記憶體的數值陣列。

使用 Out8、Out16、Out32 與 Out64 將純量值寫入裝置記憶體。使用 MoveOut8、MoveOut16、MoveOut32 與 MoveOut64,將數值陣列寫入裝置記憶體。

使用錯誤處理

NI-VISA 驅動程式會傳回錯誤代碼,指出作業是否成功或失敗。當 NI-VISA .NET 方法呼叫或屬性存取導致 NI-VISA 驅動程式發生錯誤時,.NET 類別會建立並傳回一個 Ivi.Visa.NativeVisaException。這個例外物件中的 ErrorCode 屬性,包含 NI-VISA 驅動程式作業傳回的錯誤碼。

若作業超時,多種用來讀取與寫入資料的 MessageBasedSession 方法將傳回 Ivi.Visa.IOTimeoutException。這個例外情況中的 ActualCount 屬性,包含過時之前讀取或寫入的項目數目。這個例外情況中的 ActualData 屬性,包含在超時發生之前讀取或寫入的位元組。

如需所有 NI-VISA 錯誤代碼的清單,請參閱 NI-VISA 說明中的錯誤代碼主題。若要從「開始」功能表存取「NI-VISA 說明」,請選擇「開始」»「程式」»「National Instruments」»「VISA」»「NI-VISA 說明」。

使用 Resource Manager

ResourceManager 類別提供的功能,可用來尋找、解析及開啟以資源名稱來源的 工作階段分類類別。根據指定的資源名稱,使用「開啟」 實體化適當的「工作階段衍生類別」。使用「尋找」(Find) (尋找) 來取得應用領域中可用的資源名稱清單 (以搜尋表示式為準)。使用 Parse 來取得資源名稱的其他資訊。

當您不再需要存取資源時,您必須呼叫 Dispose 以釋放該資源。使用 Open 方法所建立的任何以 工作階段導出之物件實體,在處置 ResourceManager 實體後仍有效。

VisaNS API 的關係

NI-VISA .NET API 與 VisaNS API 類似,並支援 VisaNS 所提供的大多數功能。VisaNS 是 NI 在推出標準規格之前為 VISA 所建立的舊版 .NET API。NI 建議使用標準 NI-VISA .NET API 來開發任何新的應用程式,而非使用 VisaNS。未來將移除對舊款 VisaNS API 的支援。

此外,也可修改使用 VisaNS API 的應用,以改為使用標準 NI-VISA .NET API。舉例來說,新 API 中支援的「工作階段衍生」類別,也會使用類似的建構元件命名。然而,由於新的 API 執行 IVI 規格指定的介面,並且使用該規格中定義的數種類型,因此,這些來自 工作階段類別的實際成員與 VisaNS 中的成員不同,因此必須手動變更應用,才能從 VisaNS 轉移至 NI-VISA .NET。在某些情況下,例如格式化 I/O 功能,API 會與 VisaNS 大不相同,且可能需要進行更大的轉移變更。

NI-VISA .NET API 不支援或不同方式支援 VisaNS API 所支援的部分功能。以下將說明部分主要差異。

  • 訊息架構的 I/O 作業會透過不同的方式提供
    VisaNS 中某些 工作階段衍生類別執行的簡單訊息架構作業,例如 ReadString 或 Write,現在已由 Ivi.Visa 的 RawIO 屬性提供。某些來自 工作階段類別執行的 IMmessageBasedSession 介面。RawIO 屬性會執行 Ivi.Visa.IMessageBasedRawIO 介面的類型。

    同樣地,VisaNS 中由 MessageBasedSessionReader 和 MessageBasedSessionWriter 執行的格式化訊息架構作業,現已由部分 工作階段衍生類別執行的 Ivi.Visa.IMessageBasedSession 介面的 FormattedIO 屬性提供。FormattedIO 屬性為執行 Ivi.Visa.IMessageBasedFormattedIO 介面的類型。
  • 格式化 I/O 所用的 格式指定值不同
    VisaNS 中的
    格式化 I/O 方法支援類似於使用 String.Format 方法的格式字串。不過,NI-VISA .NET 支援具有類似 VISA viPrintf 與 viScanf 函式的格式指定字串。如需深入了解 FormattedIO 方法與可支援的格式指定元件,請參閱 VPP-4.3.6 規格中 Ivi.Visa.IMessageBasedFormattedIO 介面的說明。
  • ResourceManager 類別棄置式
    ResourceManager 類別的使用方式不同。要取得 ResourceManager 物件的實體,請使用公用建構元件 ResourceManager() 建構新實體。ResourceManager 物件是可棄置物件,一旦不再需要該物件,應先棄置。請注意,使用 ResourceManager 的「開啟」方法取得的任何以 工作階段導出物件,在丟棄 ResourceManager 物件後仍然有效。
  • 不同方式支援非 標準 VISA 事件類型
    多種以 工作階段為主的類別提供的
    .NET 事件成員,可用來註冊委派方法,接收標準 VISA 事件類型的發生通知。不支援使用非標準的事件類型搭配事件委派,且此類事件只能使用使用「工作階段」類別中的「EnableEvent」(啟用事件) 方法啟用,此方法使用 NI-VISA 驅動程式中可用的一般機制。您可以使用 工作階段類別中的「等待活動」方法接收這類活動的通知。
  • 不支援.NET 遠端
    .NET 遠端 API 屬於舊款技術,且不建議用於新應用。NI-VISA .NET 不支援 .NET 遠端作業。NI-VISA 伺服器提供遠端存取 VISA 資源的方式,可做為替代方案。
  • 工作階段衍生表類別已密封
    表格類別如 GpibSession 或 TcpipSession 皆已密封,無法從其中的其他類別得出。
  • 不支援 FirewireSession
    NI-VISA 驅動程式已不再支援 FireWire 資源,因此 NI-VISA .NET 函式庫不提供該等資源的 工作階段衍生類別。

Was this information helpful?

Yes

No