From 1593fe84ad44691dfd68391810ab7bcc72c337e4 Mon Sep 17 00:00:00 2001 From: RobertGawron Date: Mon, 26 Aug 2019 16:08:49 +0100 Subject: [PATCH] fix #210 --- software/DataAcquisition/IonizationChamber.py | 7 +-- software/DataAcquisition/config.py | 7 +++ software/DataAcquisition/dmm.py | 28 +++-------- software/DataAcquisition/main.py | 46 ++++++++++++++++--- 4 files changed, 57 insertions(+), 31 deletions(-) diff --git a/software/DataAcquisition/IonizationChamber.py b/software/DataAcquisition/IonizationChamber.py index 191982c..eb0ca64 100644 --- a/software/DataAcquisition/IonizationChamber.py +++ b/software/DataAcquisition/IonizationChamber.py @@ -4,14 +4,15 @@ import mcp3425 class IonizationChamber: def __init__(self, config): self.config = config - self.openSerialPort() - def openSerialPort(self): + + def connect(self): self.serialPort = Serial(self.config.myDeviceId, baudrate = self.config.myBaudrate, timeout=None) self.serialPort.isOpen() self.serialPort.flushInput() - def acquireFromDevice(self): + + def getMeasurement(self): dataIn = self.serialPort.read(5) (msb, lsb) = (dataIn[2], dataIn[3]) deviceMeasurement = mcp3425.convert(msb, lsb, mcp3425.MCP3425_RESOLUTION.R14) diff --git a/software/DataAcquisition/config.py b/software/DataAcquisition/config.py index 8263eaf..4975ff9 100644 --- a/software/DataAcquisition/config.py +++ b/software/DataAcquisition/config.py @@ -1,3 +1,10 @@ +# ionization chamber myDeviceId = '/dev/ttyUSB0' myBaudrate = 9600 +# dmm +idDMM = "USB0::0x2A8D::0x1601::INSTR" +testCommand = "READ?" + + +useDMM = True diff --git a/software/DataAcquisition/dmm.py b/software/DataAcquisition/dmm.py index 0d69ea1..3fc6b14 100644 --- a/software/DataAcquisition/dmm.py +++ b/software/DataAcquisition/dmm.py @@ -1,30 +1,14 @@ -import datetime -import csv import usbtmc class DMM: - def __init__(self, instrumentId): - self.device = usbtmc.Instrument(instrumentId) - - def sendCmd(self, command): - return self.device.ask(command) + def __init__(self, config): + self.config = config -if __name__ == "__main__": - testIterations = 50000 - idDMM = "USB0::0x2A8D::0x1601::INSTR" - testCommand = "READ?" - plotYLabel = "voltage" + def connect(self): + self.device = usbtmc.Instrument(self.config.idDMM) - dmm = DMM(idDMM) - with open('SampleOutputFile.csv', mode='w') as sampleOutputFile: - sampleOutputFileWriter = csv.writer(sampleOutputFile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) - sampleOutputFileWriter.writerow(["Timestamp", "Measurement"]) + def getMeasurement(self): + return self.device.ask(self.config.testCommand) - while(True): - sampleData = float(dmm.sendCmd(testCommand)) - now = datetime.datetime.now() - - sampleOutputFileWriter.writerow([now, sampleData]) - sampleOutputFile.flush() \ No newline at end of file diff --git a/software/DataAcquisition/main.py b/software/DataAcquisition/main.py index f8e656a..1057f38 100644 --- a/software/DataAcquisition/main.py +++ b/software/DataAcquisition/main.py @@ -1,38 +1,72 @@ import datetime from IonizationChamber import IonizationChamber +from dmm import DMM import config class IonizationChamberStateMachine: def __init__(self, config): self.config = config - self.chamber = IonizationChamber(config) + self.deviceMeasurement = 0.0 + self.dmmMeasurement = 0.0 + self.nextState = self.initIonizationChamber + def tick(self): self.nextState() + def initIonizationChamber(self): - self.chamber.openSerialPort() + self.chamber = IonizationChamber(config) + self.chamber.connect() + + if config.useDMM: + self.nextState = self.initDMM + else: + self.nextState = self.initOutputFile + + + def initDMM(self): + self.dmm = DMM(config) + self.dmm.connect() + self.nextState = self.initOutputFile + def initOutputFile(self): self.logFile = open('data.csv', 'w') - self.logFile.write("Time,Counter\n") + self.logFile.write("Time,Counter,DMM\n") + self.nextState = self.getMeasurementFromIonizationChamber + def getMeasurementFromIonizationChamber(self): - self.deviceMeasurement = self.chamber.acquireFromDevice() + self.deviceMeasurement = self.chamber.getMeasurement() + + if config.useDMM: + self.nextState = self.getMeasurementFromDMM + else: + self.nextState = self.saveMeasurement + + + def getMeasurementFromDMM(self): + self.dmmMeasurement = self.dmm.getMeasurement() + self.nextState = self.saveMeasurement + def saveMeasurement(self): now = datetime.datetime.now() - self.logFile.write("{0},{1}\n".format(now, self.deviceMeasurement)) + self.logFile.write("{0},{1},{2}\n".format(now, self.deviceMeasurement, self.dmmMeasurement)) self.logFile.flush() + self.nextState = self.showMeasurementToUser + def showMeasurementToUser(self): - print(self.deviceMeasurement) + print("{0}, {1}".format(self.deviceMeasurement, self.dmmMeasurement)) + self.nextState = self.getMeasurementFromIonizationChamber