From 08798a459f59d8202a5c29971f1ad5bd3658aa86 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 14 Feb 2024 16:36:09 +0000 Subject: [PATCH] Add INL Sweep keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.csv --- .../datron-4805-XANS1/README.md | 3 + .../datron-4805-XANS1/data/INLV-2700DAT.py | 178 ++++++++++++++++++ ...2684---datron-4805-XANS1---SWEEP-AZERO.csv | 142 ++++++++++++++ ...2684---datron-4805-XANS1---SWEEP-AZERO.jpg | Bin 0 -> 25104 bytes 4 files changed, 323 insertions(+) create mode 100644 keithley-2700-1062684/datron-4805-XANS1/README.md create mode 100644 keithley-2700-1062684/datron-4805-XANS1/data/INLV-2700DAT.py create mode 100644 keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.csv create mode 100644 keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.jpg diff --git a/keithley-2700-1062684/datron-4805-XANS1/README.md b/keithley-2700-1062684/datron-4805-XANS1/README.md new file mode 100644 index 0000000..ed8fd37 --- /dev/null +++ b/keithley-2700-1062684/datron-4805-XANS1/README.md @@ -0,0 +1,3 @@ +| Meter Manufacturer | Meter Model | Meter SerialNumber | Source Manufacturer | Source Model | Source SerialNumber | MinMax | File | ID | User | +|--------------------|-------------|--------------------|---------------------|--------------|---------------------|--------|------|----|------| +|keithley|2700|1062684|datron|4805|XANS1|0.0|/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.jpg|SWEEP-AZERO|xans| diff --git a/keithley-2700-1062684/datron-4805-XANS1/data/INLV-2700DAT.py b/keithley-2700-1062684/datron-4805-XANS1/data/INLV-2700DAT.py new file mode 100644 index 0000000..8254b78 --- /dev/null +++ b/keithley-2700-1062684/datron-4805-XANS1/data/INLV-2700DAT.py @@ -0,0 +1,178 @@ +import GPIBPrologix +import bme280 +import smbus2 +from requests import post + +## Initialize GPIB adapter +GPIB = GPIBPrologix.ResourceManager("/dev/ttyACM0") +# Connect equipment +inst2 = GPIB.open_resource(30) +inst3 = GPIB.open_resource(23) +# Initialize BME280 temperature/humidity sensor +bus = smbus2.SMBus(1) +## Configure equipment +# BME280 temperature/humidity sensor +calibration_params = bme280.load_calibration_params(bus, 0x76) + +# Datron 4805 Calibrator +inst2.query("F0=") #DCV +inst2.query("R6=") #10/100K Range +inst2.query("S1=") #RemoteSense +inst2.query("M0.0069=") #6.9mV Out, sanity check +inst2.query("O1=") #OutputON +#Setup K2700 +inst3.write("*RST") +inst3.write("SENS:VOLT:DC:RANG 10") +inst3.write("SENS:VOLT:DC:NPLC 50") +inst3.write("SYST:AZER:STAT ON") +inst3.query("READ?") +# Measurement functions +def readValue(instObj): + instObj.query("READ?") + value = "" + while value == "": + value = inst3.read() + value = value.split('V', 1)[0] + print(value) + return value +def setValue(instObj, inputVar): + instObj.query("M"+str(inputVar)+"=") + return inputVar +def getEnvironment(instObj, i2cbus): + value = instObj.sample(i2cbus, 0x76, calibration_params) + return value + +## Have gitpython pull in the repository +import os +import git +import shutil +username = input("Your 0xC6 git username: ") +password = input("Your 0xC6 git password: ") +remote = f"https://{username}:{password}@git.0xc6.com/xans/INL-Measurements.git" +if not os.path.exists(os.getcwd()+"/INL-Measurements"): + git.Repo.clone_from(remote, os.getcwd()+"/INL-Measurements/") +else: + shutil.rmtree(os.getcwd()+"/INL-Measurements/", ignore_errors=True) + git.Repo.clone_from(remote, os.getcwd()+"/INL-Measurements/") + +## Get needed info to properly label everything +MeterManufacturer = input("Meter Manufacturer: ").lower() +MeterModel = input("Meter Model: ").upper() +MeterSN = input("Meter SN: ").upper() +SourceManufacturer = input("Source Manufacturer: ").lower() +SourceModel = input("Source Model: ").upper() +SourceSN = input("Source SN: ").upper() +measid = input("Personally assigned measurement ID: ").upper() +shellyIp = input("If you use shelly for protection, enter the IP: ").upper() + +if shellyIp and os.system("ping -c 1 " + shellyIp): + print("shelly not found") + quit() +if shellyIp: + url = "{}://{}:{}/relay/0?turn=on".format("http", "192.168.0.101", "80") + post(url) + +## Create proper directory structure +basePath = os.getcwd() + "/INL-Measurements/" +dutname = MeterManufacturer+'-'+MeterModel+'-'+MeterSN +if not os.path.exists(basePath+dutname): + os.makedirs(basePath+dutname) +sourcename = SourceManufacturer+'-'+SourceModel+'-'+SourceSN +if not os.path.exists(basePath+dutname+'/'+sourcename): + os.makedirs(basePath+dutname+'/'+sourcename) +if not os.path.exists(basePath+dutname+'/'+sourcename+"/data/"): + os.makedirs(basePath+dutname+'/'+sourcename+"/data/") +basePath = basePath+dutname+'/'+sourcename +print(basePath+"/data/") + +import csv +import time +import datetime +import numpy as np +import pandas as pd +from math import sin +## Create logfile +logFileName = MeterManufacturer+'-'+MeterModel+'-'+MeterSN+'---'+SourceManufacturer+'-'+SourceModel+'-'+SourceSN+'---'+measid+'.csv' +with open(basePath+"/data/"+logFileName, 'a') as f: + writer = csv.writer(f) + writer.writerow(["DateTime","Set Volts","Measured Volts","Env Pressure","Env Temperature", "Env Humidity"]) +print(basePath+"/data/"+logFileName) + +sweep = np.arange(-11.5,12,0.5) + +cntr = 0 +d = datetime.datetime.now() +dlast = datetime.datetime.now() +## Collect data +time.sleep(3) +for x in sweep: + cntr = cntr + 1 + try: + #Set volt and let accimatize + setPoint = setValue(inst2,round(x,5)) + timebetween = (d-dlast) * (len(sweep)-cntr) + dlast = d + print(str(cntr)+'/'+str(len(sweep))+' Estimated Time Left: '+str(timebetween)) + time.sleep(60) + for i in range(3): + try: + time.sleep(5) + #Get DUT value + readout = readValue(inst3) + #Get envirnmental values + data = getEnvironment(bme280, bus) + #Write to file + d = datetime.datetime.now() + dx = d - datetime.timedelta(microseconds=d.microsecond) + fields=[dx.strftime("%d-%m-%y %H:%M:%S"),setPoint,float(readout),round(data.humidity,2),round(data.temperature,2),round(data.pressure,2)] + print(fields) + with open(basePath+"/data/"+logFileName, 'a') as f: + writer = csv.writer(f) + writer.writerow(fields) + if shellyIp and float(data.temperature) > 30 or float(data.temperature) < 16: + url = "{}://{}:{}/relay/0?turn=off".format("http", "192.168.0.101", "80") + post(url) + except Exception as e: + time.sleep(15) + i = i-1 + except Exception as e: + print(e) + time.sleep(1) + +## Calculate high order polynomial +df = pd.read_csv(basePath+"/data/"+logFileName) +df = df.groupby(["Set Volts"], as_index=False).mean(numeric_only=True) +highOrderPolyFit = np.polyfit(df["Set Volts"], df["Set Volts"]-df["Measured Volts"], 12) +trendPoly = np.poly1d(highOrderPolyFit) +## Make plot and save +import sys +from matplotlib import pyplot as plt +plt.plot(df["Set Volts"], df["Set Volts"]-df["Measured Volts"]) +polyIndex = np.arange(-11,11,0.01) +plt.plot(polyIndex, trendPoly(polyIndex)) +plt.xlabel('Source Voltage') +plt.ylabel('Delta Set/Meas') +plt.title ('INLV sweep '+ logFileName[:-4]) +plt.savefig(basePath+"/data/"+logFileName[:-4]+".jpg", bbox_inches='tight') + +minVal = trendPoly(polyIndex) +maxVal = trendPoly(polyIndex) +minVal = min(minVal) +maxVal = min(maxVal) +## Write away values to result overview +if not os.path.exists(basePath+'/README.md'): + with open(basePath+'/README.md', 'a') as f: + f.write("| Meter Manufacturer | Meter Model | Meter SerialNumber | Source Manufacturer | Source Model | Source SerialNumber | MinMax | File | ID | User |\n") + f.write("|--------------------|-------------|--------------------|---------------------|--------------|---------------------|--------|------|----|------|\n") + f.close() +with open(basePath+'/README.md', 'a') as f: + linkToImg = "/data/"+logFileName[:-4]+".jpg" + print("|"+MeterManufacturer+"|"+MeterModel+"|"+MeterSN+"|"+SourceManufacturer+"|"+SourceModel+"|"+SourceSN+"|"+str(round((maxVal-minVal),10))+"|"+linkToImg+"|"+measid+"|"+username+"|\n") + f.write("|"+MeterManufacturer+"|"+MeterModel+"|"+MeterSN+"|"+SourceManufacturer+"|"+SourceModel+"|"+SourceSN+"|"+str(round((maxVal-minVal),10))+"|"+linkToImg+"|"+measid+"|"+username+"|\n") + f.close() + shutil.copy(os.getcwd()+'/'+sys.argv[0],basePath+"/data/") + repo = git.Repo(os.getcwd() + "/INL-Measurements/") + repo.git.add(basePath) + repo.index.commit("Add INL Sweep "+ logFileName) + repo.remotes[0].push() + diff --git a/keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.csv b/keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.csv new file mode 100644 index 0000000..7a9cb7e --- /dev/null +++ b/keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.csv @@ -0,0 +1,142 @@ +DateTime,Set Volts,Measured Volts,Env Pressure,Env Temperature,Env Humidity +14-02-24 15:30:28,-11.5,-11.5000153,62.99,22.04,1014.65 +14-02-24 15:30:36,-11.5,-11.5000162,62.96,21.72,1014.13 +14-02-24 15:30:44,-11.5,-11.5000162,62.96,22.05,1014.64 +14-02-24 15:31:53,-11.0,-11.0000153,63.01,22.05,1014.64 +14-02-24 15:32:01,-11.0,-11.0000153,63.03,22.05,1014.64 +14-02-24 15:32:09,-11.0,-11.0000143,63.06,22.06,1014.6 +14-02-24 15:33:18,-10.5,-10.5000153,63.06,22.08,1014.7 +14-02-24 15:33:26,-10.5,-10.5000153,63.06,22.09,1014.66 +14-02-24 15:33:34,-10.5,-10.5000162,63.02,21.23,1013.17 +14-02-24 15:34:43,-10.0,-10.0000153,63.1,21.78,1014.16 +14-02-24 15:34:52,-10.0,-10.0000143,63.15,22.09,1014.69 +14-02-24 15:35:00,-10.0,-10.0000143,63.16,22.1,1014.67 +14-02-24 15:36:09,-9.5,-9.50001431,63.38,22.04,1014.67 +14-02-24 15:36:17,-9.5,-9.50001335,63.34,21.98,1014.63 +14-02-24 15:36:25,-9.5,-9.50001431,63.13,21.93,1014.66 +14-02-24 15:37:34,-9.0,-9.00001335,63.31,21.83,1014.76 +14-02-24 15:37:42,-9.0,-9.00001335,63.43,21.84,1014.66 +14-02-24 15:37:50,-9.0,-9.0000124,63.46,21.85,1014.74 +14-02-24 15:38:59,-8.5,-8.50001144,63.03,21.11,1013.34 +14-02-24 15:39:07,-8.5,-8.50001049,63.05,21.42,1013.86 +14-02-24 15:39:15,-8.5,-8.50001049,63.02,21.93,1014.71 +14-02-24 15:40:25,-8.0,-8.00001049,62.95,22.0,1014.76 +14-02-24 15:40:33,-8.0,-8.00001144,62.96,21.99,1014.67 +14-02-24 15:40:41,-8.0,-8.00000954,62.96,21.99,1014.72 +14-02-24 15:41:50,-7.5,-7.5000124,62.96,22.03,1014.66 +14-02-24 15:41:58,-7.5,-7.50001144,62.98,22.01,1014.62 +14-02-24 15:42:06,-7.5,-7.50001049,62.93,22.04,1014.73 +14-02-24 15:43:15,-7.0,-7.00000954,62.86,21.33,1013.48 +14-02-24 15:43:23,-7.0,-7.00000954,62.89,22.05,1014.61 +14-02-24 15:43:31,-7.0,-7.00000906,62.92,22.05,1014.59 +14-02-24 15:44:40,-6.5,-6.50001192,63.21,22.04,1014.64 +14-02-24 15:44:48,-6.5,-6.50001001,63.22,21.88,1014.41 +14-02-24 15:44:56,-6.5,-6.50001001,63.24,22.05,1014.69 +14-02-24 15:46:05,-6.0,-6.00000954,63.31,21.67,1014.11 +14-02-24 15:46:14,-6.0,-6.00001001,63.33,22.03,1014.61 +14-02-24 15:46:22,-6.0,-6.00000954,63.33,22.04,1014.62 +14-02-24 15:47:31,-5.5,-5.50000811,63.34,22.03,1014.65 +14-02-24 15:47:39,-5.5,-5.50000715,63.38,21.68,1014.1 +14-02-24 15:47:47,-5.5,-5.50000858,63.36,22.01,1014.7 +14-02-24 15:48:56,-5.0,-5.00000763,63.52,21.72,1014.14 +14-02-24 15:49:04,-5.0,-5.00000763,63.53,21.54,1013.86 +14-02-24 15:49:12,-5.0,-5.00000763,63.56,21.73,1014.05 +14-02-24 15:50:21,-4.5,-4.50000715,63.55,22.03,1014.6 +14-02-24 15:50:29,-4.5,-4.50000811,63.57,22.04,1014.64 +14-02-24 15:50:37,-4.5,-4.50000811,63.51,21.75,1014.11 +14-02-24 15:51:46,-4.0,-4.00000429,63.69,22.01,1014.6 +14-02-24 15:51:55,-4.0,-4.00000429,63.55,20.12,1011.29 +14-02-24 15:52:03,-4.0,-4.00000429,63.66,22.03,1014.73 +14-02-24 15:53:12,-3.5,-3.5000031,63.59,20.51,1012.06 +14-02-24 15:53:20,-3.5,-3.50000358,63.77,22.05,1014.61 +14-02-24 15:53:28,-3.5,-3.50000334,63.66,22.04,1014.65 +14-02-24 15:54:37,-3.0,-3.00000072,63.71,22.07,1014.67 +14-02-24 15:54:45,-3.0,-2.99999976,63.67,21.1,1013.09 +14-02-24 15:54:53,-3.0,-3.00000191,63.74,22.06,1014.66 +14-02-24 15:56:02,-2.5,-2.49999809,63.82,21.56,1013.84 +14-02-24 15:56:10,-2.5,-2.49999857,63.79,20.93,1012.74 +14-02-24 15:56:18,-2.5,-2.49999857,63.87,22.07,1014.64 +14-02-24 15:57:27,-2.0,-1.99999952,63.84,22.04,1014.78 +14-02-24 15:57:36,-2.0,-1.99999845,63.87,22.04,1014.64 +14-02-24 15:57:44,-2.0,-1.99999881,63.84,22.03,1014.71 +14-02-24 15:58:53,-1.5,-1.4999969,63.83,21.69,1014.36 +14-02-24 15:59:01,-1.5,-1.49999654,63.74,21.91,1014.68 +14-02-24 15:59:09,-1.5,-1.49999642,63.83,21.91,1014.65 +14-02-24 16:00:18,-1.0,-0.999996185,63.6,21.8,1014.59 +14-02-24 16:00:26,-1.0,-0.999996066,63.53,21.27,1013.75 +14-02-24 16:00:34,-1.0,-0.999997199,63.59,21.82,1014.63 +14-02-24 16:01:43,-0.5,-0.499993712,63.38,21.91,1014.72 +14-02-24 16:01:51,-0.5,-0.499992907,63.35,21.92,1014.69 +14-02-24 16:01:59,-0.5,-0.499992728,63.27,21.93,1014.68 +14-02-24 16:03:08,0.0,3.09357165e-06,63.13,21.63,1014.01 +14-02-24 16:03:17,0.0,3.76589287e-06,63.12,22.0,1014.68 +14-02-24 16:03:25,0.0,4.21030836e-06,63.11,22.0,1014.6 +14-02-24 16:04:34,0.5,0.499994785,63.15,22.01,1014.7 +14-02-24 16:04:42,0.5,0.499994665,63.04,20.47,1012.01 +14-02-24 16:04:50,0.5,0.499994546,63.13,22.02,1014.65 +14-02-24 16:05:59,1.0,0.99999702,63.2,22.03,1014.71 +14-02-24 16:06:07,1.0,0.999996126,63.19,22.03,1014.73 +14-02-24 16:06:15,1.0,0.999996066,63.16,21.67,1014.08 +14-02-24 16:07:24,1.5,1.49999821,63.15,21.89,1014.43 +14-02-24 16:07:32,1.5,1.49999809,62.92,19.3,1010.32 +14-02-24 16:07:40,1.5,1.49999797,63.18,22.06,1014.71 +14-02-24 16:08:49,2.0,1.99999595,63.21,22.07,1014.65 +14-02-24 16:08:58,2.0,1.9999963,63.2,21.78,1014.18 +14-02-24 16:09:06,2.0,1.99999702,63.22,22.07,1014.64 +14-02-24 16:10:15,2.5,2.49999428,63.31,22.03,1014.61 +14-02-24 16:10:23,2.5,2.49999499,63.34,22.06,1014.68 +14-02-24 16:10:31,2.5,2.49999595,63.35,21.62,1013.97 +14-02-24 16:11:41,3.0,2.99999809,63.52,22.07,1014.78 +14-02-24 16:11:49,3.0,2.99999881,63.54,22.07,1014.73 +14-02-24 16:11:57,3.0,2.99999905,63.52,22.09,1014.7 +14-02-24 16:13:06,3.5,3.49999905,63.42,21.25,1013.22 +14-02-24 16:13:14,3.5,3.49999905,63.45,22.1,1014.68 +14-02-24 16:13:22,3.5,3.49999809,63.47,21.8,1014.22 +14-02-24 16:14:32,4.0,4.00000143,63.5,21.78,1014.07 +14-02-24 16:14:40,4.0,4.00000191,63.5,22.12,1014.7 +14-02-24 16:14:48,4.0,4.00000191,63.55,22.12,1014.71 +14-02-24 16:15:58,4.5,4.50000572,63.53,22.14,1014.71 +14-02-24 16:16:06,4.5,4.50000381,63.53,22.13,1014.75 +14-02-24 16:16:14,4.5,4.50000477,63.54,21.76,1014.12 +14-02-24 16:17:23,5.0,5.00000572,63.72,22.1,1014.75 +14-02-24 16:17:31,5.0,5.00000572,63.73,22.09,1014.66 +14-02-24 16:17:39,5.0,5.0000062,63.77,22.09,1014.69 +14-02-24 16:18:48,5.5,5.50000858,63.87,22.09,1014.7 +14-02-24 16:18:56,5.5,5.50000906,63.89,22.09,1014.7 +14-02-24 16:19:04,5.5,5.50000811,63.93,22.08,1014.64 +14-02-24 16:20:13,6.0,6.00000906,63.88,22.08,1014.69 +14-02-24 16:20:21,6.0,6.00000906,63.91,22.09,1014.65 +14-02-24 16:20:29,6.0,6.00000906,63.88,22.08,1014.71 +14-02-24 16:21:39,6.5,6.50001192,63.96,22.08,1014.7 +14-02-24 16:21:47,6.5,6.50001097,63.97,22.08,1014.71 +14-02-24 16:21:55,6.5,6.50001097,64.01,22.07,1014.65 +14-02-24 16:23:04,7.0,7.00001001,64.04,22.08,1014.63 +14-02-24 16:23:12,7.0,7.00000858,64.04,22.08,1014.67 +14-02-24 16:23:20,7.0,7.00000763,64.05,22.07,1014.72 +14-02-24 16:24:29,7.5,7.50001097,64.01,22.12,1014.68 +14-02-24 16:24:37,7.5,7.50001144,63.98,22.13,1014.75 +14-02-24 16:24:45,7.5,7.5000124,63.97,22.13,1014.77 +14-02-24 16:25:54,8.0,8.00001144,64.04,21.75,1014.24 +14-02-24 16:26:02,8.0,8.0000124,64.07,22.11,1014.68 +14-02-24 16:26:10,8.0,8.00001335,64.01,21.27,1013.31 +14-02-24 16:27:20,8.5,8.50001717,64.15,21.75,1014.11 +14-02-24 16:27:28,8.5,8.50001717,64.15,22.09,1014.73 +14-02-24 16:27:36,8.5,8.50001812,64.18,22.09,1014.7 +14-02-24 16:28:45,9.0,9.00002098,64.15,22.1,1014.75 +14-02-24 16:28:53,9.0,9.00002098,64.15,22.1,1014.67 +14-02-24 16:29:01,9.0,9.00002193,64.17,22.1,1014.73 +14-02-24 16:30:10,9.5,9.50002003,64.11,21.59,1013.78 +14-02-24 16:30:18,9.5,9.50002098,64.14,22.12,1014.68 +14-02-24 16:30:26,9.5,9.50002098,64.18,21.46,1013.62 +14-02-24 16:31:35,10.0,10.000021,64.32,22.11,1014.74 +14-02-24 16:31:43,10.0,10.00002,64.31,22.11,1014.66 +14-02-24 16:31:51,10.0,10.00002,64.36,22.1,1014.75 +14-02-24 16:33:01,10.5,10.5000229,64.39,22.1,1014.72 +14-02-24 16:33:09,10.5,10.5000229,64.43,22.09,1014.66 +14-02-24 16:33:17,10.5,10.5000229,64.39,22.11,1014.77 +14-02-24 16:34:26,11.0,11.0000229,64.25,22.12,1014.74 +14-02-24 16:34:34,11.0,11.0000257,64.31,21.79,1014.14 +14-02-24 16:34:42,11.0,11.0000248,64.35,22.12,1014.7 +14-02-24 16:35:51,11.5,11.5000238,64.52,22.13,1014.69 +14-02-24 16:35:59,11.5,11.5000229,64.44,22.12,1014.71 +14-02-24 16:36:07,11.5,11.5000229,64.46,22.13,1014.72 diff --git a/keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.jpg b/keithley-2700-1062684/datron-4805-XANS1/data/keithley-2700-1062684---datron-4805-XANS1---SWEEP-AZERO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b7eae7e66e9d672865b98bcf860ebfe50b9c552 GIT binary patch literal 25104 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