1

我正在尝试通过 SCPI 与 C# 中的一些测试设备进行通信。通过使用此代码示例,我设法与一台通过 TCP/IP 连接的设备进行通信。

但是,我的其他设备是通过 USB 连接的,我还没有找到如何通过 USB 与它们通信。

顺便说一句,我找到了这个问题,以及C# 文档中 IVI-COM 编程示例的答案的链接,但我无法应用代码示例(例如在第 5.4 节中),因为我找到了所有 IVI 和 VISA COM 库(例如 VisaComLib 5.5)里面只有接口和枚举,没有我可以使用的具体类......

4

2 回答 2

1

如果您从 NationalInstruments 或 Keysight 安装签证驱动程序,它们会实现类:

来自 NI 的那个:

  1. 格式化IO488类
  2. 资源管理器类
  3. VisaConflictTableManager类

要获得连接,您只需要 1 和 2

一旦您尝试嵌入互操作类型,您需要删除“类”后缀,如此处所述

这是来自是德科技的示例片段(应用说明:5989-6338EN)

Ivi.Visa.Interop.ResourceManager rm = new Ivi.Visa.Interop.ResourceManager();
Ivi.Visa.Interop.FormattedIO488 ioobj = new Ivi.Visa.Interop.FormattedIO488();

try
{

    object[] idnItems;

    ioobj.IO = (Ivi.Visa.Interop.IMessage)rm.Open("GPIB2::10::INSTR",
    Ivi.Visa.Interop.AccessMode.NO_LOCK, 0, "");

    ioobj.WriteString("*IDN ?", true);

    idnItems = (object[])ioobj.ReadList(Ivi.Visa.Interop.IEEEASCIIType.ASCIIType_Any, ",");

    foreach(object idnItem in idnItems)
    {
        System.Console.Out.WriteLine("IDN Item of type " + idnItem.GetType().ToString());
        System.Console.Out.WriteLine("\tValue of item is " + idnItem.ToString());
    }

}
catch(Exception e)
{
    System.Console.Out.WriteLine("An error occurred: " + e.Message);
}
finally
{

    try { ioobj.IO.Close(); }
    catch { }

    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ioobj);
    }
    catch { }

    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(rm);
    }
    catch { }
}
于 2017-01-11T16:32:49.443 回答
0

我正在使用National Instruments VISA

添加对您的项目的NationalInstruments.VisaNS引用NationalInstruments.Common

创建一个MessageBasedSession,见以下代码:

string resourceName = "USB0::0x0957::0x0118::US56070667::INSTR"; // See NI MAX for resource name
var visa = new NationalInstruments.VisaNS.MessageBasedSession(resourceName);
visa.Write("*IDN?"); // write to instrument
string res = visa.ReadString(); // read from instrument

另请参阅https://stackoverflow.com/a/49388678/7556646

于 2018-03-20T16:01:31.200 回答