【问题标题】:C# Visual Studio GPIB CommandsC# Visual Studio GPIB 命令
【发布时间】:2012-06-27 18:05:41
【问题描述】:

您使用什么命令与 C#、Visual Studio 中的 GPIB 仪器对话? 我需要能够向仪器写入命令并读取输出。

【问题讨论】:

    标签: c# gpib


    【解决方案1】:

    我使用Agilent IO Library Suite

    这是在 C# 上使用它的教程:I/O programming examples in C#

    尽管如此,在我的公司,我们的 VISA-COM 实现存在稳定性问题,因此我们使用 P/Invoke 围绕 visa32.dll(也是 IO 库套件的一部分)编写了自己的包装器。

    (披露:我在一家大量使用 GPIB 仪器的公司工作)

    【讨论】:

      【解决方案2】:

      我正在使用National Instruments VISANI 488.2

      首先确保你在NI-VISA设置中勾选了VisaNS.NET API,见下图:

      在您的项目中添加对NationalInstruments.VisaNSNationalInstruments.Common 的引用。

      创建MessageBasedSession,见以下代码:

      string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
      var visa = new NationalInstruments.VisaNS.MessageBasedSession(resourceName);
      visa.Write("*IDN?"); // write to instrument
      string res = visa.ReadString(); // read from instrument
      

      MessageBasedSession 可用于通过 GPIB、以太网或 USB 与您的仪器通信。

      更新

      Ivi.Visa 取代 NationalInstruments.VisaNS。所以你应该在你的项目中添加一个只对Ivi.Visa的引用。

      示例如下所示:

      string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
      var visa = GlobalResourceManager.Open(resourceName) as IMessageBasedSession;
      visa.RawIO.Write("*IDN?\n"); // write to instrument
      string res = visa.RawIO.ReadString(); // read from instrument
      

      使用Ivi.Visa 的好处是它可以与以下库之一一起使用:

      【讨论】:

        【解决方案3】:

        从串口发送命令。

        请参阅 Microsoft 的 COM Port Example

        【讨论】:

          【解决方案4】:

          您应该首先创建一个具有 LangInt 类的对象。然后将该对象与 GPIB 方法一起使用。 最常用和最常用的是(假设您创建了一个名为“dev”的对象);

          dev.ibwrt(deviceHandle, "*IDN?", "*IDN?".Length);
          
          dev.ibrd(deviceHandle, out Value, Arraysize);
          

          这两个可以查询设备。或者您可以连续使用它们,例如设置发生器的频率,然后是幅度。

          重要的部分是在发送 SCPI 命令之前;您必须先初始化设备。为此使用;

          deviceHandle = ibdev(GPIBINDEX, GPIBADDRESS, SECONDARYADDRESS, TIMEOUT, EOTMODE, EOSMODE);
          

          这些参数必须首先在代码中声明。初始化后,您可以将每个 GPIB 命令与该设备句柄一起使用。

          当然,您应该将 NationalInstruments.NI4882 和 LangInt.dll 添加到您的项目中。

          【讨论】:

            【解决方案5】:

            您可以使用 NI Visa。 如果您使用的是 Vb 或 C#,请使用示例程序磁盘中的 Visa32.bas 或 Visa32.cs

            int DefaultSessionId= 0;
            int SessionId= 0;
            int LastStatus = 0;
            string Address = "GPIB0::6" ; //any address
            
            //Session Open
            LastStatus = visa32.viOpenDefaultRM(out DefaultSessionId);
            
            //Connection Open
            LastStatus = visa32.viOpen(DefaultSessionId, Address + "::INSTR", 0, 0, out sessionId);
            LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR, 13);// Set the termination character to carriage return (i.e., 13);
            LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR_EN, 1);// Set the flag to terminate when receiving a termination character
            LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TMO_VALUE, 2000);// Set timeout in milliseconds; set the timeout for your requirements
            
            //Communication
            LastStatus = visa32.viPrintf(SessionId, command + "\n");//device specific commands to write
            StringBuilder message = new StringBuilder(2048);
            LastStatus = visa32.viScanf(SessionId, "%2048t", message);//Readback
            
            //Session and Connection Close
            visa32.viClose(SessionId);
            visa32.viClose(DefaultSessionId);
            

            Reference

            【讨论】:

              猜你喜欢
              • 2017-05-16
              • 1970-01-01
              • 1970-01-01
              • 2014-10-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-08
              相关资源
              最近更新 更多