-
RE: Error With Outputting Data Values for Pulse Mode Remote Programming
I found out the error. For the pulse mode, it was necessary to input a time delay between the SENS:DATA and TRAC:DATA? commands (not too long, 0.05 seconds was enough).<br> Specifically, I inserted the command <code>time.sleep(0.05) </code>between lines 49 and 51.<br> I hope this helps anyone else with the same problem. -
Error With Outputting Data Values for Pulse Mode Remote Programming
I have a Keithley 6221 and 2182A current source and nanovoltmeter set up and connected to eachother (which are both connected to a sample). I wrote code to remote program and output data values for the Delta mode to a CSV file. This works fine.
However, when I try to adapt the code for the pulse delta mode, I run into issues. The 6221 outputs "invalid header" and "parameter out of range" and "init ignored" errors, and otherwise outputs no data at all. I believe the 'TRAC:POIN ' command is part of the error, since when I comment out that line of code some of the errors disappear. When I change the number of points in the buffer (to 2 or 10 for example) and run the code, I don't receive any data output. I am trying to read just 1 value for testing purposes, which is why I usually set the number of points in the buffer to 1 ('TRAC:POIN 1'). It seems as if nothing is being read by the machine. I am confused, as this does not happen when I run the delta mode measurement. I adjusted the code by adding the appropriate 'PDEL ' in the code instead of 'DEL', along with one or two commands to adjust the source delay and high current. I believe everything before line 31 (#setup6221Delta) which initializes the 2182A and a few other things should be fine, as I start changing things after that. Additionally, the machine physically seems to output the correct values on its screen, as they match the values that are shown when I perform the test locally, but the data does not seem to output. Are there other modifications that I should be making to the code?
If anyone has any suggestions or advice, I would greatly appreciate it. I have posted my code below. I use Spyder and python.
Please let me know if you have any questions or need clarity.
Thank you very much in advance.
import pyvisa as visa import csv import time from lakeshore import Model335 from lakeshore.model_335 import * import numpy as np import logging as log rm = visa.ResourceManager('@py') my_instrument = rm.open_resource('GPIB0::16::INSTR') my_instrument.write('*RST') #restores 6221 defaults my_instrument.write("TRAC:CLE") my_instrument.write('SYST:COMM:SER:SEND "REN"') #setup2182A voltrange = 0.01 log.info("Setting up 2182A measurement range and integration rate") my_instrument.write('SYST:COMM:SER:SEND "VOLT:RANG %f"' % voltrange) #sets 2V range for 2182a log.info("Voltage range has been set to %f V" % voltrange) rate = 1 my_instrument.write('SYST:COMM:SER:SEND "VOLT:NPLC %f"' % rate) #Set rate to 1PLC for 2182a log.info("VIntegration rate has been set to %f V" % rate) #setup6221Delta log.info("Beginning sequence to set up, arm, and run Delta") my_instrument.write('*RST') #restores 6221 defaults my_instrument.write('SOUR:PDEL:HIGH 10e-6') #sets high source value my_instrument.write("SOUR:PDEL:SDEL 5.6e-5") #sets delta delay my_instrument.write('SOUR:PDEL:COUN 1') #Sets Delta count #my_instrument.write('SOUR:DELT:CAB ON') #Enables compliance abort my_instrument.write('TRAC:POIN 10') #sets buffer log.info('Set up completed') my_instrument.write('SOUR:PDEL:ARM') #Arms Delta while (x < 1) my_instrument.write('INIT:IMM') #starts delta measurements log.info('Delta measurements have started') #readings my_instrument.query('SENS:DATA?') temp = str(my_instrument.query('TRAC:DATA?')) var = temp.replace('+', '') print(var) var2 = var.split(',')[0] print(var2) x = x + 0.1 values = [round(timevalue+(end-starttime),2), var2] #adding the time value increment to the time elapsed since code started with open('testpulsepulsetest.csv', mode = 'a', newline='') as f: writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer.writerow(values) time.sleep(0.05) timevalue = timevalue + 0.05 #finished #reset my_instrument.write('*RST') #restores 6221 defaults my_instrument.write("TRAC:CLE")