Diese Seite behandelt die wichtigsten Funktionen der NI-VISA-.NET-Bibliothek. Um die NI-VISA-.NET-Bibliothek herunterzuladen und Dokumentation sowie Beispiele zu finden, lesen Sie .NET-Ressourcen für Hardware und Software von NI.
Die NI-VISA-.NET-Bibliothek enthält Klassen, die eine .NET-Schnittstelle für NI-VISA bereitstellen. Diese Bibliothek entspricht der von der IVI Foundation erstellten VISA-Implementierungsspezifikation für .NET. Diese Bibliothek ersetzt die NI-VisaNS-Bibliothek, die vor der Standardisierung der .NET-API auf VISA durch die IVI Foundation implementiert wurde. NI-VISA ist die NI Implementierung der Industriestandardspezifikation Virtual Instrumentation Software Architecture (VISA). Gemeinsam definieren die VISA- und VISA-.NET-Spezifikationen eine einheitliche Standard-API für die Kommunikation mit Messgeräten und anderen Geräten in der .NET-Umgebung. NI-VISA .NET unterstützt verschiedene Bus- und Schnittstellentechnologien, darunter TCP/IP, USB, GPIB, serielle Schnittstellen und PCI/PXI. Die von der NI-VISA-.NET-Bibliothek bereitgestellten Klassen implementieren Schnittstellen und verwenden Typen, die in der IVI-VISA-.NET-Bibliothek (Ivi.Visa) definiert sind, welche von der IVI Foundation bereitgestellt wird. Weitere Informationen zur IVI-VISA-.NET-Bibliothek finden Sie unter VPP-4.3.6: VISA-Implementierungsspezifikation für .NET.
In einer typischen Anwendung empfiehlt NI, einen gerätespezifischen Gerätetreiber zu verwenden, sofern dieser verfügbar ist. Informationen zum Herunterladen von Gerätetreibern finden Sie im Abschnitt Download API for Third Party Instrument unter .NET Resources for NI Hardware and Software. Verwenden Sie die NI-VISA-.NET-Bibliothek nur, wenn ein solcher Treiber nicht verfügbar ist oder Sie zusätzliche Funktionen benötigen, die im Treiber nicht verfügbar sind.
Der Namensraum NationalInstruments.Visa umfasst .NET-Klassen, die eine umfangreiche, objektorientierte Schnittstelle zum NI-VISA-Treiber bieten. Das VISA-Session-Objekt ist das grundlegende Konzept der VISA-API-Spezifikation. Eine VISA-Session identifiziert eine Ressource. Es gibt verschiedene Arten von Ressourcen, darunter Geräteressourcen, Socket-Ressourcen und Schnittstellenressourcen. In der NI-VISA-.NET-Klassenbibliothek werden VISA-Session-Objekte von Klassen gekapselt, die von Session abgeleitet sind, sogenannte Session-abgeleitete Klassen.
Methoden von Session-abgeleiteten Klassen führen Operationen wie das Lesen oder Schreiben von Daten am VISA-Session-Objekt aus. Methoden von NI-VISA-.NET-Klassen werden Operationen in der NI-VISA C API zugeordnet. Eigenschaften von Session-abgeleiteten Klassen konfigurieren das VISA-Session-Objekt und werden Attributen in der NI-VISA C API zugeordnet.
Session-abgeleitete Klassen verfügen über .NET-Ereignismember. Sie können einen Delegaten mit einem .NET-Ereignis registrieren, um eine Benachrichtigung zu erhalten, wenn das Ereignis eintritt. Methoden und Eigenschaften von Session-abgeleiteten Klassen führen eine Fehlerprüfung durch und übersetzen NI-VISA-Treiberfehlercodes in .NET-Ausnahmetypen.
Die Hauptklassen im Namensraum NationalInstruments.Visa sind GpibSession, PxiSession, SerialSession, TcpipSession, TcpipSocket, UsbSession und VxiSession. Diese Session-abgeleiteten Klassen, in diesem Dokument auch als "Blattklassen" bezeichnet, leiten sich indirekt von Session ab. Diese Klassen bieten die Kernfunktionalität von VISA. Jede Session-abgeleitete Klasse repräsentiert einen VISA-Ressourcentyp. Jede Session-abgeleitete Klasse stellt nur die Methoden, Eigenschaften und Ereignisse bereit, die für den Ressourcentyp gültig sind, den die Session-abgeleitete Klasse repräsentiert. GpibInterface, PxiBackplane, PxiMemory, UsbRaw, VxiBackplane und VxiMemory sind zusätzliche Session-abgeleitete Blattklassen für fortgeschrittene Anwendungen.
Um mit einer VISA-Ressource in einer typischen .NET-Anwendung oder -Bibliothek zu kommunizieren, erstellen Sie eine Instanz der spezifischen Session-abgeleiteten Klasse, die der Ressource entspricht. Legen Sie Eigenschaften für die Instanz fest, um die Ressource zu konfigurieren. Rufen Sie Methoden der Instanz auf, um von der Ressource zu lesen und in die Ressource zu schreiben. Sie müssen Dispose aufrufen, um die Ressource freizugeben, wenn Sie nicht mehr darauf zugreifen müssen.
Einige Arten von Anwendungen oder Bibliotheken, wie Gerätetreiber, müssen Ressourcen schnittstellenunabhängig zugreifen. NI-VISA .NET enthält zusätzliche Klassen, mit denen Sie VISA-Ressourcen schnittstellenunabhängig erstellen und darauf zugreifen können. Um beispielsweise ein Objekt zu erstellen, mit dem Sie über eine GPIB-Schnittstelle oder serielle Schnittstelle mit einem Gerät kommunizieren können, rufen Sie Open auf und wandeln Sie den Rückgabewert in MessageBasedSession um.
Die primären Operationen, die Sie an einem von einer Session abgeleiteten Objekt durchführen, sind die Ein-/Ausgabeoperationen. Die Operationen, die Sie für I/O bei nachrichtenbasierten Ressourcen verwenden, unterscheiden sich von den Methoden, die Sie für registerbasierte Ressourcen verwenden. Jede Session-abgeleitete Blattklasse stellt nur die I/O-Methoden bereit, die für die Ressource geeignet sind, die die Session-abgeleitete Klasse repräsentiert.
Zur Kommunikation mit nachrichtenbasierten Ressourcen müssen Zeichenketten oder Byte-Arrays zwischen der Anwendung und der Ressource ausgetauscht werden. Ein GPIB-Gerät ist ein Beispiel für eine nachrichtenbasierte Ressource. Zur Kommunikation mit registerbasierten Ressourcen müssen Sie Register auf der Ressource setzen oder direkt auf den von der Ressource exportierten Speicher zugreifen. Ein PXI-Gerät ist ein Beispiel für eine registerbasierte Ressource.
Session-abgeleitete Klassen, die nachrichtenbasierte Ressourcen repräsentieren, enthalten eine RawIO-Eigenschaft, die Methoden bereitstellt, mit denen Sie von und zu nachrichtenbasierten Ressourcen lesen und schreiben können. Das RawIO-Objekt bietet sowohl synchrone als auch asynchrone Lese- und Schreibmethoden. Synchrone Methoden führen die gesamte Operation aus und geben erst dann einen Wert zurück, wenn die Operation abgeschlossen ist. Asynchrone Methoden starten die Operation, geben sofort einen Wert zurück und rufen nach Abschluss der Operation einen von Ihnen bereitgestellten Delegaten auf oder halten die Daten, bis Sie sie anfordern.
Verwenden Sie ReadString, um eine Zeichenkette synchron aus einer Ressource zu lesen. Verwenden Sie Read, um ein Array von Binärdaten synchron aus einer Ressource zu lesen. Verwenden Sie BeginRead, um eine asynchrone Leseoperation zu starten. Verwenden Sie EndReadString oder EndRead, um das Ergebnis einer asynchronen Leseoperation zu erhalten.
Verwenden Sie Write, um eine Zeichenkette oder ein Array von Binärdaten synchron in eine Ressource zu schreiben. Verwenden Sie BeginWrite, um eine asynchrone Schreiboperation zu starten. Verwenden Sie EndWrite, um das Ergebnis einer asynchronen Schreiboperation zu erhalten.
Session-abgeleitete Klassen, die nachrichtenbasierte Ressourcen repräsentieren, enthalten eine FormattedIO-Eigenschaft, die höherwertige formatierte I/O-Operationen bereitstellt, mit denen Sie von und zu nachrichtenbasierten Ressourcen lesen und schreiben können.
Verwenden Sie eine der Methoden Write oder WriteLine, um textbasierte Nachrichten synchron zu formatieren und an die Ressource zu schreiben. Verwenden Sie WriteBinary, um Binärdatenblöcke zu senden. Verwenden Sie die Eigenschaft BinaryEncoding, um festzulegen, wie das FormattedIO-Objekt Binärdaten formatiert.
Verwenden Sie eine der Lesemethoden, um textbasierte Nachrichten und Binärdaten synchron von der Ressource zu lesen und zu analysieren. Die verschiedenen Lesemethoden bieten Funktionen zum Lesen von Byte-, Zeichen-, Double-, Integer- und Fließkommawerten. Beispielsweise liest ReadInt64 einen ASCII-codierten Int64-Wert und ReadDouble einen ASCII-codierten Double-Wert. Verwenden Sie die Eigenschaft BinaryEncoding, um festzulegen, wie das FormattedIO-Objekt Binärdaten analysiert.
Verwenden Sie eine der Printf-Methoden, um die Daten in das angegebene Format zu bringen und in die Ressource zu schreiben. Verwenden Sie eine der Scanf-Methoden, um einen formatierten String aus der Ressource zu lesen und den String entsprechend dem angegebenen Format zu analysieren. Die Formatbezeichner, die im Formatstring für die Methoden Printf und Scanf verwendet werden, ähneln denen für die VISA-Funktionen viPrintf und viScanf, mit einigen Unterschieden. Weitere Informationen zu den FormattedIO-Methoden und unterstützten Formatbezeichnern finden Sie in der Beschreibung von IMessageBasedFormattedIO in der VPP-4.3.6-Spezifikation.
Session-abgeleitete Klassen, die registerbasierte Ressourcen repräsentieren, enthalten Methoden zum Lesen und Schreiben von Speicher, der von registerbasierten Ressourcen exportiert wird.
Verwenden Sie In8, In16, In32 und In64, um skalare Werte aus dem Gerätespeicher zu lesen. Verwenden Sie MoveIn8, MoveIn16, MoveIn32 und MoveIn64, um Arrays von Werten aus dem Gerätespeicher zu lesen.
Verwenden Sie Out8, Out16, Out32 und Out64, um skalare Werte in den Gerätespeicher zu schreiben. Verwenden Sie MoveOut8, MoveOut16, MoveOut32 und MoveOut64, um Arrays von Werten in den Gerätespeicher zu schreiben.
Der NI-VISA-Treiber gibt Fehlercodes zurück, die den Erfolg oder Misserfolg einer Operation anzeigen. Wenn ein NI-VISA-.NET-Methodenaufruf oder Eigenschaftszugriff zu einem Fehler im NI-VISA-Treiber führt, erstellt die .NET-Klasse eine Ivi.Visa.NativeVisaException und gibt diese zurück. Die Eigenschaft ErrorCode in diesem Ausnahmeobjekt enthält den Fehlercode, den die NI-VISA-Treiberoperation zurückgegeben hat.
Verschiedene MessageBasedSession-Methoden zum Lesen und Schreiben von Daten geben eine Ivi.Visa.IOTimeoutException zurück, wenn die Operation ein Timeout hatte. Die Eigenschaft ActualCount in dieser Ausnahme enthält die Anzahl der Elemente, die vor dem Timeout gelesen oder geschrieben wurden. Die Eigenschaft ActualData in dieser Ausnahme enthält die Bytes, die vor dem Timeout gelesen oder geschrieben wurden.
Eine Liste aller NI-VISA-Fehlercodes finden Sie im Thema Fehlercodes in der NI-VISA-Hilfe. Um die NI-VISA-Hilfe aus dem Startmenü zu öffnen, wählen Sie Start»Programme»National Instruments»VISA»NI-VISA Help.
Die Klasse ResourceManager bietet Funktionen zum Auffinden, Analysen und Öffnen von Session-abgeleiteten Klassen mit Ressourcennamen. Verwenden Sie Open, um je nach Ressourcennamen die entsprechende Session-abgeleitete Klasse zu instanziieren. Verwenden Sie Find, um eine Liste der Ressourcennamen zu erhalten, die im Anwendungsbereich für einen bestimmten Suchausdruck verfügbar sind. Verwenden Sie Parse, um zusätzliche Informationen zu einem Ressourcennamen zu erhalten.
Sie müssen Dispose aufrufen, um die Ressource freizugeben, wenn Sie nicht mehr darauf zugreifen müssen. Jedes Session-abgeleitete Objekt, das mit der Methode Open instanziiert wurde, bleibt auch nach dem Entfernen der ResourceManager-Instanz gültig.
Die NI-VISA-.NET-API ähnelt der VisaNS-API und unterstützt die meisten Funktionen von VisaNS. VisaNS ist die ältere .NET-API für VISA, die von NI entwickelt wurde, bevor die Standardspezifikation verfügbar war. NI empfiehlt, für jede neue Anwendung die Standard-NI-VISA-.NET-API anstelle von VisaNS zu verwenden. Die Unterstützung für die ältere VisaNS-API wird in einer zukünftigen Version entfernt.
Darüber hinaus ist es möglich, Anwendungen, die die VisaNS-API verwenden, so zu ändern, dass sie die Standard-NI-VISA-.NET-API verwenden. Die unterstützten Session-abgeleiteten Klassen in der neuen API sind beispielsweise ähnlich benannt und verfügen über ähnliche Konstruktoren. Da die neue API jedoch Schnittstellen implementiert, die in der IVI-Spezifikation angegeben sind, und mehrere in dieser Spezifikation definierte Typen verwendet, unterscheiden sich die tatsächlichen Mitglieder dieser Session-abgeleiteten Klassen von denen in VisaNS und erfordern daher manuelle Änderungen an Ihren Anwendungen, um von VisaNS zu NI-VISA .NET zu migrieren. In einigen Fällen, wie etwa bei der formatierten I/O-Funktionalität, unterscheidet sich die API erheblich von VisaNS und erfordert möglicherweise größere Änderungen für die Migration.
Einige Funktionen, die von der VisaNS-API unterstützt werden, werden von der NI-VISA-.NET-API nicht oder anders unterstützt. Einige der wichtigsten Unterschiede werden im Folgenden beschrieben.