Add NV-Scan-S7081-HP3488.py
This commit is contained in:
parent
d8ffd587e8
commit
89d3bec139
155
NV-Scan-S7081-HP3488.py
Normal file
155
NV-Scan-S7081-HP3488.py
Normal file
@ -0,0 +1,155 @@
|
||||
import pyvisa
|
||||
import os.path
|
||||
import sys
|
||||
import os
|
||||
import csv
|
||||
import datetime
|
||||
import bme280
|
||||
import time
|
||||
|
||||
NUMMEAS = 1
|
||||
NUMSAMPLES = 4
|
||||
NUMCHANNELS = 7
|
||||
NULLINGCHANNEL = 7
|
||||
SCANNERSLOT = 2
|
||||
AUTOZERO = 1
|
||||
ENVMON = 0
|
||||
BASESAVENAME = "Prod_VoltageBankLog_Ch"
|
||||
|
||||
bus = smbus2.SMBus(1)
|
||||
calibration_params = bme280.load_calibration_params(bus, 0x76)
|
||||
|
||||
rm = pyvisa.ResourceManager()
|
||||
inst2 = rm.open_resource('GPIB0::18::INSTR') # Meter
|
||||
inst1 = rm.open_resource('GPIB0::9::INSTR') # Scanner
|
||||
|
||||
def openCloseGPIB(openClose):
|
||||
global GPIB
|
||||
global inst1
|
||||
global inst2
|
||||
if openClose == "close":
|
||||
GPIB.close
|
||||
elif openClose == "open":
|
||||
inst2 = GPIB.Gpib(0,18) # Meter
|
||||
inst1 = GPIB.Gpib(0,9) # Scanner
|
||||
|
||||
def getEnvironment(instObj, i2cbus):
|
||||
value = instObj.sample(i2cbus, 0x76, calibration_params)
|
||||
return value
|
||||
|
||||
def closeChannel(instObj, scannerCardSlot, channel):
|
||||
print("----- Closing channel: "+str(f"{channel:02}")+" on slot: "+str(scannerCardSlot)+" -----")
|
||||
instObj.write("CLOSE "+str(scannerCardSlot)+str(f"{channel:02}"))
|
||||
|
||||
def openChannel(instObj, scannerCardSlot, channel = 9):
|
||||
if channel >= 9:
|
||||
instObj.write("RESET")
|
||||
else:
|
||||
instObj.write("OPEN "+str(scannerCardSlot)+str(f"{channel:02}"))
|
||||
|
||||
def readNVM(instObj):
|
||||
# dummy reading for auto range
|
||||
instObj.write("MOD=VDC:RAN=AUTO:NI=5")# DCV, AUTO RANGE, 5.5 digits
|
||||
instObj.write("MEAS=SI")
|
||||
time.sleep(2)
|
||||
instObj.write("NI=8")# 8.5 digits
|
||||
output = []
|
||||
# Set amount of samples
|
||||
for i in range(NUMSAMPLES):
|
||||
time.sleep(1)
|
||||
instObj.write("MEAS=SI")
|
||||
time.sleep(110*(AUTOZERO+1))
|
||||
output.append(instObj.read())
|
||||
output = instObj.read().split(' ')
|
||||
output = map(float, output)
|
||||
return (list(output))
|
||||
|
||||
def getMeanSTDev(values):
|
||||
mean = sum(values)/len(values)
|
||||
variance = sum([(x - mean) ** 2 for x in values]) / (len(values) - 1)
|
||||
stddev = variance ** 0.5
|
||||
#print(mean,variance,stddev)
|
||||
return mean, stddev
|
||||
|
||||
# NVM Setup
|
||||
inst2.write("DIS=ON")
|
||||
inst2.write("HISTORY,CLEAR")
|
||||
time.sleep(3)
|
||||
inst2.write("MOD=VDC:RAN=10:NI=8")# 10VDC RANGE, 8.5 digits
|
||||
inst2.write("MEAS=CON")
|
||||
inst2.write("DELI=END") # Delimeter set to END
|
||||
inst2.write("OUTPUT,GP-IB,ON") # Sets output via GPIB
|
||||
inst2.write("DR=OFF") # Turns Drift Correction OFF
|
||||
if AUTOZERO:
|
||||
inst2.write("DR=ON") # Turns Drift Correction ON
|
||||
|
||||
# Scanner setup
|
||||
inst1.write("RESET")
|
||||
inst1.write("CRESET 2")
|
||||
inst1.write("CRESET 3")
|
||||
|
||||
readings = []
|
||||
|
||||
for i in range(NUMCHANNELS):
|
||||
# get the nulled channel value
|
||||
closeChannel(inst1, SCANNERSLOT, i+10)
|
||||
print("NULLING...")
|
||||
nullMeanStatsA = []
|
||||
nullStddevStatsA = []
|
||||
for nulling in range(NUMMEAS):
|
||||
nullReadingsA = readNVM(inst2)
|
||||
nullMeanA, nullStddevA = getMeanSTDev(nullReadingsA)
|
||||
nullMeanStatsA.append(nullMeanA)
|
||||
nullStddevStatsA.append(nullStddevA)
|
||||
nullMeanStats = []
|
||||
nullMeanStatsB = []
|
||||
nullStddevStatsB = []
|
||||
openChannel(inst1, SCANNERSLOT, i+10)
|
||||
|
||||
closeChannel(inst1, SCANNERSLOT, i)
|
||||
for nulling in range(NUMMEAS):
|
||||
nullReadingsB = readNVM(inst2)
|
||||
nullMeanB, nullStddevB = getMeanSTDev(nullReadingsB)
|
||||
nullMeanStatsB.append(nullMeanB)
|
||||
nullStddevStatsB.append(nullStddevB)
|
||||
openChannel(inst1, SCANNERSLOT, i)
|
||||
|
||||
nullMeanStats = nullMeanStatsB - nullMeanStatsA
|
||||
|
||||
# read value
|
||||
closeChannel(inst1, SCANNERSLOT, i)
|
||||
MeanStats = []
|
||||
StddevStats = []
|
||||
for nulling in range(NUMMEAS):
|
||||
Readings = readNVM(inst2)
|
||||
Mean, Stddev = getMeanSTDev(Readings)
|
||||
MeanStats.append(Mean)
|
||||
StddevStats.append(Stddev)
|
||||
openChannel(inst1, SCANNERSLOT, i)
|
||||
|
||||
# compensate for nulling
|
||||
meanNull, x = getMeanSTDev(nullMeanStats)
|
||||
x, stddevNull = getMeanSTDev(nullMeanStats)
|
||||
meanMeas, x = getMeanSTDev(MeanStats)
|
||||
stddevMeas, x = getMeanSTDev(StddevStats)
|
||||
meanCompensated = meanMeas - meanNull
|
||||
stddevCompensated = stddevMeas + stddevNull
|
||||
d = datetime.datetime.now()
|
||||
dx = d - datetime.timedelta(microseconds=d.microsecond)
|
||||
data = getEnvironment(bme280, bus)
|
||||
fields=[dx.strftime("%d-%m-%y %H:%M:%S"),i+1,round(meanNull,10),round(stddevNull,10),round(meanMeas,10),round(stddevMeas,10),round(meanCompensated,10),round(stddevCompensated,10),round(data.humidity,2),round(data.temperature,2),round(data.pressure,2)]
|
||||
print(fields)
|
||||
|
||||
if not os.path.exists("data/"):
|
||||
os.makedirs("data/")
|
||||
if not os.path.exists("data/"+BASESAVENAME+str(i+1)+".csv"):
|
||||
with open("data/"+BASESAVENAME+str(i+1)+".csv", 'w') as file:
|
||||
file.writelines("DateTime;Channel;NullingMean;NullingStddev;MeasuredMean;MeasuredStddev;CompensatedMean;CompensatedStddev;EnvHumidity;EnvTemperature;EnvPressure")
|
||||
else:
|
||||
with open("data/"+BASESAVENAME+str(i+1)+".csv", 'a') as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerow(fields)
|
||||
#inst1.write(":DISP:ENAB 0")
|
||||
inst2.write("A1,''X")
|
||||
#inst1.write(":DISP:TEXT:STAT 0")
|
||||
GPIB.close()
|
||||
Loading…
x
Reference in New Issue
Block a user