0

我正在尝试从我的 Unisource 4100 GPIB DMM 读取电压测量值。我知道我可以连接到设备,因为我使用命令“*RST”和“*IDN?”得到了适当的响应,但是我无法使用“SYST:ERR?”等其他命令得到任何响应 或“CONF:VOLT:DC 1000, 0.001”。我已经在 Agilent 34410A 上测试了我正在尝试使用的代码,并设法获得了我想要的响应,但在 Unisource 4100 上却没有。我正在使用 NI GPIB-USB-HS 控制器进行交互。我已经包含了下面的代码。SCPI 命令是否应该不适用于所有 GPIB 接口?我必须做出哪些改变才能引起 Unisource 4100 的响应?

我已经包含了一些代码供参考:

using System;
using System.Collections.Generic;
using System.Threading;
using System.Text;
using Ivi.Visa.Interop;


namespace CsharpExample
{
    class VoltageExample
    {

    static void Main(string[] args)
    {

        VoltageExample DmmClass = new VoltageExample(); //Create an instance of this class so we can call functions from Main


            Ivi.Visa.Interop.ResourceManager rm = new Ivi.Visa.Interop.ResourceManager(); //Open up a new resource manager
            Ivi.Visa.Interop.FormattedIO488 myDmm = new Ivi.Visa.Interop.FormattedIO488(); //Open a new Formatted IO 488 session 

        try
        {
            string DutAddr = "GPIB0::12::INSTR"; //String for GPIB

            myDmm.IO = (IMessage)rm.Open(DutAddr, AccessMode.NO_LOCK, 10000, ""); //Open up a handle to the DMM with a 2 second timeout
            //myDmm.IO.Timeout = 20000;


            myDmm.IO.Clear(); //Send a device clear first
            myDmm.WriteString("*RST", true); //Reset the device
            myDmm.WriteString("*IDN?", true); //Get the IDN string                
            string IDN = myDmm.ReadString();
            Console.WriteLine(IDN); //report the DMM's identity

            myDmm.WriteString("*TST?", true); //Get the IDN string 
            Thread.Sleep(5000);             
            string TST = myDmm.ReadString();
            Console.WriteLine(TST); //report the DMM's identity

            myDmm.WriteString("SYST:ERR?", true); //Get the IDN string    
            string ERR = myDmm.ReadString();
            Console.WriteLine(ERR); //report the DMM's identity

            myDmm.WriteString("CONF:VOLT:DC 1000, 0.001", true);
            DateTime time = DateTime.Now;  //Timer to measure the time difference to get all the readings
            TimeSpan diff;
            Console.WriteLine("Measurement in Volts");
            for(int i = 0; i<10; i++){
                //Configure for DCV 100V range, 100uV resolution
                myDmm.WriteString("READ?", true);
                String DCVResult = myDmm.ReadString();
                Console.WriteLine("DCV Reading = " + DCVResult); //report the DCV reading
                DmmClass.CheckDMMError(myDmm); //Check if the DMM has any errors
                Thread.Sleep(1000);
                diff = DateTime.Now.Subtract(time);
                //diff = DateTime.Now.Subtract(time.AddSeconds(1).AddMilliseconds(20));
                Console.WriteLine("\t\t\t" + diff);
            }

            myDmm.WriteString("CONF:RES 100, MAX", true);
            Console.WriteLine("Measurement in Ohms");
            for (int i = 0; i < 10; i++)
            {

                //Configure for res 1000 Ohm range, 100uV resolution
                myDmm.WriteString("READ?", true);
                String OHMResult = myDmm.ReadString();
                Console.WriteLine("Resistance Measurement = " + OHMResult); //report the DCV reading
                DmmClass.CheckDMMError(myDmm); //Check if the DMM has any errors
                Thread.Sleep(500);
            }


        }
        catch (Exception e)
        {
            Console.WriteLine("Error occured: " + e.Message);
        }
        finally
        {
            //Close out your resources
            try { myDmm.IO.Close(); }
            catch{}
            try{ System.Runtime.InteropServices.Marshal.ReleaseComObject(myDmm);}
            catch {}
            try{
            System.Runtime.InteropServices.Marshal.ReleaseComObject(rm);
            }
            catch {}
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

        }

    }
4

0 回答 0