5

除了基本的 .NET 项目,我对任何东西都很陌生,但目前我正在尝试制作一个测试系统,用于使用 SCPI 通过各种媒体(如 GPIB、USB 等)进行通信的 T&M 仪器。我安装了 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 示例(例如,通过 USB 从 C# 发送 SCPI/GPIB 命令)。

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

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

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

4

1 回答 1

9

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

您可以从不同级别与您的仪器进行通信:

  1. 低级 I/O
  2. 签证
  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 语言)中使用。我最近没有这方面的经验,但几年前,在安捷伦和 NI 之间,安捷伦提供了 COM 接口,而 NI 提供了共享库接口。

于 2017-04-06T17:12:15.110 回答