拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 266|回复: 0

C#与Visual Basic .Net仪器控制指南

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2018-6-15 17:01:51 | 显示全部楼层 |阅读模式


[size=13.3333px]https://www.ni.com/white-paper/6314/zhs/
发布日期: 六月 22, 2007 | 2 评级 | 3.00 out of 5 | [url=]打印[/url]
目录1. 引言
由于实现仪器与PC连接的总线种类繁多,通过微软的.Net应用实现仪器控制颇具挑战性。对于每一种总线,开发人员都必须学习该总线的协议和应用编程接口(API)以编写应用程序。VISA(虚拟仪器软件架构)是一个高层次的驱动程序,它将用于每个仪器硬件总线类型的更低层次的驱动程序抽象化,并提供一个单一的API实现与仪器的通信,而不必考虑具体的总线接口。此应用指导讨论了如何在使用由C#与Visual Basic .Net编写的VISA .Net库的.Net应用中利用VISA,以实现与GPIB、串口、以太网/LAN、IEEE 1394和USB仪器的通信。
2. 什么是VISA?

VISA是一个驱动程序软件架构,开发这一架构的目的在于统一与GPIB、串口、以太网/LAN、IEEE 1394和USB仪器的通信,并简化您的仪器控制应用。通过VISA API,开发人员可以使用GPIB、串口、以太网/LAN、IEEE 1394和USB仪器。


VISA具备如下优势:
  • 接口独立性--VISA提供了一个单一的API以相同的方法与仪器进行通信,而不考虑其接口类型。例如,VISA命令,发送一个ASCII字符串到一个基于消息的仪器,对于GPIB、串口、以太网/LAN、IEEE 1394和USB接口是完全相同的。
  • 一种面向对象的架构,可以方便地适应未来开发的仪器接口。
  • 功能全面的仪器编程特性,通过一个非常紧凑的命令集实现。
3. 什么是VISA .Net API?
VISA .Net API是一个面向对象的接口,它由一组使用VISA与仪器通信的.Net类组成。您可以使用.Net兼容的语言,如C#和Visual Basic .Net。
4. 如何使用VISA .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安装过程


添加到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()
5. 结论

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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-26 04:46 , Processed in 0.193933 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表