本页主要介绍NI-VISA .NET库的主要功能。关于下载NI-VISA .NET库和查找文档和范例的信息,请参见NI硬件和软件的.NET资源。
NI-VISA .NET库包含为NI-VISA提供.NET接口的类。该库符合IVI基金会编写的用于.NET的VISA实现规范。该库取代了IVI基金会将.NET API标准化为VISA之前的实施NI VisaNS库。NI-VISA是工业标准虚拟仪器软件架构(VISA)规范的NI实现。VISA和VISA .NET规范共同定义了与.NET环境中的仪器和其他设备进行通信的标准、一致的API。NI-VISA .NET支持多种总线和接口技术,包括TCP/IP、USB、GPIB、串口和PCI/PXI。NI-VISA .NET库提供的类实现了IVI基金会提供的IVI VISA .NET库(Ivi.Visa)中定义的接口和类型。关于IVI VISA .NET库的详细信息,见VPP-4.3.6:.NET的VISA实现规范。
在典型的应用程序中,NI建议使用仪器专有的仪器驱动程序(如有)。关于如何下载仪器驱动程序,请参加NI硬件和软件.NET资源中的下载用于第三方仪器的API部分。仅当没有此类驱动程序或需要驱动程序不具备的其他功能时,才使用NI-VISA .NET库。
NationalInstruments.Visa命名空间包含为NI-VISA驱动程序提供了大量面向对象接口的.NET类。VISA会话对象是VISA API规范中的基本概念。VISA会话用于标识资源。资源有几种类型,包括仪器资源、插槽资源和接口资源。在NI-VISA .NET类库中,从Session衍生的类(称为Session衍生类)可封装VISA会话对象。
Session衍生类的方法对VISA会话对象执行读取或写入数据等操作。NI-VISA .NET类的方法映射至NI-VISA C API中的操作。Session衍生类的属性可配置VISA会话对象并映射至NI-VISA C API的属性。
Session衍生类包含.NET事件成员。可使用.NET事件注册委托,以在事件发生时接收通知。Session衍生类的方法和属性可执行错误检查,并将NI-VISA驱动程序错误代码转换为.NET异常类型。
NationalInstruments.Visa命名空间中的主要类是GpibSession、PxiSession、SerialSession、TcpipSession、TcpipSocket、UsbSession和VxiSession。这些Session衍生类在本文档中也称为“叶”类,间接衍生自Session。这些类提供了VISA的核心功能。每个Session衍生类表示一种VISA资源类型。每个Session衍生类仅公开适用于对Session衍生类表示的资源类型有效的方法、属性和事件。GpibInterface、PxiBackplane、PxiMemory、UsbRaw、VxiBackplane和VxiMemory是高级应用程序的其他会话衍生叶类。
要与典型的.NET应用程序或库中的VISA资源通信,请创建与该资源对应的特定Session衍生类的实例。在实例上设置属性以配置资源。在实例上调用方法以读取和写入资源。不再需要访问资源时,必须调用Dispose释放资源。
某些类型的应用程序或库(如仪器驱动程序)必须以独立于接口的方式访问资源。NI-VISA .NET包含其他类,可用于以独立于接口的方式创建和访问VISA资源。例如,要创建一个通过GPIB接口或串行接口与仪器通信的对象,调用Open并将返回值转换为MessageBasedSession。
在Session衍生对象上执行的主要操作集是输入/输出操作集。用于基于消息的资源的I/O的操作与用于基于寄存器的资源的方法不同。每个Session衍生叶类仅提供适合Session衍生类表示资源的I/O方法。
要与基于消息的资源进行通信,必须在应用程序和资源之间传递字符串或字节数组。GPIB仪器就是基于消息的资源的一种。要与基于寄存器的资源进行通信,必须在资源上设置寄存器或直接访问资源导出的内存。PXI仪器是基于寄存器资源的范例。
表示基于消息的资源的Session衍生类包括RawIO属性,该属性提供用于读取和写入基于消息资源的方法。RawIO对象提供同步和异步读写方法。同步方法执行整个操作,并在操作完成后返回。异步方法开始操作并立即返回,操作完成后调用用户提供的委托或保留数据直至用户请求。
使用ReadString从资源同步读取字符串。使用Read从资源同步读取二进制数据数组。使用BeginRead开始异步读取操作。使用EndReadString或EndRead获取异步读取操作的结果。
使用Write同步写入字符串或二进制数据数组至资源。使用BeginWrite开始异步写入操作。使用EndWrite获取异步写入操作的结果。
表示基于消息的资源的Session衍生类包括FormattedIO属性,该属性提供用于读取和写入基于消息资源的更高级别格式化I/O操作。
使用Write或WriteLine方法之一同步格式化和写入基于文本的消息至资源。使用WriteBinary发送二进制数据块。使用BinaryEncoding属性指定FormattedIO对象格式化二进制数据的方法。
使用读取方法之一从资源同步读取和解析基于文本的消息和二进制数据。各种读取方法包括读取字节、字符、双精度、整数和浮点值的功能。例如,ReadInt64读取ASCII编码的Int64值,ReadDouble读取ASCII编码的Double值。使用BinaryEncoding属性指定FormattedIO对象解析二进制数据的方式。
使用Printf方法之一将数据格式化为指定格式并写入资源。使用Scanf方法之一从资源中读取格式化字符串,并根据指定格式解析字符串。Printf和Scanf方法的格式字符串中使用的格式说明符与VISA viPrintf和viScanf函数非常相似,但有一些区别。关于FormattedIO方法和支持的格式说明符的详细信息,请参见VPP-4.3.6规范中对IMessageBasedFormattedIO的说明。
表示基于寄存器的资源的Session衍生类包括用于读取和写入由基于寄存器的资源导出的内存的方法。
使用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帮助。
ResourceManager类提供查找、解析和打开带资源名称的Session衍生类的功能。根据给定的资源名称,使用Open实例化相应的Session衍生类。根据给定的搜索表达式,使用Find获取应用程序域中可用的资源名称列表。使用Parse获取资源名称的其他信息。
不再需要访问资源时,必须调用Dispose以释放资源。销毁ResourceManager实例后,使用Open方法实例化的任何Session衍生对象仍然有效。
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中支持的Session衍生类使用类似的构造器命名。然而,由于新API实现了IVI规范指定的接口并使用规范中定义的几种类型,这些Session衍生类的实际成员与VisaNS中的成员不同,因此需要手动更改应用程序,以从VisaNS迁移到NI-VISA.NET。在某些情况下(例如,格式化I/O功能),API与VisaNS有很大不同,可能需要较大的迁移改动。
NI-VISA .NET API不支持VisaNS API支持的部分功能,或支持的功能不同。下文介绍了一些主要区别。