C#与与与与 Visual Basic .Net仪器控制指南仪器控制指南仪器控制指南仪器控制指南
目录目录目录目录
1. 引言
2. 什么是 VISA?
3. 什么是 VISA .Net API?
4. 如何使用 VISA .Net API?
5. 结论
引言引言引言引言
由于实现仪器与 PC连接的总线种类繁多,通过微软
的.Net 应用实现仪器控制颇具挑战性。对于每一种总
线,开发人员都必须学习该总线的协议和应用编程接
口(API)以编写应用程序。VISA(虚拟仪器软件架构)
是一个高层次的驱动程序,它将用于每个仪器硬件总线类型的更低层次的驱动程序抽象化,
并提供一个单一的 API 实现与仪器的通信,而不必考虑具体的总线接口。此应用指导讨论了
如何在使用由 C#与 Visual Basic .Net编写的 VISA .Net库的.Net应用中利用 VISA,以实现
与 GPIB、串口、以太网/LAN、IEEE 1394和 USB仪器的通信。
什么是什么是什么是什么是 VISAVISAVISAVISA????
VISA 是一个驱动程序软件架构,开发这一架构的目的在于统一与 GPIB、串口、以太网/LAN、
IEEE 1394 和 USB 仪器的通信,并简化您的仪器控制应用。通过 VISA API,开发人员可以使
用 GPIB、串口、以太网/LAN、IEEE 1394 和 USB 仪器。
VISA 具备如下优势:
• 接口独立性--VISA 提供了一个单一的 API 以相同的方法与仪器进行通信,而不考虑
其接口类型。例如,VISA 命令,发送一个 ASCII 字符串到一个基于消息的仪器,对
于 GPIB、串口、以太网/LAN、IEEE 1394 和 USB 接口是完全相同的。
• 一种面向对象的架构,可以方便地适应未来开发的仪器接口。
• 功能全面的仪器编程特性,通过一个非常紧凑的命令集实现。
什么是什么是什么是什么是 VISA .Net APIVISA .Net APIVISA .Net APIVISA .Net API????
VISA .Net API 是一个面向对象的接口,它由一组使用 VISA 与仪器通信的.Net 类组成。您
可以使用.Net 兼容的语言,如 C#和 Visual Basic .Net。
如何使用如何使用如何使用如何使用 VISA .Net APIVISA .Net APIVISA .Net APIVISA .Net API????
VISA .Net API 是免费的 NI-VISA 驱动程序软件的一部分。NI VISA 可以从 National
Instrument VISA 免费下载以与 NI 产品结合使用。为了安装用于 NI VISA 的.Net 支持程序,
您需要在开发支持类别中选择.Net 框架 1.1 语言支持,以包括.Net 支持程序,如图 1所示。
图 1:显示.Net 支持程序的 NI-VISA 安装过程
添加到添加到添加到添加到 VisaNSVisaNSVisaNSVisaNS 类库的引用类库的引用类库的引用类库的引用
为了创建您的 C#或 Visual Basic .Net 仪器控制应用,您需要从可视化工作室中的一个解
决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
开始。在解决方案浏览器中,您将发现每个项目都拥有一个名为"引用"的类别,而各
种引用便据此分类组织。为了使用 VISA .Net API 类库,将 NationalInstruments.Common
与 NationalInstruments.VisaNS 引用添加到您的项目。NationalInstruments.Common 命名
空间包括各种为许多 NI驱动程序所使用的常见方法和属性。NationalInstruments.VisaNS
命名空间包括面向 VISA .Net API 的方法和属性。为了增加一个新的引用,右击"引用"类别
并选中"添加引用"。
将将将将 VisaNSVisaNSVisaNSVisaNS 命名空间导入到您的应用命名空间导入到您的应用命名空间导入到您的应用命名空间导入到您的应用
当您引用 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资源的文章。
仪器控制基础:硬件与总线技术
我们将在本指南的后续部分使用这一资源名称,以描述我们希望与之通信的仪器。
打开一个打开一个打开一个打开一个 VISAVISAVISAVISA 会话会话会话会话
一个会话是自 VISA .Net API 到一项资源的一个连接或链接。VISA .Net API 包含专为特殊
应用
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的不同的会话类。例如,MessageBasedSession 类适用于通过发送和接收文本字符
串形式的消息进行通信的仪器。与之相对的是,RegisterBasedSession 类被用于与通过读
写寄存器进行通信的仪器进行通信。本指南将讨论 MessageBasedSession 类。如果您希望了
解关于其它会话类的更多信息,敬请参阅随 NI VISA 安装的 NI-VISA .Net 框架帮助文档。
创建一个新的 MessageBasedSession 的第一步便是将其声明为我们的应用程序中的一个变
量。下述代码演示了如何声明一个新的 MessageBasedSession:
[C#]
private MessageBasedSession mbSession;
[VB .Net]
Private mbSession As MessageBasedSession
在
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
或类中将这个 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 框架
帮助文档。
关闭该关闭该关闭该关闭该 VISAVISAVISAVISA 会话会话会话会话
为了关闭我们创建的与我们仪器通信的 VISA会话,我们必须使用 MessageBasedSession 类
的 Dispose(处置)方法。该方法释放为该会话分配的所有资源。下述代码展示了如何处置
一个会话:
[C#]
mbSession.Dispose();
[VB .Net]
mbSession.Dispose()
结论结论结论结论
NI VISA 是一个面向多种仪器控制的快速且方便的解决方案。VISA .Net API 提供了一个面
向对象的接口,以实现与您的仪器的方便通信。