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