C #仪器控制指南

目录目录
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 仪器的通信。

什么是什么是 VISA ? 
 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 API ? 

VISA . Net API 是一个面向对象的接口,它由一组使用 VISA 与仪器通信的. Net 类组成。您可以使用. Net 兼容的语言,如 C #和 Visual Basic . Net 。

如何使用如何使用 VISA . Net API ? 
 VISA . Net API 是免费的 NI - VISA 驱动程序软件的一部分。 NI VISA 可以从 National Instrument VISA 免费下载以与 NI 产品结合使用。为了安装用于 NI VISA 的. Net 支持程序,您需要在开发支持类别中选择. Net 框架1.1语言支持,以包括. Net 支持程序,如图1所示。显示. Net 支持程序的 NI - VISA 安装过程.

添加到添加到 VisaNSVisaNS 类库的引用类库的引用
为了创建您的 C #或 Visual Basic . Net 仪器控制应用,您需要从可视化工作室中的一个解决方案开始。在解决方案浏览器中,您将发现每个项目都拥有一个名为"引用"的类别,而各种引用便据此分类组织。为了使用 VISA . Net API 类库,将 NationalInstruments . Common与 NationalInstruments . VisaNS 引用添加到您的项目。 NationalInstruments . Common 命名空间包括各种为许多 NI 驱动程序所使用的常见方法和属性。 NationalInstruments . VisaNS 命名空间包括面向 VISA . Net API 的方法和属性。为了增加一个新的引用,右击"引用"类别并选中"添加引用"。

 VisaNS 将 VisaNS 命名空间导入到您的应用命名空间导入到您的应用
当您引用 VisaNS 类时,您可以在您的项目中使用它们。通过导入 VisaNS 命名空间,您可以免除键入的必要,从而更为直接地访问对象。 VisaNS 命名空间的导入,可以通过将下行代码添加到您的应用程序的开始处完成:
[ C #]
 using NationalInstruments . VisaNS ;
[ VB . Net ]
 Imports NationalInstruments . VisaNS 

确定仪器资源的名称
一项资源可以是您希望通信的 GPIB 、串口、以太网/ LAN 、 IEEE 1394和 USB 仪器或控制器。资源名称,也称之为仪器描述符,描述了 VISA 资源的准确名称与位置。例如,资源名称ASRL1:: INSTR 描述了位于您的计算机的 COM 端口1的仪器; GPIBO ::13:: INSTR 描述了一个位于位置13的 GPIB 仪器。为了实现与一个使用 VISA 的仪器的通信,我们必须确定其地址和仪器描述符。下面的链接将指向仪器控制基础(硬件部分)网页,在那里您可以找到关于如何发现任一硬件总线的 VISA 资源的文章。

仪器控制基础:硬件与总线技术
我们将在本指南的后续部分使用这一资源名称,以描述我们希望与之通信的仪器。

打开一个打开一个 VISAVISA 会话会话
一个会话是自 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 ( Inval idCastException )
 MessageBox . Show (" Resource selected must be a message - based session ");
 catch ( Exception exp )
 MessageBox . Show ( exp . Message );

[ VB . Net ]
 Try 
 mbSession = CType ( ResourceManager . GetLocal Manager (). 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 框架帮助文档。

关闭该关闭该 VISAVISA 会话会话
为了关闭我们创建的与我们仪器通信的 VISA 会话,我们必须使用 MessageBasedSession 类的 Dispose (处置)方法。该方法释放为该会话分配的所有资源。下述代码展示了如何处置一个会话:


[ C #]
 mbSession . Dispose ():
[ VB . Net ]
 mbSession . Dispose ()


结论结论
 NI VISA 是一个面向多种仪器控制的快速且方便的解决方案。 VISA . Net API 提供了一个面向对象的接口,以实现与您的仪器的方便通信。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值