In Test Script Builder, look for the samples in folders labeled with 2600 such as KE26XXB_Example_Scripts.
In your post, you are attempting to use commands related to different products/different model numbers which have different command set from what the 2602B understands.
Here is some Python code for use with 2600B to carry out a voltage sweep and measure current.
import pyvisa as visa
import time
import sys
import numpy as np
import matplotlib.pyplot as plt
resource_mgr = visa.ResourceManager()
try:
#get a session/handle for one resource
#change the instrument_resource_string for YOUR INSTRUMENT
#instrument_resource_string = "USB0::0x05E6::0x2602::4566591::INSTR"
instrument_resource_string = "USB0::0x05E6::0x2636::4597212::INSTR"
#instrument_resource_string = "TCPIP0::192.168.1.208::INSTR"
my_instr = resource_mgr.open_resource(instrument_resource_string)
except visa.VisaIOError as e:
#did not connect.....
print("Whoops, something went wrong")
#print(e.args)
#print(resource_mgr.last_status)
print(resource_mgr.visalib.last_status)
sys.exit(1)
# set some parameters for our session
my_instr.timeout = 25000 #timeout in msec
#my_instr.write_termination = '\n'
my_instr.VI_ATTR_TCPIP_KEEPALIVE = True
my_instr.write("*IDN?\n")
print("*****")
print(my_instr.read())
# set commands to setup a trigger model linear sweep
num_sweep_pts = 151
cmd_list = ["reset()",
"errorqueue.clear()",
"smua.source.func = smua.OUTPUT_DCVOLTS",
"smua.source.limiti = 100e-3",
"smua.source.rangev = 2",
"smua.measure.nplc = 1",
"smua.measure.delay = smua.DELAY_AUTO",
"smua.measure.delayfactor = 1.0",
"smua.measure.lowrangei = 100e-9",
"smua.nvbuffer1.clear()",
"smua.nvbuffer1.collecttimestamps = 1",
"smua.nvbuffer2.clear()",
"smua.nvbuffer2.collecttimestamps = 1",
"smua.trigger.source.linearv(-1.0, 1.0, " + str(num_sweep_pts) + ")",
"smua.trigger.source.limiti = 0.1",
"smua.trigger.measure.action = smua.ENABLE",
"smua.trigger.measure.iv(smua.nvbuffer1, smua.nvbuffer2)",
"smua.trigger.endpulse.action = smua.SOURCE_HOLD",
"smua.trigger.endsweep.action = smua.SOURCE_IDLE",
"smua.trigger.count = " + str(num_sweep_pts),
"smua.trigger.source.action = smua.ENABLE"]
for cmd in cmd_list:
my_instr.write(cmd)
#commands to configure SRQ when SWEEPING bit goes 1 to 0 = sweep is finished
# see Chapter 12 in 2600B Reference Manual
cmd_list2 = ["status.reset()",
"status.operation.enable = status.operation.SWEEPING",
"status.operation.sweeping.enable = status.operation.sweeping.SMUA",
"status.operation.sweeping.ptr = 0",
"status.operation.sweeping.ntr = status.operation.sweeping.SMUA",
"status.request_enable = status.OSB"]
for cmd in cmd_list2:
my_instr.write(cmd)
#turn output on and run the sweep
my_instr.write("smua.source.output = smua.OUTPUT_ON")
t1 = time.perf_counter()
# important to read stb once before starting trigger model
print("First status byte polling value: " + str(int(my_instr.read_stb())))
#start the trigger model operation
my_instr.write("smua.trigger.initiate()")
# ********************************************
# setup a polling loop to detect Sweep is finished
#repeat until the MSS (SRQ) bit is set
still_running = True
status_byte = 0
debug = 1
# attempts to my_instr.query("print(status.condition)") will be blocked by active trigger model task
# instead use my_instr.read_stb() to obtain status.condition register
while still_running:
status_byte = int(my_instr.read_stb()) #read status byte (status.condition register)
if debug: print(str(status_byte) + ' - ' + str(bin(status_byte)))
if (status_byte & 64) == 64:
still_running = False
time.sleep(0.25) #250msec pause before asking again
#turn output off
my_instr.write("smua.source.output = smua.OUTPUT_OFF")
t2 = time.perf_counter()
print('Test time: {}'.format(t2 - t1))
print("Number of actual smua buffer pts: " + str(my_instr.query('print(smua.nvbuffer1.n)')))
print("Polling loop done, status byte: " + str(int(my_instr.read_stb())))
print('Go get the data.')
# retrieve data and graph it
#ask for voltage and current; buffer2=voltage
my_instr.write("printbuffer(1, smua.nvbuffer1.n, smua.nvbuffer2.readings,smua.nvbuffer1.readings)")
raw_data = my_instr.read() #one long comma delimited string
print("After data downloaded, status byte: " + str(int(my_instr.read_stb())))
my_instr.write("status.reset()")
print("Post reset, status byte value: " + str(int(my_instr.read_stb())))
# split yields an array of strings alternating voltage, current, voltage, current
raw_data_array = raw_data.split(",")
volts = []
current = []
abs_current = []
# step through the array of strings, step size 2
# place the V and I into their own array of floats
for i in range(0, len(raw_data_array),2):
volts.append(float(raw_data_array[i]))
current.append(float(raw_data_array[i+1]))
abs_current.append(abs(float(raw_data_array[i+1]))) #absolute value of currents for log scale
#plot the absolute value of current vs. voltage
plt.plot(volts, abs_current, 'o-g')
x_min = min(volts) * 1.1
x_max = max(volts) * 1.1
y_min = abs(min(abs_current)) / 10
y_max = abs(max(abs_current)) * 10
plt.axis([x_min,x_max,y_min,y_max])
plt.yscale('log')
plt.xscale('linear')
plt.title('Sweep V, Measure I, 1MOhm')
plt.margins(x=0.1, y=0.1)
plt.grid(True)
plt.show()
save_image = 0
if save_image:
plt.savefig('alc_plot.png')