-
Hello Lars,<br>
<br>
See if the attached document helps.<br>
<br>
 
-
At subsite level in the project, go to subsite setup and enable Cycle Mode.<br>
Then if you highlight the subsite when clicking the Run button, all enabled tests under that level will be executed once per cycle.  The data will appear at each test but rather than Append2, Append3, etc.  They will be cycle1, cycle2, etc.<br>
<br>
How to also have some pause for 10 minutes for each cycle?<br>
Do you have the compiler a the KULT tool is functional on your 4200?<br>
If yes, you could make a simple routine that waits for the desired duration before returning control back to KITE for the cycles to continue.<br>
<br>
NOTE:  on the new 4200A-SCS, the compiler is always there.  Older 4200-SCS, depending on vintage, needed it installed as an option.  Open the KULT tool from desktop icon and see if it complains or not.
-
Hello Lars,<br>
<br>
Are you saying it is not working for you?  Or you just want to better understand it.<br>
<br>
I ran just the TSP portion from Test Script Builder, and I am seeing the SRQ annunciator on the front panel.  So I conclude the Python status byte polling loop should be OK.<br>
<br>
Each of your functions that perform a scan, also make use of waitcomplete().  This will cause the code execution to stall there until the scan finishes.  This seems fine.<br>
<br>
If you want the SRQ notification on operation complete, the opc bit in status.standard register set "feeds" the ESB bit in the status byte.<br>
<br>
I would make minor chance to your code and instead use these lines to configure the status subsytem:<br>
status.request_enable = 32   -- enable SRQ on ESB<br>
status.standard.enable = 1   -- OPC bit in this register feeds the ESB bit<br>
<br>
The last thing your TSP script does is call opc();  when that is able to report complete, the ESB bit will go to logic 1 and the SRQ will go logic 1.<br>
The value of the status byte will be 96 or bit pattern 01100000 (in TSP use print(status.condition) to see value of status byte).<br>
<br>
 
-
Hi Howard,<br>
<br>
I've attempted to duplicate, but not seeing any issue yet.<br>
I've used the Burst mode and sourcing an ARB defined series of pulses.  Also used Burst mode and Pulse from the Basic mode.<br>
For me, on the scope capture, the first burst of pulses after turning the output on has the expected number of pulses.<br>
<br>
If just a single burst is desired upon a software command, you can config the AFG for External trigger source and send *TRG command to satisfy the external trigger.<br>
<br>
Looks like we will need a little more information in attempt to duplicate the issue.<br>
<br>
Andrea
-
The 6485 data sheet reports reading rate as fast as 1000/sec.<br>
The footnotes give the measurement settings required to get these speeds.<br>
But these outcomes would be for N measurements into the internal buffer.<br>
Transfer across the bus to PC takes more time.<br>
<br>
You seem to be wanting to transfer each reading one by one to have speedy update on your LabVIEW.<br>
This maximizes the overhead, so will be slower than the max possible of 1000/sec when streaming to internal buffer.<br>
<br>
If you can locate a voltage reading instrument with sufficiently fast reading rate, you could use that to monitor the 2V analog output from the picoammeter.  You need something that can continuously stream data to the PC.<br>
<br>
A DMM6500 could be of help.  Here is app note that details streaming using Python:<br>
https://www.tek.com/en/documents/application-note/data-logging-power-profiles-wireless-iot-and-other-low-power-devices<br>
<br>
Here is a note on evaluating the speed of 6485 analog output to step changes of current.  This is just to illustrate the usefulness of the AO:<br>
https://www.tek.com/en/documents/application-note/how-fast-can-i-make-measurements-picoammeter<br>
<br>
 
-
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">If I understand, you want to sweep or source a series of voltage values but do it from a Loop on the PC side where you send a command for each source level.</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">And if also obtaining measurements, from your loop you are also sending commands to cause a current measurement to occur.</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">You will have overhead and possibly some timing variation by the loop-based approach.</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">Using TSP command set and Python, I have this code that does the loop and obtains a measurement.</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">The measurements are sent to PC at the end (one bus transfer).</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">Duration at each source level is about 900usec. Scope shot image uploaded.</span></span></span><br>
<br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">If I instead send each measurement one by one, the duration increases to about 3.6msec; I have set the integration rate to fastest and turned off autozero.</span></span></span><br>
<br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">If you know source values ahead of time and can load them into a Source Config List, you can get faster operations.</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">From datasheet for 2450, you can approach 1700 Hz Source-Measure rate at 0.01 NPLC.</span></span></span><br>
<span style="font-size:11pt;"><span style="line-height:107%;"><span style="font-family:Calibri,sans-serif;">Look at the System Measurement Speeds table in datasheet (pg 10).</span></span></span>
<pre class="linenums prettyprint">my_instr.write("reset()")
my_instr.write("status.clear()")
my_instr.write("errorqueue.clear()")
MEAS_RANGE = 100e-3
cmd_list = ["smu.source.func = smu.FUNC_DC_VOLTAGE",
            "smu.source.autorange = smu.OFF",
            "smu.source.range = 20",
            "smu.source.ilimit.level = " + str(MEAS_RANGE),
            "smu.source.delay = 0",
            "smu.source.autodelay = smu.OFF",
            "smu.source.readback = smu.OFF",
            "smu.measure.func = smu.FUNC_DC_CURRENT",
            "smu.measure.autorange = smu.OFF",
            "smu.measure.range = " + str(MEAS_RANGE),
            "smu.measure.nplc = 0.01",
            "smu.measure.autozero.enable = smu.OFF"
            ]
    
