From c509fa2a003f093a86a0cfffd19eccb3c16800fb Mon Sep 17 00:00:00 2001 From: root Date: Mon, 18 Dec 2023 10:00:50 +0000 Subject: [PATCH] Add INL Sweep solartron-7081-001128---datron-4805-XANS1---SWEEP4.csv --- .../datron-4805-XANS1/README.md | 3 + .../datron-4805-XANS1/data/INLV-Sol2Dat.py | 184 ++++++++++++++++++ ...81-001128---datron-4805-XANS1---SWEEP4.csv | 95 +++++++++ ...81-001128---datron-4805-XANS1---SWEEP4.jpg | Bin 0 -> 22407 bytes 4 files changed, 282 insertions(+) create mode 100644 solartron-7081-001128/datron-4805-XANS1/README.md create mode 100644 solartron-7081-001128/datron-4805-XANS1/data/INLV-Sol2Dat.py create mode 100644 solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.csv create mode 100644 solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.jpg diff --git a/solartron-7081-001128/datron-4805-XANS1/README.md b/solartron-7081-001128/datron-4805-XANS1/README.md new file mode 100644 index 0000000..5ecb128 --- /dev/null +++ b/solartron-7081-001128/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 | +|--------------------|-------------|--------------------|---------------------|--------------|---------------------|--------|------|----|------| +|solartron|7081|001128|datron|4805|XANS1|0.0|/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.jpg|SWEEP4|xans| diff --git a/solartron-7081-001128/datron-4805-XANS1/data/INLV-Sol2Dat.py b/solartron-7081-001128/datron-4805-XANS1/data/INLV-Sol2Dat.py new file mode 100644 index 0000000..fe2f5ef --- /dev/null +++ b/solartron-7081-001128/datron-4805-XANS1/data/INLV-Sol2Dat.py @@ -0,0 +1,184 @@ +import time +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(18) +# 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 + +# Solartron S7081 +time.sleep(3) +inst3.write("DR=OFF") +inst3.write("MOD=VDC:RAN=10:NI=8") # 10V, 8.5 digits +inst3.write("DELI=END") # Delimeter set to END +inst3.write("OUTPUT,GP-IB,ON") # Sets output via GPIB +inst3.write("HISTORY,CLEAR") + +#inst3.query("BEEp") +#inst3.query("MODE VDc") +#inst3.query("RANGE 10") +#inst3.query("DIGits 7") +#inst3.query("DRift OFf") + +# Measurement functions +def readValue(instObj): + instObj.write("MEAS=SI") + time.sleep(65) + value = instObj.read() + 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", "8") + 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 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(30) +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(50) + for i in range(2): + 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"], 8) +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/solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.csv b/solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.csv new file mode 100644 index 0000000..c4b4fed --- /dev/null +++ b/solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.csv @@ -0,0 +1,95 @@ +DateTime,Set Volts,Measured Volts,Env Pressure,Env Temperature,Env Humidity +18-12-23 07:31:29,-11.5,-11.5003509,54.27,22.17,1031.21 +18-12-23 07:32:40,-11.5,-11.5003513,54.36,22.12,1031.2 +18-12-23 07:34:42,-11.0,-11.0003377,54.53,22.07,1031.13 +18-12-23 07:35:54,-11.0,-11.0003379,54.59,22.07,1031.24 +18-12-23 07:37:56,-10.5,-10.5003206,54.69,22.04,1031.2 +18-12-23 07:39:07,-10.5,-10.50032,54.73,22.03,1031.23 +18-12-23 07:41:09,-10.0,-10.0003052,54.77,21.99,1031.26 +18-12-23 07:42:20,-10.0,-10.0003053,54.82,21.98,1031.2 +18-12-23 07:44:22,-9.5,-9.50029,54.75,22.01,1031.2 +18-12-23 07:45:33,-9.5,-9.5002904,54.87,21.97,1031.18 +18-12-23 07:47:35,-9.0,-9.0002745,54.98,21.92,1031.25 +18-12-23 07:48:46,-9.0,-9.0002751,54.99,21.9,1031.25 +18-12-23 07:50:48,-8.5,-8.5002578,54.98,21.89,1031.26 +18-12-23 07:51:59,-8.5,-8.5002582,55.03,21.89,1031.31 +18-12-23 07:54:02,-8.0,-8.0002428,55.12,21.86,1031.31 +18-12-23 07:55:13,-8.0,-8.0002428,55.25,21.81,1031.37 +18-12-23 07:57:15,-7.5,-7.5002272,54.98,21.83,1031.29 +18-12-23 07:58:26,-7.5,-7.5002273,55.11,21.79,1031.35 +18-12-23 08:00:28,-7.0,-7.000212,55.22,21.75,1031.34 +18-12-23 08:01:39,-7.0,-7.0002115,55.27,21.77,1031.31 +18-12-23 08:03:41,-6.5,-6.5001959,55.37,21.75,1031.41 +18-12-23 08:04:52,-6.5,-6.5001959,55.51,21.69,1031.42 +18-12-23 08:06:54,-6.0,-6.0001804,55.68,21.65,1031.38 +18-12-23 08:08:06,-6.0,-6.0001797,55.66,21.65,1031.33 +18-12-23 08:10:08,-5.5,-5.5001652,55.55,21.57,1031.35 +18-12-23 08:11:19,-5.5,-5.5001654,55.9,21.47,1031.45 +18-12-23 08:13:21,-5.0,-5.0001495,56.08,21.42,1031.38 +18-12-23 08:14:32,-5.0,-5.0001491,56.14,21.38,1031.31 +18-12-23 08:16:34,-4.5,-4.5001333,55.95,21.44,1031.39 +18-12-23 08:17:45,-4.5,-4.5001344,55.97,21.45,1031.44 +18-12-23 08:19:47,-4.0,-4.0001176,55.86,21.49,1031.34 +18-12-23 08:20:58,-4.0,-4.0001178,55.83,21.43,1031.3 +18-12-23 08:23:00,-3.5,-3.5001034,56.05,21.36,1031.31 +18-12-23 08:24:12,-3.5,-3.5001033,56.07,21.32,1031.27 +18-12-23 08:26:14,-3.0,-3.0000874,56.27,21.25,1031.31 +18-12-23 08:27:25,-3.0,-3.0000866,56.25,21.25,1031.32 +18-12-23 08:29:27,-2.5,-2.5000722,56.42,21.24,1031.26 +18-12-23 08:30:38,-2.5,-2.5000718,56.19,21.28,1031.24 +18-12-23 08:32:40,-2.0,-2.0000564,56.37,21.22,1031.22 +18-12-23 08:33:51,-2.0,-2.0000558,56.5,21.21,1031.25 +18-12-23 08:35:53,-1.5,-1.5000416,56.51,21.2,1031.29 +18-12-23 08:37:04,-1.5,-1.5000419,56.53,21.24,1031.23 +18-12-23 08:39:06,-1.0,-1.000027,56.6,21.19,1031.25 +18-12-23 08:40:18,-1.0,-1.0000267,56.26,21.23,1031.21 +18-12-23 08:42:20,-0.5,-0.5000118,56.2,21.32,1031.23 +18-12-23 08:43:31,-0.5,-0.5000117,56.24,21.27,1031.28 +18-12-23 08:45:33,0.0,2.9e-06,56.66,21.18,1031.26 +18-12-23 08:46:44,0.0,3.2e-06,56.87,21.19,1031.31 +18-12-23 08:48:46,0.5,0.5000084,56.41,21.06,1031.25 +18-12-23 08:49:57,0.5,0.5000089,56.58,20.97,1031.17 +18-12-23 08:51:59,1.0,1.0000247,57.06,20.85,1031.2 +18-12-23 08:53:10,1.0,1.0000249,57.46,20.86,1031.2 +18-12-23 08:55:12,1.5,1.5000394,57.64,20.87,1031.1 +18-12-23 08:56:24,1.5,1.5000388,57.43,20.98,1031.08 +18-12-23 08:58:26,2.0,2.000055,57.21,21.0,1031.08 +18-12-23 08:59:37,2.0,2.0000543,57.32,20.97,1031.08 +18-12-23 09:01:39,2.5,2.5000702,57.56,20.88,1031.12 +18-12-23 09:02:50,2.5,2.500071,57.67,20.94,1031.01 +18-12-23 09:04:52,3.0,3.0000869,57.41,20.97,1031.01 +18-12-23 09:06:03,3.0,3.0000871,57.28,21.01,1030.98 +18-12-23 09:08:05,3.5,3.5001018,57.06,21.04,1030.92 +18-12-23 09:09:16,3.5,3.5001021,57.18,21.05,1030.88 +18-12-23 09:11:18,4.0,4.0001174,57.13,21.08,1030.94 +18-12-23 09:12:29,4.0,4.0001168,57.0,21.12,1030.87 +18-12-23 09:14:32,4.5,4.5001331,56.8,21.23,1030.82 +18-12-23 09:15:43,4.5,4.5001328,56.63,21.28,1030.73 +18-12-23 09:17:45,5.0,5.0001484,56.4,21.34,1030.77 +18-12-23 09:18:56,5.0,5.0001492,56.21,21.42,1030.76 +18-12-23 09:20:58,5.5,5.500165,56.25,21.42,1030.77 +18-12-23 09:22:09,5.5,5.5001647,56.21,21.44,1030.81 +18-12-23 09:24:11,6.0,6.0001794,56.13,21.51,1030.82 +18-12-23 09:25:22,6.0,6.000179,56.17,21.49,1030.86 +18-12-23 09:27:24,6.5,6.5001963,56.14,21.56,1030.89 +18-12-23 09:28:35,6.5,6.5001957,56.08,21.56,1030.79 +18-12-23 09:30:38,7.0,7.0002107,56.14,21.6,1030.91 +18-12-23 09:31:49,7.0,7.000211,55.85,21.7,1030.87 +18-12-23 09:33:51,7.5,7.5002257,55.84,21.42,1030.37 +18-12-23 09:35:02,7.5,7.5002262,55.9,21.7,1030.82 +18-12-23 09:37:04,8.0,8.0002418,55.9,21.76,1030.84 +18-12-23 09:38:15,8.0,8.0002421,55.8,21.8,1030.86 +18-12-23 09:40:17,8.5,8.5002572,55.71,21.82,1030.84 +18-12-23 09:41:28,8.5,8.5002559,55.8,21.78,1030.85 +18-12-23 09:43:30,9.0,9.000273,56.0,21.71,1030.87 +18-12-23 09:44:41,9.0,9.0002729,55.96,21.72,1030.83 +18-12-23 09:46:44,9.5,9.5002888,56.04,21.7,1030.84 +18-12-23 09:47:55,9.5,9.500288,56.06,21.68,1030.9 +18-12-23 09:49:57,10.0,10.0003036,56.07,21.68,1030.87 +18-12-23 09:51:08,10.0,10.0003035,56.12,21.67,1030.93 +18-12-23 09:53:10,10.5,10.5003176,56.04,21.71,1031.0 +18-12-23 09:54:21,10.5,10.5003179,56.02,21.69,1030.99 +18-12-23 09:56:23,11.0,11.0003344,56.12,21.65,1030.92 +18-12-23 09:57:34,11.0,11.0003353,56.12,21.66,1030.93 +18-12-23 09:59:36,11.5,11.5003495,56.09,21.68,1030.87 +18-12-23 10:00:48,11.5,11.500349,56.14,21.64,1030.8 diff --git a/solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.jpg b/solartron-7081-001128/datron-4805-XANS1/data/solartron-7081-001128---datron-4805-XANS1---SWEEP4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb2a55f3961e8cc76aa2749fc75e0fd8cc116f59 GIT binary patch literal 22407 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 f8GQ74Z