import sys sys.path.insert(0, './lib') sys.path.insert(0, '..') #append parent directory from interface import * import hp4155a first_page = page_1() second_page = page_2() third_page = page_3() fourth_page = page_4() fifth_page = page_5() titles = ["SMUs","User Functions","Parameters","Plotting","Save to file"] children = [first_page,second_page,third_page,fourth_page,fifth_page] tab = widgets.Tab() tab.children = children tab.titles = titles display(tab) start = widgets.Button(description='Start Measurement') output = widgets.Output() display(start,output) device = hp4155a.HP4155a('GPIB0::17::INSTR') def on_start_clicked(b): with output: change_state(first_page,second_page,third_page,fourth_page,fifth_page) # Reset the device device.reset() # Step 1 create the dictionaries appropriately for every measurement # read general information measurement_mode = third_page[0,0].value measurement_name = fifth_page[0,0].value processing_nr = fifth_page[1,0].value sample_series = fifth_page[2,0].value dut = fifth_page[3,0].value integration = third_page[0,1].value # we need constant smus for all measurements # Constant Smus cons_smus = [] for j in range(1,5): cons_smus.append(create_dict(value = third_page[21,j].value,comp=third_page[22,j].value)) # first sweep if measurement_mode == 'SWEEP': #page 1 smus = [] #iterate over the rows for i in range(1,5): smus.append( create_dict( vname = first_page[i,1].value, iname = first_page[i,2].value, mode = first_page[i,3].value, func = first_page[i,4].value, disabled = first_page[i,5].value ) ) # 2nd page user_functions = [] #iterate over the rows for i in range(1,7): user_functions.append( create_dict( name = second_page[i,0].value, unit=second_page[i,1].value, expression = second_page[i,2].value ) ) # Page 3 #match hysteris checkbox with the command forwarded to the tool if third_page[9,0].value == True: hyst = 'DOUB' else: hyst = 'SING' var1 = create_dict( start = third_page[4,0].value, stop = third_page[5,0].value, step = third_page[6,0].value, comp = third_page[7,0].value, pcomp =third_page[8,0].value, mode = hyst ) var2 = create_dict( start = third_page[4,1].value, stop = third_page[5,1].value, points = third_page[6,1].value, comp = third_page[7,1].value, pcomp=third_page[8,1] ) vard = create_dict( offset=third_page[4,2].value, ratio = third_page[5,2].value, comp = third_page[7,2].value, pcomp=third_page[8,2].value ) pulse = create_dict( period=third_page[4,3].value, width = third_page[5,3].value, base = third_page[6,3].value ) # Page 4 axes = [] # 0 is x-axis , 1 is y1-axis and 2 is y2-axis for j in range(1,4): #iterate over the column axes.append( create_dict( name = fourth_page[1,j].value, scale = fourth_page[2,j].value, min =fourth_page[3,j].value, max = fourth_page[4,j].value ) ) # Page 5 variables = [] for i in range(8): variables.append( create_dict( name = fifth_page[6+i,0].value, unit =fifth_page[6+i,1].value ) ) # Now execute measurement #setup sweep measurement mode device.measurement_mode('SWE') #disable all irrelevant units device.disable_not_smu() # First Setup Smus for i,smu in enumerate(smus): if smu['disabled'] == False: device.setup_smu(i+1,smu) else: #disabled device.smu_disable(i+1) # Setup User Functions for user_function in user_functions: device.user_function(user_function['name'],user_function['unit'],user_function['expression']) # Setup VAR1 (always in sweep measurements) device.setup_var1(var1) # device will check for errors # Now set the 3 additional columns if check_sweep_func(smus,'VAR2') == True: device.setup_var2(var2) if check_sweep_func(smus,'VARD') == True: device.setup_vard(vard) if check_sweep_pulse(smus)== True: device.setup_pulse(pulse) # Check for constant SMUs but not grounded cons_smu_numbers = check_sweep_cons(smus) for i, cons_smu in enumerate(smus): if i+1 in cons_smu_numbers: # check if the constant smu was found in the first page func device.setup_cons_smu(i+1,cons_smu) # Now set the axes # Set X-axis device.display_variable('X',axes[0]['name']) device.axis_scale('') # Sampling Measurement Mode elif measurement_mode=='SAMPLING': # sampling parameters parameters= create_dict( mode=third_page[12,0].value, interval=third_page[13,0].value, hold=third_page[16,0].value, points=third_page[14,0].value, filter=third_page[17,0].value ) duration = third_page[13,0].value start.on_click(on_start_clicked)