for cmd in cmd_list:
    my_instr.write(cmd)
    
    
#lets loop thru some source levels and measure speed with scope
debug = 1
voltage_list = {}
for i in range(0, 11):
    voltage_list[i] = i/10
print(voltage_list)    
    
my_instr.write("smu.source.output = smu.ON")
for j in range(0,1):
    for i in range( 0 ,len(voltage_list)):
        my_instr.write("smu.source.level = " + str(voltage_list[i]))
        my_instr.write("smu.measure.read()")   #obtain a reading into the buffer
        #print(my_instr.query("print(smu.measure.read())"))  # this will slow you down!
        
           
#all done, turn output off
my_instr.write("smu.source.level = 0")
my_instr.write("smu.source.output = smu.OFF")
#bring the data back from the buffer
print(my_instr.query("printbuffer(1, defbuffer1.n, defbuffer1.readings)"))
</pre>
-
The 2600-PCT-2B contains two SourceMeter models:  2651A and 2636B. Many (not all) of the specs you seek will be in the datasheet for the individual SMUs. I encourage you to contact your closest sales office and discuss your application and concerns.
-
Is the sample in any sort of shielded test fixture?<br>
<br>
Double check your connections.  Are you making use of meter-connect to connect LO of Amps meter to the LO of the V-Source?<br>
<br>
When was your electrometer last calibrated? Perhaps try with an axial leaded high ohms device as practice and to raise confidence in function of the instrument.<br>
<br>
There are many instructional videos on the 6517B web page.<br>
Try this one:  https://www.tek.com/en/video/how-to/how-to-make-a-resistance-measurement-using-the-model-6517b-electrometer-with-auto-and-manual-modes
-
Check out this application note pertaining to our 4200A-SCS and 1/f noise measurements:<br>
<a href="https://www.tek.com/en/documents/application-note/flicker-noise-measurements-using-the-4200a-scs-parameter-analyzer">1/F Noise Measurement with 4200A-SCS</a>
-
Here is some Python code that might more in line with what you are trying to do.<br>
I will upload an image of the outputs I get.  I have been feeding a 500Hz sine wave to the DMM7510.
<pre class="linenums prettyprint">debug = 1
NUM_SAMPLES = 100
my_instr.write('*RST')
my_instr.write(':TRACe:MAKE "voltDigBuffer",' + str(NUM_SAMPLES))
my_instr.write(':DIG:FUNC "VOLTage"')
my_instr.write(':SENS:DIG:VOLT:INP AUTO')
my_instr.write(':SENS:DIG:VOLT:RANG 10')
my_instr.write(':SENS:DIG:VOLT:SRATE 5000')   #5KHz sample rate
my_instr.write(':SENS:DIG:VOLT:APER AUTO')
my_instr.write(':SENS:DIG:COUN ' + str(NUM_SAMPLES))
my_instr.write(':TRAC:POIN ' + str(NUM_SAMPLES))
my_instr.write(':TRAC:CLE')
my_instr.write(':TRAC:TRIG:DIG "voltDigBuffer"')
# wait for done before asking for the data
time.sleep(1)  #pause before asking for data
if debug == 1:
    my_instr.write(':TRAC:DATA? 95, 100, "voltDigBuffer", REL, READ')
    print("****** response to last five points query *************")
    print(my_instr.read())
#split, parse, etc.
"""
raw_data will be comma delimted string of 
timestamp, reading, timestamp, reading,... etc.
"""
#ask for all the data
#TODO:  adjust for NUM_SAMPLES
raw_data = my_instr.query(':TRAC:DATA? 1, 100, "voltDigBuffer", REL, READ')
raw_data_array = raw_data.split(',')
timestamps = []
Digitized_V = []
# use step of 2 because there are two elements per reading
for i in range(0, len(raw_data_array), 2):
    if len(raw_data_array[i]) > 0:
        timestamps.append(float(raw_data_array[i]))
        Digitized_V.append(float(raw_data_array[i+1]))
if debug == 1:
    print("******* Timestamps *******************")        
    print(timestamps)
    print("******** Voltage ******************")
    print(Digitized_V)
    print("**************************")
    print()
#graph it
plt.autoscale(True, True, True)
#plt.axis([0, 0.2, 0, 50e-6])
plt.plot(timestamps, Digitized_V, 'c--')
plt.show()
</pre>