Upload files to "/"
This commit is contained in:
commit
0a4dcca1c6
143
NV-Scan.py
Normal file
143
NV-Scan.py
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import GPIBPrologix
|
||||||
|
import csv
|
||||||
|
import datetime
|
||||||
|
import bme280
|
||||||
|
import smbus2
|
||||||
|
|
||||||
|
NUMMEAS = 3
|
||||||
|
NUMSAMPLES = 20
|
||||||
|
NUMCHANNELS = 7
|
||||||
|
NULLINGCHANNEL = 7
|
||||||
|
SCANNERSLOT = 2
|
||||||
|
BASESAVENAME = "Prod_VoltageBankLog_Ch"
|
||||||
|
|
||||||
|
bus = smbus2.SMBus(1)
|
||||||
|
calibration_params = bme280.load_calibration_params(bus, 0x76)
|
||||||
|
GPIB = GPIBPrologix.ResourceManager("/dev/ttyACM0")
|
||||||
|
inst2 = GPIB.open_resource(29)
|
||||||
|
inst1 = GPIB.open_resource(28)
|
||||||
|
|
||||||
|
def openCloseGPIB(openClose):
|
||||||
|
global GPIB
|
||||||
|
global inst1
|
||||||
|
global inst2
|
||||||
|
if openClose == "close":
|
||||||
|
GPIB.close
|
||||||
|
elif openClose == "open":
|
||||||
|
GPIB = GPIBPrologix.ResourceManager("/dev/ttyACM0")
|
||||||
|
inst2 = GPIB.open_resource(29)
|
||||||
|
inst1 = GPIB.open_resource(28)
|
||||||
|
|
||||||
|
def getEnvironment(instObj, i2cbus):
|
||||||
|
value = instObj.sample(i2cbus, 0x76, calibration_params)
|
||||||
|
return value
|
||||||
|
|
||||||
|
def closeChannel(instObj, scannerCardSlot, channel):
|
||||||
|
print("----- Closing channel: "+str(channel)+" on slot: "+str(scannerCardSlot)+" -----")
|
||||||
|
instObj.write(":ROUTe:CLOSe (@ "+str(scannerCardSlot)+"!"+str(channel)+")")
|
||||||
|
|
||||||
|
def openChannel(instObj, scannerCardSlot, channel = 9):
|
||||||
|
if channel >= 9:
|
||||||
|
instObj.write(":ROUTe:OPEN ALL")
|
||||||
|
|
||||||
|
def readNVM(instObj):
|
||||||
|
# dummy reading for auto range
|
||||||
|
instObj.write("I1,"+str(1)+"X")
|
||||||
|
instObj.write("H0X")
|
||||||
|
time.sleep(2)
|
||||||
|
print("Selected range from dummy reading: ")
|
||||||
|
# Set amount of samples
|
||||||
|
instObj.write("I1,"+str(NUMSAMPLES)+"X")
|
||||||
|
instObj.write("H0X")
|
||||||
|
#openCloseGPIB("close")
|
||||||
|
time.sleep(NUMSAMPLES*0.55)
|
||||||
|
#openCloseGPIB("open")
|
||||||
|
instObj.write("F2X")
|
||||||
|
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("R0B1X") # auto range
|
||||||
|
inst2.write("K2X")
|
||||||
|
inst2.write("O0P0N0W0X")
|
||||||
|
inst2.write("S2X")
|
||||||
|
inst2.write("T8X") #manual trigger
|
||||||
|
inst2.write("F2X") #All readings from buffer
|
||||||
|
inst2.write("G0X")
|
||||||
|
inst2.write("W1000X") #1s trigger delay
|
||||||
|
|
||||||
|
# Scanner setup
|
||||||
|
inst1.write("*RST")
|
||||||
|
inst1.write(":ROUTe:CONFigure:SLOT1:CTYPe C7058")
|
||||||
|
inst1.write(":ROUTe:CONFigure:SLOT2:CTYPe C7168")
|
||||||
|
inst1.write(":ROUTe:CONFigure:SLOT2:POLE 2")
|
||||||
|
inst1.write(":ROUTe:OPEN ALL")
|
||||||
|
inst1.write(":DISP:ENAB 1")
|
||||||
|
inst1.write(":DISP:WIND1:TEXT:DATA ' '")
|
||||||
|
inst1.write(":DISP:WIND1:TEXT:STAT 1")
|
||||||
|
inst1.write(":DISP:WIND2:TEXT:DATA ' '")
|
||||||
|
inst1.write("DISP:WIND2:TEXT:STAT 1")
|
||||||
|
|
||||||
|
readings = []
|
||||||
|
|
||||||
|
for i in range(NUMCHANNELS):
|
||||||
|
# get the nulled channel value
|
||||||
|
closeChannel(inst1, SCANNERSLOT, NULLINGCHANNEL)
|
||||||
|
print("NULLING...")
|
||||||
|
nullMeanStats = []
|
||||||
|
nullStddevStats = []
|
||||||
|
for nulling in range(NUMMEAS):
|
||||||
|
nullReadings = readNVM(inst2)
|
||||||
|
nullMean, nullStddev = getMeanSTDev(nullReadings)
|
||||||
|
nullMeanStats.append(nullMean)
|
||||||
|
nullStddevStats.append(nullStddev)
|
||||||
|
openChannel(inst1, SCANNERSLOT, 9)
|
||||||
|
|
||||||
|
# read value
|
||||||
|
closeChannel(inst1, SCANNERSLOT, i+1)
|
||||||
|
MeanStats = []
|
||||||
|
StddevStats = []
|
||||||
|
for nulling in range(NUMMEAS):
|
||||||
|
Readings = readNVM(inst2)
|
||||||
|
Mean, Stddev = getMeanSTDev(Readings)
|
||||||
|
MeanStats.append(Mean)
|
||||||
|
StddevStats.append(Stddev)
|
||||||
|
openChannel(inst1, SCANNERSLOT, 9)
|
||||||
|
|
||||||
|
# compensate for nulling
|
||||||
|
meanNull, x = getMeanSTDev(nullMeanStats)
|
||||||
|
stddevNull, x = 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