VISA .Net API是一个面向对象的接口,它由一组使用VISA与仪器通信的.Net类组成。您可以使用.Net兼容的语言,如C#和Visual Basic .Net。
添加到VisaNS类库的引用
为了创建您的C#或Visual Basic .Net仪器控制应用,您需要从可视化工作室中的一个解决方案开始。在解决方案浏览器中,您将发现每个项目都拥有一个名为"引用"的类别,而各种引用便据此分类组织。为了使用VISA .Net API类库,将NationalInstruments.Common与NationalInstruments.VisaNS引用添加到您的项目。NationalInstruments.Common命名空间包括各种为许多NI驱动程序所使用的常见方法和属性。NationalInstruments.VisaNS命名空间包括面向VISA .Net API的方法和属性。为了增加一个新的引用,右击"引用"类别并选中"添加引用"。
将VisaNS命名空间导入到您的应用
当您引用VisaNS类时,您可以在您的项目中使用它们。通过导入VisaNS命名空间,您可以免除键入的必要,从而更为直接地访问对象。VisaNS命名空间的导入,可以通过将下行代码添加到您的应用程序的开始处完成:
[C#]
using NationalInstruments.VisaNS;
[VB .Net]
Imports NationalInstruments.VisaNS
确定仪器资源的名称
一项资源可以是您希望通信的GPIB、串口、以太网/LAN、IEEE 1394和USB仪器或控制器。资源名称,也称之为仪器描述符,描述了VISA资源的准确名称与位置。例如,资源名称ASRL1::INSTR描述了位于您的计算机的COM端口1的仪器;GPIB0::13::INSTR描述了一个位于位置13的GPIB仪器。为了实现与一个使用VISA的仪器的通信,我们必须确定其地址和仪器描述符。下面的链接将指向仪器控制基础(硬件部分)网页,在那里您可以找到关于如何发现任一硬件总线的VISA资源的文章。
仪器控制基础:硬件与总线技术
我们将在本指南的后续部分使用这一资源名称,以描述我们希望与之通信的仪器。
打开一个VISA会话
一个会话是自VISA .Net API到一项资源的一个连接或链接。VISA .Net API包含专为特殊应用设计的不同的会话类。例如,MessageBasedSession类适用于通过发送和接收文本字符串形式的消息进行通信的仪器。与之相对的是,RegisterBasedSession类被用于与通过读写寄存器进行通信的仪器进行通信。本指南将讨论MessageBasedSession类。如果您希望了解关于其它会话类的更多信息,敬请参阅随NI VISA安装的NI-VISA .Net框架帮助文档。
创建一个新的MessageBasedSession的第一步便是将其声明为我们的应用程序中的一个变量。下述代码演示了如何声明一个新的MessageBasedSession:
[C#]
private MessageBasedSession mbSession;
[VB .Net]
Private mbSession As MessageBasedSession
在表或类中将这个MessageBasedSession变量声明为一个全局变量非常重要。与仪器通信的任一个函数都将不得不访问该对象。
在声明MessageBasedSession变量后,我们需要实例化一个MessageBasedSession对象。为完成这一工作,我们将使用静态方法(或者像在Visual Basic中那样称为共享方法)--ResourceManager类的GetLocalManager。该方法实例化一个新的ResourceManager对象。这个新的ResourceManager对象包含一个名为Open(打开)的函数,然后该函数实例化一个新的会话对象。最后,我们将新创建的会话对象映射到一个MessageBasedSession。ResourceManager类与会话类所包含的功能特性远超出我们在此指南中讨论所涉及的。如果您希望了解关于这些类的更多信息,敬请参阅随NI VISA安装的NI-VISA .Net框架帮助文档。下述代码展示了如何在一行代码中执行这三项操作:
[C#]
mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().
Open(resourceString.Text);
[VB .Net]
mbSession = CType(ResourceManager.GetLocalManager().
Open(resourceString.Text), MessageBasedSession)
ResourceManager对象的Open(打开)方法将仪器的资源名称(字符串形式)视为一项参数输入。我们在本指南的前面部分已经讨论了如何发现我们的仪器的资源名称。为使我们的应用程序更为健壮,我们将添加try(尝试)与catch(捕捉)函数。Try(尝试)与catch(捕捉)函数使我们能够响应在特定函数执行过程中发生的任何错误。特别的是,我们将通过异常类型捕捉InvalidCastException类型的异常和所有其它异常。下述代码展示了如何实现try(尝试)与catch(捕捉)函数:
[C#]
try
{
mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().
Open(resourceString.Text);
}
catch(InvalidCastException)
{
MessageBox.Show("Resource selected must be a message-based session");
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
[VB .Net]
Try
mbSession = CType(ResourceManager.GetLocalManager().
Open(resourceString.Text), MessageBasedSession)
Catch exp As InvalidCastException
MessageBox.Show("Resource selected must be a message-based session")
Catch exp As Exception
MessageBox.Show(exp.Message)
End Try
发送数据
在创建了一个与我们的仪器通信的会话之后,我们可以开始发送数据至该仪器,并读回其响应。在于基于消息的仪器的通信中最为常用的三项操作为查询、写入和读取。查询操作将一个命令写入到一个仪器并读回其响应。在另一方面,写入命令仅发送一个命令至仪器,而读取命令从仪器读取信息。下述代码片断展示了如何使用查询操作:
[C#]
try
{
string responseString = mbSession.Query(stringToWrite.Text);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
[VB .Net]
Try
Dim responseString As String = mbSession.Query(stringToWrite.Text)
Catch exp As Exception
MessageBox.Show(exp.Message
End Try
由于读取和写入操作是MessageBasedSession类的方法,因而其实现与查询操作非常相似。如果您希望了解关于这些操作的更多信息,敬请参阅随NI VISA安装的NI-VISA .Net框架帮助文档。
关闭该VISA会话
为了关闭我们创建的与我们仪器通信的VISA会话,我们必须使用MessageBasedSession类的Dispose(处置)方法。该方法释放为该会话分配的所有资源。下述代码展示了如何处置一个会话:
[C#]
mbSession.Dispose();
[VB .Net]
mbSession.Dispose()