除了基本的.NET项目外,我对其他任何事物都还算陌生,但是我目前正在尝试创建一个可与T&M仪器配合使用的测试系统,该系统可通过SCPI通过GPIB,USB等各种介质进行通信。我安装了Keysight IO库,一直在阅读其中的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();
Run Code Online (Sandbox Code Playgroud)
但是,我只是指出,虽然我以前以为在其他文档中看到的COM示例主要是指较旧的用法,但仍引用了COM示例(例如,通过USB从C#发送SCPI / GPIB命令)。
在Visual Studio参考管理器中进一步研究,我发现不仅有VISA COM类型库,还有特定于仪器的IVI程序集(例如:IVI Scope Assembly)和类似的COM类型库(例如:IviScope 3.0类型库)。
这些功能到底是什么以及我该使用或不使用这些功能,我感到有些困惑!
它们都是为了什么?我的意思是,它们之间有什么区别?或者为什么我要使用一个而不是另一个?(也许有资料来源在某处简要解释了差异或一般用例?)。
这是一些背景信息。最后,我认为我无法为您提供直接回答您问题的最新信息。
您可以从不同级别与仪器进行通信:
不同级别可能取决于较低级别组件的存在,并且可能允许您访问较低级别的特定功能。
底层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提供了共享库接口。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1437 次  |  
        
|   最近记录:  |