除了基本的 .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 类型库)。
我对所有这些是什么以及我应该使用或不使用哪些感到有些困惑!
他们都是为了什么?我的意思是,它们之间有什么区别,或者我为什么要使用其中一个?(也许有一个来源在某处简洁地解释了差异或一般用例?)。