我对除基础 .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)。我对这些东西感到有些困惑,不知道该使用哪一个或不使用哪一个!它们都是干什么的?我的意思是,它们之间有何区别或为什么我应该使用一个而不是另一个?(也许有一个简洁解释它们之间的差异或一般用例的来源?)