• RE: Simultaneous measurement on 3 nanovoltmeters using trigger link

    The model 2361 trigger controller has been obsolete for long time already.

    On the trigger link connector on 2182A, it has only trigger in and trigger out lines.

    Assuming the three meters are on GPIB bus, try to set up for BUS triggering instead of External, and then issue the GET (group execute trigger) from the GPIB card.
  • RE: Control of blackplane relays with 3706A-S

    Is this front panel manual operation or sending commands?

    Manual operation would need you to define a channel pattern that includes the backplane relay and the channel relay.  Then open or close the pattern.

    If sending commands, the channel.close() and open will accept the relay number of your backplane relay as part of the channel list.

    In the wiring to the 37xx card, take note of the +ILK and -ILK pins (on each bank if using MUX card).  Those need shorted to permit backplane relay closure.

    When the 3706A model has the internal DMM, the backplanes are typically managed for you.  For example a channel configured for 4-wire ohms vs VDC measure function will close all necessary relays when dmm.close() on that configured channel.

    If you have 3706A-S, then it is just a switch controller.
  • RE: MeasureMultiple creates an array of undefined characters in 64-bit processor.

    Hello,
    Thank you for clarifying that.
    The 2602B has only the TSP command set, so no need to worry about that setting on the instrument.
    It is very odd that the instrument reports a TSP syntax error.

    In my C# environment, I set build to x64 platform target.  It is running fine for me.
    ​​​​​​​try
                {
                    //Instantiate driver class directly
                    driver = new Ke26XXA();
    
                    VISAResource = availableResourcesListBox.SelectedItem.ToString();
    
                    string options = "QueryInstrStatus=True";
                    driver.Initialize(VISAResource, true, true, options);
    
                    label1.Text = "Successful Driver Session";
    
    
                    //driver.System.DirectIO.WriteString("reset()", true);
    
    
    
                    driver.Sweep.set_SourceChangesEnabled("A", true);
                    driver.Sweep.set_MeasurementsEnabled("A", true);
    
                    string bufferName = "MyBuf";
                    int bufSize = 11;
    
                    driver.Measurement.Buffer.Create("A", bufferName, bufSize);
    
                    driver.Sweep.Source.ConfigureVoltageLinearSweep("A", 0, 1, 11);
                    driver.Sweep.Measure.ConfigureCurrentMeasurement("A", bufferName);
    
                    // Set the sweep count
                    driver.Trigger.set_Count("A", bufSize);
                    // Set the reading count (1 pt for each sweep value)
                    driver.Measurement.set_Count("A", 1);
                    // set other measurement related paramters
                    driver.Measurement.set_NPLC("A", 1.0);
                    driver.Measurement.set_Delay("A", 0.001);
    
                    driver.Source.set_OutputEnabled("A", true);
    
                    driver.Sweep.Initiate("A");
                    driver.System.WaitForOperationComplete(10000);
    
                    double[] readings = driver.Measurement.Buffer.MeasureData.GetAllReadings(bufferName);
    
                    foreach (double reading in readings)
                    {
                        resultsListBox.Items.Add(reading.ToString("E"));
                    }
    
                    driver.Source.set_OutputEnabled("A", false);
    
                    // close the driver
                    driver.Close();
    
    
                }
                catch
                {
                    label1.Text = "Could not open driver session!!";
                }

     
  • RE: AWG31052 - Sweeping a Pulse Duty Cycle

    If I understand:  you have a waveform that is 333usec in duration (3KHz).
    Within that waveform, you want a 5V pulse from base of 0V that is 1% duty cycle (3.3usec pulse).
    Send this 15 times.
    Then increase to 2% duty cycle (6.6usec).  15 times.
    and so on until you apply a DC 5V value.

    You have 100 different waveforms to describe your 100 different duty cycle.

    There are maybe more elegant ways, but this is how I break it down logically.

    You will need to have the optional SEQ license for your AFG31052.
    Then in advanced mode, you can load up your 100 waveforms with their own repeat value.

    The source of the waveforms can be file or programmatically loaded to EMEM memory as an ARB.
    There are some sample waveforms in the Predefined or P: drive location on the instrument.
  • RE: [KXIC] Get error message from KXCI

    Is true.  At present the KXCI API has no means to read back the error detail.
    I have created an enhancement request about it.
  • RE: MeasureMultiple creates an array of undefined characters in 64-bit processor.

    Can you clarify what model number is the instrument?

    From your attached image, you are using IVI driver.  I believe the IVI driver wants the touch screen SMU models such as 2450 to be in SCPI command set.
    Your reported error about TSP Syntax tells me the instrument is in in TSP command set.  If this is touch screen model of SMU, that would be a problem.

    Do I have it correct?
  • RE: [KXIC] Get error message from KXCI

    Sounds like you are making very robust error handling in your application.

    Looks like, right now, the only way for you to know the error detail is to look at tail of the KXCILogifile.txt in the C:\S4200\sys\kxci
    In KXCI window, be sure to enable logging.
    Can your application somehow map that drive location and do some file IO?

    From the KXCI command set, you can interrogate the state of a bit in the status byte to know if an error has occurred.
    But not aware of any way to query the error detail on this API.

    Python sample for interrogating status byte:
    ​​​​​​​import time
    import pyvisa
    import socket
    
    
    def main():
        rm = pyvisa.ResourceManager()
        dev_address = "TCPIP0::192.168.1.43::1225::SOCKET"
        my_4200A = rm.open_resource(dev_address)
        my_4200A.read_termination = "\0"
        my_4200A.write_termination = "\0"
        my_4200A.timeout = 1000
    
        # No Error in *IDN?
        print("Response to *IDN?: ", my_4200A.query("*IDN?"))
        status = my_4200A.query("SP")
    
        # Check bit B1 of status byte for previous command error
        if (int(status) & 0x02) != 0:  # Check bit B1 of SP response
            print("Error Detected. Bit B1 value: ", (int(status) & 0x02))
        else:
            print("No Error Detected. Bit B1 value: ", (int(status) & 0x02))
    
        # Error in *IDN?
        print("Response to *ID?: ", my_4200A.query("*ID?"))
        status = my_4200A.query("SP")
    
        # Check bit B1 of status byte for previous command error.
        if (int(status) & 0x02) != 0:  # Check bit B1 of SP response
            print("Error Detected. Bit B1 value: ", (int(status) & 0x02))
        else:
            print("No Error Detected. Bit B1 value: ", (int(status) & 0x02))
    
        my_4200A.close()
    
    
    if __name__ == "__main__":
        main()

     
  • RE: Triggered Sweep with 2182 and 2400 configured and controlled remotely

    You should not be needing to simulate front panel button pushes this way.

    Can you clarify:  do you have a digital triggering cable between the two instruments?  I'll put some code below that assumes you do.

    And you have two COM ports on your computer and have RS-232 to each instrument?

    Here are some SCPI commands to use 2400 as current source while 2182A does delta mode measurements.
    :syst:pres ‘ 2182 - System preset defaults.
    :trig:del 1 '2182 - 1sec delay.
    :sens:volt:delta on ‘ 2182 - Enable Delta.
    :syst:faz off ‘Disable Front Autozero to double Delta speed.
    :trig:sour ext ‘ 2182 - External triggering.
    :trac:poin 3 ‘ 2182 - Buffer size 3.
    :trac:feed:cont next ‘ 2182 - Enable buffer.
    *rst ‘ SM - RST defaults.
    :trig:sour tlin ‘ SM - Select trigger link.
    :trig:dir sour ' SM - Enable source bypass.
    :trig:outp sour ‘ SM - Output trigger after source.
    :trig:coun 6 ‘ SM - Trig count 6.
    :sour:func curr ‘ SM - Source current.
    :func ‘volt’ ‘ SM - Measure voltage
    :volt:nplc 0.01 ‘ SM - Fast measurements
    :sour:list:curr 10e-6, -10e-6,20e-6, -20e-6, 50e-6, -50e-6 ‘ SM - Current list values
    :outp on ‘ SM - Turn output on.
    :sour:curr:mode list ‘ SM - Enable list mode.
    :init ‘ SM - Start sweep.
    
    
  • RE: Device characterization tests with 4200A-SCS and Lakeshore probe station

    Short answer is yes.
    But a lot of details to manage including safety interlocks, common LO,  and over voltage protection for the 4200A from the 2657A.

    Is your Lakeshore capable of the HV and the current densities of the 50Amps?  Or you will have different probe station for the new high power IV tests.

    I suggest you get in contact with your local Keithley FAE for detailed discussion and configuration.
    Are you located in Nebraska?
  • RE: How to measure Varistor Alpha with 2470?

    Check out pg 9 in this component mfg document:
    Varistor and extracting alpha - pg 9

    Or this one, figure 10 on pg 7, shows log-log graph.  The alpha is taken from 1/slope in normal operation zone between 1mA and a higher current.
    alpha of varisstor - 1/slope of log-log plot


    With 2470, it can supply 1Amp, but only at voltages up to 20V.  If your DUT need higher voltages, you'll need to settle for less current, e.g., up to 100mA with max 200V from 2470.