""" ============================================================= *** modified 2022 - four wire resistance mode *** Institut f. Konstruktionsrechnik, Eggert Jung ============================================================= """ """ ================================================================================ *** Copyright 2019 Tektronix, Inc. *** *** See www.tek.com/sample-license for licensing terms. *** ================================================================================ """ """ ==================================================================================================== This example configures a series of channels within the 3706A mainframe for DCV measurement scanning. Additionally, a log file is created on a USB drive connected to the front port of the meter and writes the measurement information after each scan. ==================================================================================================== """ ## channel.exclusiveclose( import socket import struct import math import time import numpy as np from matplotlib import pyplot echoCmd = 0 def instrConnect(mySocket, myAddress, myPort, timeOut, doReset, doIdQuery): mySocket.connect((myAddress, myPort)) # input to connect must be a tuple mySocket.settimeout(timeOut) if doReset == 1: instrSend(mySocket, "reset()") if doIdQuery == 1: tmpId = instrQuery(mySocket, "*IDN?", 100) print(tmpId) return mySocket def instrDisconnect(mySocket): mySocket.close() return def instrSend(mySocket, cmd): if echoCmd == 1: print(cmd) cmd = "{0}\n".format(cmd) mySocket.send(cmd.encode()) return def instrQuery(mySocket, cmd, rcvSize): instrSend(mySocket, cmd) time.sleep(0.1) return mySocket.recv(rcvSize).decode() def Write_Data(output_data_path, dataStr): # This function writes the floating point data to the # target file. #for f in floats: ofile = open(output_data_path, "a") # append the target data dataStr = "{0}".format(dataStr) ofile.write(dataStr) ofile.close() # Close the data file. return def Configure_Backplane(s): instrSend(s, "reset()") instrSend(s, "dmm.func = \"fourwireohms\"") #instrSend(s, "dmm.nplc = 0.1") instrSend(s, "dmm.autorange = dmm.OFF") instrSend(s, "dmm.range = 100") ## crossover connection is made on backplane 3 & 4 instrSend(s, 'channel.setbackplane("1001:1030", "1913")') instrSend(s, 'channel.setbackplane("1031:1060", "1924")') instrSend(s, 'channel.setbackplane("2001:2030", "2913")') instrSend(s, 'channel.setbackplane("2031:2060", "2924")') instrSend(s, 'channel.setbackplane("3001:3030", "3913")') instrSend(s, 'channel.setbackplane("3031:3060", "3924")') return def diff_4W_mess(s, ch1, ch2): instrSend(s, 'channel.exclusiveclose("{}")'.format(ch1)) instrSend(s, 'channel.close("{}")'.format(ch2)) #print(instrQuery(s, "print(dmm.measure())", 64)[:-1], end='\t') return float(instrQuery(s, "print(dmm.measure())", 64)) def get_mapped(arr): map = [ (1,9), (1,1), (3,8), (1,4), (3,6), (2,4), (1,7), (3,10), (1,8), (2,10), (2,8), (3,4), (2,7), (1,5), (3,7), (2,1), (2,6), (3,3), (1,6), (2,3), (2,9), (1,3), (3,9), (3,2), (3,5), (2,2), (2,5), (1,2), (1,10), (3,1), (4,7), (5,8), (4,6), (6,2), (5,5), (6,3), (4,1), (5,7), (4,4), (5,6), (4,5), (6,4), (4,2), (6,5), (4,3), (5,9), (5,4), (6,1), (5,3), (6,6), (4,8), (6,7), (4,9), (6,8), (5,2), (6,9), (5,1), (6,10), (4,10), (5,10), (7,2), (7,10), (9,3), (7,7), (9,5), (8,7), (7,4), (9,1), (7,3), (8,1), (8,3), (9,7), (8,4), (7,6), (9,4), (8,10), (8,5), (9,8), (7,5), (8,8), (8,2), (7,8), (9,2), (9,9), (9,6), (8,9), (8,6), (7,9), (7,1), (9,10) ] out = np.zeros(shape=(9, 10)) for i in range(0,90): x, y = map[i] out[x-1][y-1] = arr[i] return out def done(): instrSend(s, "beeper.beep(0.500, 440)") instrSend(s, "beeper.beep(0.500, 440)") instrSend(s, "beeper.beep(0.500, 440)") instrSend(s, "beeper.beep(0.350, 349)") instrSend(s, "beeper.beep(0.150, 523)") instrSend(s, "beeper.beep(0.500, 440)") instrSend(s, "beeper.beep(0.350, 349)") instrSend(s, "beeper.beep(0.150, 523)") instrSend(s, "beeper.beep(1.000, 440)") instrSend(s, "beeper.beep(0.500, 659)") instrSend(s, "beeper.beep(0.500, 659)") instrSend(s, "beeper.beep(0.500, 659)") instrSend(s, "beeper.beep(0.350, 698)") instrSend(s, "beeper.beep(0.150, 523)") instrSend(s, "beeper.beep(0.500, 415)") instrSend(s, "beeper.beep(0.350, 349)") instrSend(s, "beeper.beep(0.150, 523)") instrSend(s, "beeper.beep(1.000, 440)") """ ============================================================================================================== MAIN CODE STARTS HERE ============================================================================================================== """ ip_address = "192.168.0.53" # Place your instrument's IP address here. my_port = 5025 output_data_path = time.strftime("data_%Y-%m-%d_%H-%M-%S.csv") # This is the output file that is created which # will hold your readings provided in ASCII # format in a text file. s = socket.socket() # Establish a TCP/IP socket object # Open the socket connection instrConnect(s, ip_address, my_port, 20000, 0, 0) t1 = time.time() # Start the timer... Configure_Backplane(s) a = np.zeros(shape=(90, 90)) b = np.zeros(shape=(9, 10)) pyplot.ion() fig, ax = pyplot.subplots() axim = ax.imshow(a, interpolation='nearest', cmap='gray', vmin=0, vmax=30) x = 0 y = 0 print() for ch1 in [*range(1001, 1031)] + [*range(2001, 2031)] + [*range(3001, 3031)]: for ch2 in [*range(1031, 1061)] + [*range(2031, 2061)] + [*range(3031, 3061)]: a[x][y]=diff_4W_mess(s, ch1, ch2) b=get_mapped(a[x]) axim.set_data(b) fig.canvas.flush_events() y+=1 y=0 x+=1 done(); # Close the socket connection instrDisconnect(s) t2 = time.time() # Notify the user of completion and the data streaming rate achieved. print("done") print("Total Time Elapsed: {0:.3f} s".format(t2-t1)) input("Press Enter to continue...") exit()