From 3d61cd63e421f97fe92820981894e313f195058e Mon Sep 17 00:00:00 2001
From: Alexandros Asonitis <asonitis@cst.rwth-aachen.de>
Date: Thu, 10 Apr 2025 12:04:09 +0200
Subject: [PATCH] old class removed from the release branch
---
hp4155/module.py | 325 -----------------------------------------------
1 file changed, 325 deletions(-)
delete mode 100644 hp4155/module.py
diff --git a/hp4155/module.py b/hp4155/module.py
deleted file mode 100644
index e260d54..0000000
--- a/hp4155/module.py
+++ /dev/null
@@ -1,325 +0,0 @@
-import pyvisa
-
-class HP4155a(object):
-
- def __init__(self,adress):
- self.adress = adress
- self.rm = pyvisa.ResourceManager()
- self.inst = self.rm.open_resource(adress)
- self.inst.timeout = None
- #----------------------------------------------------General functions--------------------------------------------------------------------------
- def idn(self):
- return self.inst.query("*IDN?")
-
- def __del__(self):
- self.rm.close()
-
- def reset(self):
- self.inst.write("*RST")
-#------------------------------------------------------stress functions--------------------------------------------------------------------
- #smu mode
- def smu_mode(self,smu_number,mode):
- command = f":PAGE:STR:SMU{smu_number}:MODE {mode}"
- self.inst.write(command)
-
-
- #smu constant value for stress measurement
- def smu_value(self,smu_number,value):
- command =f":PAGE:STR:SET:CONS:SMU{smu_number} {value}"
- self.inst.write(command)
-
- #set the stess time in seconds
- def stress_time(self,time):
- command = f":PAGE:STR:SET:DUR {time}"
- self.inst.write(command)
-
- #start stress operation
- def start_stress(self):
- #inst.write(":PAGE:SCONtrol:STRess[:STARt]")
- self.inst.write(":PAGE:SCON:STR")
- #inst.write("*TRG")
- #self.inst.query('*OPC?')
-
- #get data from HP4155a
- def get_data(self):
- self.inst.write(":FORM REAL")
- data = self.inst.query(":HCOPy:ITEM:ALL:DATA?")
- return data
-
- def sync(self,smu_number,s):
- if s == 0:
- mode = "NSYN"
- else:
- mode="SYNC"
- command = f":PAGE:STR:SMU{smu_number}:FUNC {mode}"
- self.inst.write(command)
-
- def single_measurement(self):
- self.inst.write(":PAGE:SCON:SING")
-
- #go to stress page
- def stress_page(self):
- self.inst.write(":PAGE:STR")
-
- def error(self):
- return self.inst.query(":SYST:ERR?")
-
- def operation_completed(self):
- text = self.inst.query('*OPC?')
- text = text.replace('\n','')
- finished = bool(text)
- return finished
-
- def show_variables(self):
- return self.inst.query(":DATA:CAT?")
-
- def comp_stress(self,smu_number,value):
- command = f":PAGE:STR:SET:CONS:SMU{smu_number}:COMP {value}"
- self.inst.write(command)
-
- def str_smu_name(self,smu_number,name):
- command=f":PAGE:STR:SMU{smu_number}:NAME '{name}'"
- self.inst.write(command)
-
- def copy_current_page(self):
- command=":HCOP:DATA?"
- data=self.inst.query(command)
- return data
-
- #-----------------------------------------------------------sweep functions---------------------------------------------------------------
- def smu_disable_sweep(self,number):
- command= f":PAGE:CHAN:SMU{number}:DIS"
- self.inst.write(command)
-
- #The following function is for both sampling and sweep
- def smu_mode_meas(self,number,mode):
- command=f":PAGE:CHAN:SMU{number}:MODE {mode}"
- self.inst.write(command)
-
- def smu_function_sweep(self,number,function):
- command=f":PAGE:CHAN:SMU{number}:FUNC {function}"
- self.inst.write(command)
-
- def start_value_sweep(self,value):
- command=f":PAGE:MEAS:VAR1:START {value}"
- self.inst.write(command)
-
- def step_sweep(self,value):
- command=f":PAGE:MEAS:VAR1:STEP {value}"
- self.inst.write(command)
-
- def stop_value_sweep(self,value):
- command=f":PAGE:MEAS:VAR1:STOP {value}"
- self.inst.write(command)
-
- def var1_mode(self,mode):
- command = f":PAGE:MEAS:VAR1:MODE {mode}"
- self.inst.write(command)
-
- def cons_smu_value(self,smu_number,value):
- command =f"PAGE:MEAS:CONS:SMU{smu_number} {value}"
- self.inst.write(command)
-
- ''' smu1 is constant and common, SMU3 is controlled through the Var1(v) which has a start value, a stop value, and a step
- We don't need SMU2 and SMU4
-
- :PAGE:CHANnels[:CDEFinition]:SMU<n>:FUNCtion this command is used to define the variable of SMU3
- :PAGE:CHANnels[:CDEFinition]:SMU<n>:MODE
- This command sets the output MODE of SMU<n>. This command also has a query
- form. It is different that the one we used for the stress setup.
- :PAGE:CHANnels[:CDEFinition]:SMU<n>:DISable
- Important! we dont set a value for smu1.'''
-
- #----------------------------------------------------------------------sampling measure functions part2 first goal----------------------------
-
- ''' some instructions
- we need linear log10, log25 and thinned out (one function also log50 can be selected) SCPI COMMAND: :PAGE:MEASure:SAMPling:MODE
- Delay time(Hold time in manual) is to be seleceted :PAGE:MEASure:SAMPling:HTIMe
- Minimum initial interval :PAGE:MEASure:SAMPling:IINTerval
- number of points: :PAGE:MEASure:SAMPling:POINts
- integration time: :PAGE:MEASure:MSETup:ITIMe[:MODE]
- '''
- def sampling_mode(self,mode):
- command = f"PAGE:MEAS:SAMP:MODE {mode}"
- self.inst.write(command)
-
- def delay_time(self,time):
- command = f":PAGE:MEAS:SAMP:HTIM {time}"
- self.inst.write(command)
-
- def initial_interval(self,interval):
- command = f":PAGE:MEAS:SAMP:IINT {interval}"
- self.inst.write(command)
-
- def number_of_points(self,number):
- command = f":PAGE:MEAS:SAMP:POIN {number}"
- self.inst.write(command)
-
- #integration time is SHOR,MED,LONG
- def integration_time(self,time):
- command=f":PAGE:MEAS:MSET:ITIM {time}"
- self.inst.write(command)
-
- ''' The smus need to be set to other values as seen in the labview script we can define the following functions
- the vgs is v3 and vds is v2 (constant values) we need current-time diagramm(id,ig) v3=2V, v2=10V
- then we have to save the results in a file'''
-
- def constant_smu_sampling(self,number,value):
- command =f":PAGE:MEAS:SAMP:CONS:SMU{number} {value}"
- self.inst.write(command)
-
- def measurement_mode(self,mode):
- command =f":PAGE:CHAN:MODE {mode}"
- self.inst.write(command)
-
- def constant_smu_comp(self, smu_number,value):
- command=f":PAGE:MEAS:SAMP:CONS:SMU{smu_number}:COMP {value}"
- self.inst.write(command)
-
- #this is a method that returns data from a variable and converts them to a list of real numbers
- def return_data(self, variable):
-
- #send command to instrument returns a string of comma seperated values
- command = f":DATA? '{variable}'"
- data = self.inst.query(command)
-
- # separate the string to a list of strings
- values = data.replace("\n",",").split(",")
- values.pop()
-
- #convert the string to float numbers
- for i in range(len(values)):
- values[i] = float(values[i])
-
- return values
-
- def filter_status(self, status):
- command=f":PAGE:MEASure:SAMPling:FILT {status}"
- self.inst.write(command)
-
- #for memristor we need as a sampling completiton the Total sampling time
-
- #only for linear and thinned out
- def total_sampling_time(self,period):
- command = f":PAGE:MEAS:SAMP:PER {period}"
- self.inst.write(command)
-
- #set auto sampling time
- def auto_sampling_time(self,status):
- command =f":PAGE:MEAS:SAMP:PER:AUTO {status}"
- self.inst.write(command)
-
- #------------------------------------------ these are commands for the compliance-----------------------------------------------------------
-
- #set the power compliance for VAR1 and VAR2
- def pcomp(self,variable,value):
- command = f":PAGE:MEAS:{variable}:PCOM {value}"
- self.inst.write(command)
-
- #set normal compliance for VAR1 and VAR2
- def comp(self,variable,value):
- """ """
- command = f":PAGE:MEAS:{variable}:COMP {value}"
- self.inst.write(command)
-
- # constant voltage compiance of an smu(only use if the smu is constant and the mode is not COMMON)
-
- def const_comp(self,smu_number,value):
- command = f":PAGE:MEAS:CONS:SMU{smu_number}:COMP {value}"
- self.inst.write(command)
-
- #this command disables the VSU1 and VSU2
- def disable_vsu(self, vsu_number):
- command = f":PAGE:CHAN:VSU{vsu_number}:DIS"
- self.inst.write(command)
-
- def disable_vmu(self,vmu_number):
- command = f":PAGE:CHAN:VMU{vmu_number}:DIS"
- self.inst.write(command)
-
- #this command is for defining a new user function
- def user_function(self,name,unit,expression):
- command = f":PAGE:CHAN:UFUN:DEF '{name}','{unit}','{expression}'"
- self.inst.write(command)
-
- #this command is for displaying the correct variables
- def display_variable(self,axis,variable):
- command=f":PAGE:DISP:GRAP:{axis}:NAME '{variable}'"
- self.inst.write(command)
-
- #linear logarithmic scale for axis
- def axis_scale(self,axis,scale):
- command = f":PAGE:DISP:GRAP:{axis}:SCAL {scale}"
- self.inst.write(command)
-
- def display_variable_min_max(self,axis,extremum,value):
- command = f":PAGE:DISP:GRAP:{axis}:{extremum} {value}"
- self.inst.write(command)
-
- def autoscaling(self):
- self.inst.write(":PAGE:GLIS:SCAL:AUTO ONCE")
-
- def append_measurement(self):
- self.inst.write(":PAGE:SCON:APP")
-
- def stop_measurement(self):
- self.inst.write(":PAGE:SCON:STOP")
-
- #------------------------functions for adu VAR2(only sweep)-------------------------------------------------------
- def var2_start(self,value):
- command=f":PAGE:MEAS:VAR2:START {value}"
- self.inst.write(command)
-
- def var2_step(self,value):
- command=f":PAGE:MEAS:VAR2:STEP {value}"
- self.inst.write(command)
-
- def var2_points(self,points):
- command = f":PAGE:MEAS:VAR2:POINTS {points}"
- self.inst.write(command)
-
- def var2_comp(self,comp):
- command=f":PAGE:MEAS:VAR2:COMP {comp}"
- self.inst.write(command)
-
- #set power compliance
- def var2_pcomp(self,pcomp):
- if pcomp==0:
- command =":PAGE:MEAS:VAR2:PCOM:STATE OFF" #set 0 to disable pcompliance (labview)
- else:
- command = f":PAGE:MEAS:VAR2:PCOM {pcomp}" #set other value to enable pcomp
- self.inst.write(command)
- #--------------------------------------------end of var2 functions--------------------------------------------------
- #-----------------------------------------SMU NAMES----------------------------------------------------------------
- def smu_vname(self,smu_number,vname):
- command=f":PAGE:CHAN:SMU{smu_number}:VNAME '{vname}'"
- self.inst.write(command)
-
- def smu_iname(self,smu_number,iname):
- command=f":PAGE:CHAN:SMU{smu_number}:INAME '{iname}'"
- self.inst.write(command)
-
- #delete all user functions
- def del_ufun(self):
- command = f":PAGE:CHAN:UFUN:DEL:ALL"
- self.inst.write(command)
-
- # device.inst.write(":PAGE:MEAS:VAR1:MODE SING;SPAC LIN;STAR 1;STOP -7;STEP -3E-2;COMP 1.000000E-2;PCOM 0.000000E+0;") (how to write different commands in the same command)
-
- #for pulse
- def range_mode(self,smu_number,range):
- command = f":PAGE:MEAS:MSET:SMU{smu_number}:RANG:MODE {range}"
- self.inst.write(command)
-
- def pulse_base(self,value):
- command = f":PAGE:MEAS:PULS:BASE {value}"
- self.inst.write(command)
-
- def pulse_period(self,value):
- command = f":PAGE:MEAS:PULS:PER {value}"
- self.inst.write(command)
-
- def pulse_width(self,value):
- command = f":PAGE:MEAS:PULS:WIDTH {value}"
- self.inst.write(command)
-
--
GitLab