我应该使用哪些 IVI 参考?

Which IVI references should I use?

除了基本的 .NET 项目外,我对任何东西都比较陌生,但目前正在尝试制作一个测试系统,用于 T & M 仪器,该仪器使用 SCPI 通过各种媒体(如 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 示例仍在被引用(例如 Sending SCPI/GPIB commands over USB from C#)。

在 Visual Studio Reference Manager 中进一步探索,我看到不仅有 VISA COM 类型库,还有仪器特定的 IVI 程序集(例如:IVI Scope Assembly)和类似的 COM 类型库(例如: IviScope 3.0 类型库)。

我对所有这些的用途以及我应该使用或不使用哪些感到有些困惑!

它们都是做什么用的?我的意思是,它们之间有什么区别,或者为什么我要使用一个而不是另一个? (也许有一个来源在某处简洁地解释了差异或一般用例?)。

这里是一些背景信息。最后,我认为我无法为您提供直接回答您问题的最新信息。

您可以从不同的层面与您的仪器进行交流:

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

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

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

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

IVI 驱动程序是一个提供仪器领​​域特定功能的库。驱动程序通过其命令语言与仪器交互,因此您无需对其进行编码。它可能提供直通功能,因此您可以使用仪器的命令语言读取和写入库未涵盖的功能。 IVI 驱动程序可能使用 VISA 进行通信(通常需要),并且可能需要特定的 VISA 供应商(通常不需要)。

IVI Class 驱动程序是一个库,它为一个 class 仪器(例如数字万用表和信号发生器)提供通用的特定于域的功能。这允许您的程序代码独立于仪器供应商。 class 驱动程序确实需要安装 class 兼容的、供应商提供的 IVI 驱动程序。

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