我应该使用哪些IVI参考资料?

6

我对除基础 .NET 项目以外的任何事情都比较陌生,但目前正在尝试制作一个测试系统,用于与使用 SCPI 协议的 T&M 仪器进行通信,如 GPIB、USB 等。我已安装 Keysight IO Libraries,并一直在阅读其中的 VISA.NET 帮助文档。

我希望我的程序在尽可能的情况下是 VISA 供应商中立的,因此决定只通过 Ivi.Visa 接口实现。我打算使用以下 伪代码编写与仪器的通信:

//Access implementation only via IVI interfaces to keep things vendor neutral
using Ivi.Visa;
// Get a session from the manager
var Session = (IGpibSession)GlobalResourceManager.Open(Alias, AccessMode, Timeout);
// Use the formatted IO interface of the session
var io = Session.FormattedIO;

// Some communication operations
// UserCommand is some faux type object
io.PrintfAndFlush("%s", UserCommand.ToString);
if (UserCommand.Query)
    io.Scanf("%s", out UserCommand.Result);

// Doesn't seem to be any Close method on resource manager, session or interface?
Session.DiscardEvents(EventType.AllEnabled);
Session.Dispose();

我注意到以前我认为其他文档中的COM示例主要是指较老的用法,但我刚刚发现COM示例仍在被引用(例如从C#通过USB发送SCPI/GPIB命令)。在Visual Studio参考管理器中进一步探索,我发现不仅有VISA COM类型库,还有特定于仪器的IVI组件(例如:IVI Scope Assembly)和类似的COM类型库(例如:IviScope 3.0 Type Library)。我对这些东西感到有些困惑,不知道该使用哪一个或不使用哪一个!它们都是干什么的?我的意思是,它们之间有何区别或为什么我应该使用一个而不是另一个?(也许有一个简洁解释它们之间的差异或一般用例的来源?)

为什么会有负评和关闭投票? - Toby
1个回答

10

以下是一些背景信息。最终,我不认为我能给你最新的直接回答你问题的信息。

您可以从不同的级别与您的设备进行通信:

  1. 低级I/O
  2. VISA
  3. 供应商提供的IVI驱动程序
  4. IVI类驱动程序

不同的级别可能取决于较低级别组件的存在,并且可能允许您访问特定功能的较低级别。

低级I/O驱动程序由操作系统或I/O硬件制造商提供。 USBTMC和GPIB是示例。

VISA抽象了I/O驱动程序,使得通用代码独立于特定安装的I/O硬件。它确实允许检测I/O资源的特性,因此您可以在需要时执行特殊操作的分支,例如RS-232线终止检测或某些低级GPIB特性。您发送的数据必须与仪器的命令语言匹配,例如SCPI。

IVI驱动程序是提供仪器相关函数的库。驱动程序通过其命令语言与仪器交互,因此您不需要编写该部分的代码。它可能还提供了传递函数,因此您可以使用仪器的命令语言读取和写入库未覆盖的特性。IVI驱动程序可能使用VISA进行通信(通常是这样),并且可能需要特定的VISA供应商(通常不需要)。

IVI类驱动程序是为一类仪器(例如DMM和信号发生器)提供通用领域特定功能的库。这使得您的程序代码独立于仪器厂商。类驱动程序需要安装符合类要求的供应商提供的IVI驱动程序。

现在,VISA实现可以是COM或共享库(函数导出),二者都可以在Visual Basic(以及大多数其他.NET语言)中使用。我没有最近的经验,但几年前,在Agilent和NI之间,Agilent提供了COM接口,而NI提供了共享库接口。


1
谢谢Tom,那帮了很多忙! - Toby
只是在翻阅Keysight的文档,真是一团糟。代码示例来自2004年,库名称已经过时。几个小时过去了,我仍然不知道在2023年应该使用哪个正确的库。这篇文章帮助我穿越丛林。谢谢。 - Piglet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接