05-25-2010 02:07 AM
Hi sund002,
Please, can you better specify the question?
Are you starting the measurement from the front panel of the instrument or remotely using the GPIB and some program?
In
case of controling the instrument remotely, what language do you use to
create the test script - C, VB, LabView...?
Ivan
05-25-2010 04:01 AM
05-25-2010 07:36 AM
Hi Sund0002,
Test Script Builder is an application developed and supported by Keithley, however if you search for it you can find tutorials on how to create scripts with TSB to control instruments. (See this tutorial for instance: https://admin.acrobat.com/_a16893448/p47921631)
If you have further questions on the Test Script Builder, I recommend contacting Keithley, I am sure they will be happy to help you as well.
Regards,
Barna D.
National Instruments.
12-30-2010 06:19 AM
Hi all,
I want to use two SMUs in Keithley 2602 to measure FET. I use channel I as a Voltage Pulse source and channel B as Voltage DC source. I wonder how to store the Current of two channel at the same time on its buffer?
Thanks in advance.
01-03-2011 08:45 AM
Hi Daitruong,
Unfortunately this question is more question to Keithley then to NI but anyway I will try to help You. As far I know 2602 can communicate with computer via GPIB/HPIB. So one way of programming is to use LabVIEW for that and communicate with 2602 based on VISA commands. The way of programming 2602 is based on sending previously prepared script to device. I see for now two possible ways how to solve Your issue:
1. Try to prepare script in the way to measure channel A and save to buffer then immediately measure channel B and save to buffer. Later, You can read data from buffers and send it to LabVIEW. Here the problem is whether it is possible to do that in reasonable time by Keithley 2602 - You may try to contact Keithley and ask about that.
2. You may also try to perform measurement on channel A and send back to LabVIEW then perform measurement on channel B and send back to LabVIEW. Here the limitation might be that the LabVIEW working on Windows might be not fully deterministic and when there will be some unexpected CPU load then the readings might be postponed (this method is called software timed).
Anyway in order to fully understand Your problem I would like to ask You what exactly application shall do and what are the time limits for that? Maybe the time delay in both above cases (range of couple of ms) might be fine for You.
Thanks!
Best Regards,
Wojciech Sommer.
Applications Engineer
National Instruments
03-15-2012 05:21 PM
I don't know if this well help anyone but I use a Keithley 2401 and for some reason the remote command to turn on the output has to be the first command no matter what before any other function will work. then I can perform sweeps, etc... as expected.
12-18-2013 12:56 PM
Hello,
I am new to TSB scripting and I have problem on re-coding TSB script to work in LabVIEW VISA environment especially with function command in script. I couldn't find best tutorial on the re-coding TSB script into LabVIEW.
I have 2x 2651 A keithley instruments and I have TSB program. I tried to use one example file: KE2651A_Fast ADC Usage.tsp and copy/paste the code into LabVIEW VISA write string. I did different approaches and failed to generate the data as I can do with TSB that can easily generate data. I try to get LabVIEW VISA environment to generate data just like TSB could but I got various errors with some approaches and also sometimes got no errors but unable to get any data.. Also, for loop from script seems is also a problem that LabVIEW complained about..
I would appreciate any help. Once I learn how to translate any TSB scripts into LabVIEW then rest should be easy..
Thanks!
I'll copy/paste one *.tsp code example here.
--[[
Title: Fast ADC Usage
Description: This script is designed to output pulses and
capture both the current and the voltage of the pulse using
the fast ADC of the Model 2651A High Power System SourceMeter
instrument.
Equipment Needed:
1x 2651A
]]
--[[
Name: CapturePulseV(pulseLevel, pulseWidth, pulseLimit,
numPulses)
Description:
This function outputs voltage pulses with a 1% duty cycle and
performs measurements using the fast ADC to capture each pulse in
its entirety. At the conclusion of the pulse train, the data is
returned to the instrument console in a Microsoft Excel
compatible format.
Parameters:
pulseLevel: The voltage level of the pulse in volts
pulseWidth: The width of the pulse in seconds
100e-6 <= pulseWidth <= 4e-3
pulseLimit: The current limit of the pulse in amps
numPulses: The number of pulses to output
Example Usage:
CapturePulseV(5, 300e-6, 50, 5)
]]
function CapturePulseV(pulseLevel, pulseWidth, pulseLimit, numPulses)
if (numPulses == nil) then numPulses = 1 end
-- Configure the SMU
reset()
smua.reset()
smua.source.func = smua.OUTPUT_DCVOLTS
smua.sense = smua.SENSE_REMOTE
smua.source.rangev = pulseLevel
smua.source.levelv = 0 -- The bias level
smua.source.limiti = 5 -- The DC Limit
smua.measure.autozero = smua.AUTOZERO_ONCE
-- Use a measure range that is as large as the biggest
-- possible pulse
smua.measure.rangei = pulseLimit
smua.measure.rangev = pulseLevel
-- Select the fast ADC for measurements
smua.measure.adc = smua.ADC_FAST
-- Set the time between measurements. 1us is the smallest
smua.measure.interval = 1e-6
-- Set the measure count to be 1.25 times the width of the pulse
-- to ensure we capture the entire pulse plus falling edge.
smua.measure.count =
(pulseWidth / smua.measure.interval) * 1.25
-- Prepare the reading buffers
smua.nvbuffer1.clear()
smua.nvbuffer1.collecttimestamps = 1
smua.nvbuffer1.collectsourcevalues = 0
smua.nvbuffer2.clear()
smua.nvbuffer2.collecttimestamps = 1
smua.nvbuffer2.collectsourcevalues = 0
-- Can't use source values with async measurements
-- Configure the Pulsed Sweep setup
-----------------------------------
-- Timer 1 controls the pulse period
trigger.timer[1].count = numPulses - 1
-- -- 1% Duty Cycle
trigger.timer[1].delay = pulseWidth / 0.01
trigger.timer[1].passthrough = true
trigger.timer[1].stimulus = smua.trigger.ARMED_EVENT_ID
-- Timer 2 controls the pulse width
trigger.timer[2].count = 1
trigger.timer[2].delay = pulseWidth - 3e-6
trigger.timer[2].passthrough = false
trigger.timer[2].stimulus =
smua.trigger.SOURCE_COMPLETE_EVENT_ID
-- Configure SMU Trigger Model for Sweep/Pulse Output
-----------------------------------------------------
-- Pulses will all be the same level so set start and stop to
-- the same value and the number of points in the sweep to 2
smua.trigger.source.linearv(pulseLevel, pulseLevel, 2)
smua.trigger.source.limiti = pulseLimit
smua.trigger.measure.action = smua.ASYNC
-- We want to start the measurements before the source action takes
-- place so we must configure the ADC to operate asynchronously of
-- the rest of the SMU trigger model actions
-- Measure I and V during the pulse
smua.trigger.measure.iv(smua.nvbuffer1, smua.nvbuffer2)
-- Return the output to the bias level at the end of the pulse/sweep
smua.trigger.endpulse.action = smua.SOURCE_IDLE
smua.trigger.endsweep.action = smua.SOURCE_IDLE
smua.trigger.count = numPulses
smua.trigger.arm.stimulus = 0
smua.trigger.source.stimulus = trigger.timer[1].EVENT_ID
smua.trigger.measure.stimulus = trigger.timer[1].EVENT_ID
smua.trigger.endpulse.stimulus = trigger.timer[2].EVENT_ID
smua.trigger.source.action = smua.ENABLE
smua.source.output = 1
smua.trigger.initiate()
waitcomplete()
smua.source.output = 0
PrintPulseData()
end
function PrintPulseData()
print("Timestamp\tVoltage\tCurrent")
for i=1, smua.nvbuffer1.n do
print(string.format("%g\t%g\t%g",
smua.nvbuffer1.timestamps[i],
smua.nvbuffer2[i],
smua.nvbuffer1[i]))
end
end