From 3867c8ac9c2e458795838d2ba8b3845f3d7fd3e2 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 13 Feb 2024 22:17:33 +0000 Subject: [PATCH] Add INL Sweep hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.csv --- .../datron-4805-XANS1/README.md | 3 + .../datron-4805-XANS1/data/INLV-34401Dat.py | 180 ++++++++++++++++++ ...---datron-4805-XANS1---SWEEP-AZERO-HIZ.csv | 142 ++++++++++++++ ...---datron-4805-XANS1---SWEEP-AZERO-HIZ.jpg | Bin 0 -> 24563 bytes 4 files changed, 325 insertions(+) create mode 100644 hp-34401A-3146A39685/datron-4805-XANS1/README.md create mode 100644 hp-34401A-3146A39685/datron-4805-XANS1/data/INLV-34401Dat.py create mode 100644 hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.csv create mode 100644 hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.jpg diff --git a/hp-34401A-3146A39685/datron-4805-XANS1/README.md b/hp-34401A-3146A39685/datron-4805-XANS1/README.md new file mode 100644 index 0000000..3af4eed --- /dev/null +++ b/hp-34401A-3146A39685/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 | +|--------------------|-------------|--------------------|---------------------|--------------|---------------------|--------|------|----|------| +|hp|34401A|3146A39685|datron|4805|XANS1|0.0|/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.jpg|SWEEP-AZERO-HIZ|xans| diff --git a/hp-34401A-3146A39685/datron-4805-XANS1/data/INLV-34401Dat.py b/hp-34401A-3146A39685/datron-4805-XANS1/data/INLV-34401Dat.py new file mode 100644 index 0000000..4c1d78d --- /dev/null +++ b/hp-34401A-3146A39685/datron-4805-XANS1/data/INLV-34401Dat.py @@ -0,0 +1,180 @@ +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(22) +# 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 34401A +inst3.write("*RST") +inst3.write("SYST:PRES") +inst3.write("*CLS") +inst3.write("CONF:VOLT:DC 10") +inst3.write("VOLT:DC:NPLC 100") +inst3.write("ZERO:AUTO ON") +inst3.write("INP:IMP:AUTO ON") +inst3.query("READ?") +# Measurement functions +def readValue(instObj): + instObj.query("READ?") + value = "" + while value == "": + value = inst3.read() + 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/hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.csv b/hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.csv new file mode 100644 index 0000000..6bd724c --- /dev/null +++ b/hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.csv @@ -0,0 +1,142 @@ +DateTime,Set Volts,Measured Volts,Env Pressure,Env Temperature,Env Humidity +13-02-24 21:08:51,-11.5,-11.500162,60.26,21.48,1013.41 +13-02-24 21:09:00,-11.5,-11.500163,60.3,21.79,1013.91 +13-02-24 21:09:09,-11.5,-11.500163,60.32,21.8,1013.85 +13-02-24 21:10:20,-11.0,-11.000157,60.52,21.8,1013.89 +13-02-24 21:10:29,-11.0,-11.000158,60.39,20.75,1012.12 +13-02-24 21:10:38,-11.0,-11.000158,60.42,21.82,1013.91 +13-02-24 21:11:49,-10.5,-10.500148,60.53,21.81,1013.89 +13-02-24 21:11:58,-10.5,-10.500149,60.56,21.82,1013.88 +13-02-24 21:12:07,-10.5,-10.500149,60.55,21.74,1013.71 +13-02-24 21:13:18,-10.0,-10.000143,60.54,21.21,1012.84 +13-02-24 21:13:27,-10.0,-10.000143,60.64,21.82,1013.88 +13-02-24 21:13:36,-10.0,-10.000143,60.64,21.83,1013.86 +13-02-24 21:14:47,-9.5,-9.5001346,60.76,21.8,1013.85 +13-02-24 21:14:56,-9.5,-9.5001346,60.82,21.8,1013.82 +13-02-24 21:15:05,-9.5,-9.5001369,60.88,21.8,1013.95 +13-02-24 21:16:16,-9.0,-9.0001302,60.83,21.83,1013.85 +13-02-24 21:16:25,-9.0,-9.0001289,60.86,21.81,1013.84 +13-02-24 21:16:35,-9.0,-9.0001306,60.85,21.8,1013.9 +13-02-24 21:17:46,-8.5,-8.5001205,61.06,21.81,1013.86 +13-02-24 21:17:55,-8.5,-8.5001192,61.05,21.84,1013.85 +13-02-24 21:18:04,-8.5,-8.5001201,61.07,21.83,1013.85 +13-02-24 21:19:15,-8.0,-8.0001141,60.95,21.84,1013.78 +13-02-24 21:19:24,-8.0,-8.0001148,60.94,21.84,1013.8 +13-02-24 21:19:33,-8.0,-8.0001144,60.94,21.09,1012.56 +13-02-24 21:20:44,-7.5,-7.5001059,61.11,21.87,1013.88 +13-02-24 21:20:53,-7.5,-7.5001059,60.92,18.5,1008.09 +13-02-24 21:21:02,-7.5,-7.5001055,61.16,21.87,1013.81 +13-02-24 21:22:13,-7.0,-7.0000982,61.14,21.87,1013.86 +13-02-24 21:22:22,-7.0,-7.0000984,61.14,21.88,1013.8 +13-02-24 21:22:31,-7.0,-7.0000983,61.14,21.89,1013.81 +13-02-24 21:23:42,-6.5,-6.5000912,61.16,21.91,1013.8 +13-02-24 21:23:51,-6.5,-6.5000913,61.18,21.9,1013.83 +13-02-24 21:24:00,-6.5,-6.5000914,61.1,21.24,1012.64 +13-02-24 21:25:11,-6.0,-6.0000836,61.37,21.89,1013.84 +13-02-24 21:25:20,-6.0,-6.0000835,61.27,21.89,1013.78 +13-02-24 21:25:29,-6.0,-6.0000832,61.34,21.89,1013.78 +13-02-24 21:26:40,-5.5,-5.5000785,61.48,21.89,1013.84 +13-02-24 21:26:50,-5.5,-5.5000769,61.51,21.9,1013.78 +13-02-24 21:26:59,-5.5,-5.5000783,61.5,21.91,1013.8 +13-02-24 21:28:10,-5.0,-5.0000678,61.31,20.64,1011.61 +13-02-24 21:28:19,-5.0,-5.0000673,61.5,21.9,1013.75 +13-02-24 21:28:28,-5.0,-5.0000667,61.53,21.9,1013.78 +13-02-24 21:29:39,-4.5,-4.5000615,61.54,21.87,1013.65 +13-02-24 21:29:48,-4.5,-4.5000623,61.5,21.91,1013.8 +13-02-24 21:29:57,-4.5,-4.5000618,61.51,21.92,1013.78 +13-02-24 21:31:08,-4.0,-4.0000537,61.62,21.93,1013.88 +13-02-24 21:31:17,-4.0,-4.0000531,61.59,20.69,1011.58 +13-02-24 21:31:26,-4.0,-4.0000532,61.67,21.92,1013.72 +13-02-24 21:32:37,-3.5,-3.5000482,61.63,21.62,1013.3 +13-02-24 21:32:46,-3.5,-3.5000482,61.63,21.2,1012.55 +13-02-24 21:32:55,-3.5,-3.5000467,61.7,21.93,1013.83 +13-02-24 21:34:06,-3.0,-3.0000403,61.68,21.95,1013.82 +13-02-24 21:34:15,-3.0,-3.0000404,61.71,21.95,1013.83 +13-02-24 21:34:25,-3.0,-3.0000403,61.7,21.68,1013.29 +13-02-24 21:35:36,-2.5,-2.5000325,61.73,21.97,1013.77 +13-02-24 21:35:45,-2.5,-2.5000337,61.75,21.98,1013.76 +13-02-24 21:35:54,-2.5,-2.5000316,61.77,21.96,1013.77 +13-02-24 21:37:05,-2.0,-2.0000266,61.58,21.97,1013.7 +13-02-24 21:37:14,-2.0,-2.0000249,61.63,21.98,1013.74 +13-02-24 21:37:23,-2.0,-2.000026,61.63,21.92,1013.65 +13-02-24 21:38:34,-1.5,-1.5000191,61.88,21.92,1013.79 +13-02-24 21:38:43,-1.5,-1.5000186,61.84,21.63,1013.29 +13-02-24 21:38:52,-1.5,-1.500019,61.9,21.93,1013.83 +13-02-24 21:40:03,-1.0,-1.0000125,61.83,21.95,1013.74 +13-02-24 21:40:12,-1.0,-1.0000122,61.77,21.03,1012.19 +13-02-24 21:40:21,-1.0,-1.0000134,61.81,21.95,1013.69 +13-02-24 21:41:32,-0.5,-0.5000035,61.8,21.44,1012.8 +13-02-24 21:41:41,-0.5,-0.5000029,61.9,21.97,1013.72 +13-02-24 21:41:50,-0.5,-0.5000032,61.94,21.97,1013.81 +13-02-24 21:43:01,0.0,3.2e-06,61.81,22.0,1013.77 +13-02-24 21:43:10,0.0,4.1e-06,61.85,22.01,1013.82 +13-02-24 21:43:20,0.0,3.2e-06,61.85,22.01,1013.79 +13-02-24 21:44:31,0.5,0.4999996,61.9,21.99,1013.73 +13-02-24 21:44:40,0.5,0.4999993,61.93,21.99,1013.73 +13-02-24 21:44:49,0.5,0.4999982,61.96,21.98,1013.77 +13-02-24 21:46:00,1.0,1.0000079,61.84,22.01,1013.71 +13-02-24 21:46:09,1.0,1.0000082,61.88,22.0,1013.69 +13-02-24 21:46:18,1.0,1.0000078,61.89,21.56,1013.05 +13-02-24 21:47:29,1.5,1.5000134,61.94,22.0,1013.75 +13-02-24 21:47:38,1.5,1.5000144,61.97,22.01,1013.71 +13-02-24 21:47:47,1.5,1.5000136,61.95,21.74,1013.24 +13-02-24 21:48:58,2.0,2.0000198,62.04,22.0,1013.75 +13-02-24 21:49:07,2.0,2.0000202,62.03,22.01,1013.77 +13-02-24 21:49:16,2.0,2.000021,62.09,22.01,1013.71 +13-02-24 21:50:27,2.5,2.5000276,62.05,22.05,1013.72 +13-02-24 21:50:36,2.5,2.5000279,62.01,21.7,1013.19 +13-02-24 21:50:45,2.5,2.5000284,62.02,22.02,1013.78 +13-02-24 21:51:56,3.0,3.0000341,62.1,21.77,1013.36 +13-02-24 21:52:05,3.0,3.000035,62.11,22.01,1013.76 +13-02-24 21:52:15,3.0,3.0000353,62.12,21.98,1013.8 +13-02-24 21:53:26,3.5,3.5000411,62.2,22.0,1013.69 +13-02-24 21:53:35,3.5,3.500042,62.22,22.01,1013.74 +13-02-24 21:53:44,3.5,3.5000419,62.21,22.03,1013.8 +13-02-24 21:54:55,4.0,4.0000481,62.12,21.32,1012.59 +13-02-24 21:55:04,4.0,4.0000493,62.17,22.08,1013.83 +13-02-24 21:55:13,4.0,4.0000487,62.18,22.08,1013.78 +13-02-24 21:56:24,4.5,4.5000546,62.14,22.04,1013.79 +13-02-24 21:56:33,4.5,4.500056,62.17,21.74,1013.26 +13-02-24 21:56:42,4.5,4.5000562,62.2,22.05,1013.78 +13-02-24 21:57:53,5.0,5.0000637,62.17,22.05,1013.79 +13-02-24 21:58:02,5.0,5.000063,62.15,22.04,1013.73 +13-02-24 21:58:11,5.0,5.0000626,62.25,22.03,1013.77 +13-02-24 21:59:22,5.5,5.5000718,62.22,22.04,1013.77 +13-02-24 21:59:31,5.5,5.5000698,62.24,21.68,1013.16 +13-02-24 21:59:40,5.5,5.5000713,62.23,22.04,1013.81 +13-02-24 22:00:51,6.0,6.000078,62.15,22.03,1013.78 +13-02-24 22:01:00,6.0,6.0000781,62.15,21.75,1013.28 +13-02-24 22:01:10,6.0,6.0000773,62.02,21.94,1013.6 +13-02-24 22:02:21,6.5,6.5000856,62.25,22.07,1013.74 +13-02-24 22:02:30,6.5,6.500085,62.21,22.07,1013.73 +13-02-24 22:02:39,6.5,6.5000847,62.16,22.06,1013.74 +13-02-24 22:03:50,7.0,7.0000936,62.32,22.08,1013.75 +13-02-24 22:03:59,7.0,7.0000924,62.3,22.08,1013.73 +13-02-24 22:04:08,7.0,7.0000925,62.3,22.09,1013.74 +13-02-24 22:05:19,7.5,7.5001003,62.17,22.09,1013.79 +13-02-24 22:05:28,7.5,7.5000998,62.26,22.07,1013.7 +13-02-24 22:05:37,7.5,7.5001009,62.24,22.07,1013.73 +13-02-24 22:06:48,8.0,8.000109,62.34,22.05,1013.81 +13-02-24 22:06:57,8.0,8.000109,62.4,22.06,1013.71 +13-02-24 22:07:06,8.0,8.0001083,62.4,22.08,1013.78 +13-02-24 22:08:17,8.5,8.5001158,62.32,22.07,1013.66 +13-02-24 22:08:26,8.5,8.500116,62.31,22.09,1013.72 +13-02-24 22:08:35,8.5,8.5001162,62.28,22.1,1013.68 +13-02-24 22:09:46,9.0,9.000125,62.37,22.12,1013.74 +13-02-24 22:09:55,9.0,9.0001246,62.28,22.11,1013.69 +13-02-24 22:10:05,9.0,9.0001246,62.17,21.32,1012.31 +13-02-24 22:11:16,9.5,9.5001316,62.22,22.11,1013.72 +13-02-24 22:11:25,9.5,9.5001321,62.32,22.09,1013.59 +13-02-24 22:11:34,9.5,9.5001319,62.26,20.83,1011.56 +13-02-24 22:12:45,10.0,10.000139,62.34,22.09,1013.69 +13-02-24 22:12:54,10.0,10.000141,62.25,22.07,1013.76 +13-02-24 22:13:03,10.0,10.00014,62.1,21.58,1012.82 +13-02-24 22:14:14,10.5,10.500144,62.15,22.16,1013.64 +13-02-24 22:14:23,10.5,10.500147,62.07,22.16,1013.73 +13-02-24 22:14:32,10.5,10.500147,62.08,22.18,1013.73 +13-02-24 22:15:43,11.0,11.000156,62.25,22.14,1013.61 +13-02-24 22:15:52,11.0,11.000157,62.23,22.14,1013.62 +13-02-24 22:16:01,11.0,11.000155,62.14,22.03,1013.4 +13-02-24 22:17:12,11.5,11.500164,62.36,22.11,1013.61 +13-02-24 22:17:21,11.5,11.500164,62.33,22.11,1013.59 +13-02-24 22:17:30,11.5,11.500164,62.34,22.1,1013.6 diff --git a/hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.jpg b/hp-34401A-3146A39685/datron-4805-XANS1/data/hp-34401A-3146A39685---datron-4805-XANS1---SWEEP-AZERO-HIZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aea0f031f60ce250e3934bb57d64312053b44e92 GIT binary patch literal 24563 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