Blame view
datalogger-gui.py
8.27 KB
bb3889092 Add files via upload |
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import time, os, instruments, inspect, sys, threading import PyQt4.QtGui as QtGui from PyQt4.QtCore import pyqtSlot #============================================================================== #============================================================================== class acq_routine(): |
9058343c5 some minor fixes |
13 14 |
def __init__(self, instrument, channels, vtypes, address, path = os.getcwd(), samplingtime = 1, fileduration = 24*3600): exec('self.instrument = instruments.%s.%s(%s, %s, "%s")'%(instrument, instrument, channels, vtypes, address)) |
bb3889092 Add files via upload |
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
self.path = path self.samplingtime = samplingtime self.fileduration = fileduration def makeTree(self): try: year = time.strftime("%Y", time.gmtime(self.t0)) month = time.strftime("%Y-%m", time.gmtime(self.t0)) os.chdir(self.path + '/' + year + '/' + month) except: try: os.chdir(self.path + '/' + year) os.mkdir(month) os.chdir(self.path + '/' + year + '/' + month) except: os.chdir(self.path) os.mkdir(year) os.chdir(self.path + '/' + year) os.mkdir(month) os.chdir(self.path + '/' + year + '/' + month) def connect(self): self.instrument.connect() self.t0 = time.time() self.filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(self.t0)) + '-' + self.instrument.model() + '.dat' self.makeTree() self.data_file = open(self.filename, 'wr', 0) def start(self): tic = time.time() if (time.time() - self.t0 >= self.fileduration) & (self.fileduration >0 ): self.data_file.close() self.t0 = time.time() self.filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(self.t0)) + '-' + self.instrument.model() + '.dat' self.makeTree() self.data_file = open(self.filename, 'wr', 0) #epoch time epoch = time.time() #MJD time mjd = epoch / 86400.0 + 40587 # Meas values meas = self.instrument.getValue() meas = meas.replace(",", "\t") meas = meas.replace(";", "\t") meas = meas.replace("+", "") string = "%f\t%f\t%s" % (epoch, mjd, meas) self.data_file.write(string) # Write in a file print(string) self.thread = threading.Timer(self.samplingtime - (time.time() - tic), self.start) self.thread.start() def stop(self): self.thread.cancel() self.instrument.disconnect() self.data_file.close() #============================================================================== #============================================================================== class mainGui(): def __init__(self): self.setWindow() self.setSignalsSlots() self.runApp() def setWindow(self): self.a = QtGui.QApplication(sys.argv) self.w = QtGui.QMainWindow() self.w.resize(640, 480) self.w.setWindowTitle('datalogger-gui') self.wid = QtGui.QWidget() self.w.setCentralWidget(self.wid) self.layout = QtGui.QGridLayout() self.wid.setLayout(self.layout) self.comboInst = QtGui.QComboBox() self.layout.addWidget(self.comboInst, 0, 0) |
9058343c5 some minor fixes |
99 |
self.address = QtGui.QLineEdit() |
c8a8ff0f6 modify gui |
100 101 102 |
self.address.setMinimumWidth(140) self.address.setMaximumWidth(140) self.layout.addWidget(self.address, 0, 1) |
bb3889092 Add files via upload |
103 104 105 |
self.startButton = QtGui.QPushButton() self.startButton.setText('Start log') |
c8a8ff0f6 modify gui |
106 |
self.layout.addWidget(self.startButton, 99, 0) |
7bc4035fc enable startButto... |
107 |
self.startButton.setEnabled(False) |
bb3889092 Add files via upload |
108 109 110 |
self.stopButton = QtGui.QPushButton() self.stopButton.setText('Stop log') |
c8a8ff0f6 modify gui |
111 |
self.layout.addWidget(self.stopButton, 99, 1) |
faa244fdd Enable/disable st... |
112 |
self.stopButton.setEnabled(False) |
bb3889092 Add files via upload |
113 114 115 |
self.textDisplay = QtGui.QLabel() self.textDisplay.setText('>>') |
c8a8ff0f6 modify gui |
116 |
self.layout.addWidget(self.textDisplay, 99, 2) |
bb3889092 Add files via upload |
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
self.setComboInst() self.updateSignal() def setComboInst(self): for name, obj in inspect.getmembers(instruments): if inspect.ismodule(obj) and name.startswith('__') == False and name.startswith('abstract') == False: self.comboInst.addItem(name) def setSignalsSlots(self): self.comboInst.currentIndexChanged.connect(self.updateSignal) self.startButton.clicked.connect(self.startLog) self.stopButton.clicked.connect(self.stopLog) def runApp(self): self.w.show() sys.exit(self.a.exec_()) @pyqtSlot() def updateSignal(self): for i in reversed(range(5, self.layout.count())): self.layout.itemAt(i).widget().setParent(None) |
9058343c5 some minor fixes |
139 |
defaultAddress = '' |
bb3889092 Add files via upload |
140 141 142 143 144 |
channelsAviables = [] vtypesAviables = [] exec('channelsAviables = instruments.%s.ALL_CHANNELS'%self.comboInst.currentText()) exec('vtypesAviables = instruments.%s.ALL_VAL_TYPE'%self.comboInst.currentText()) |
9058343c5 some minor fixes |
145 |
exec('defaultAddress = instruments.%s.ADDRESS'%self.comboInst.currentText()) |
bb3889092 Add files via upload |
146 |
|
9058343c5 some minor fixes |
147 |
self.address.setText(defaultAddress) |
bb3889092 Add files via upload |
148 149 150 151 152 153 154 155 156 157 158 159 |
self.checkBoxChannels = [None]*len(channelsAviables) self.chListVtypes = [None]*len(self.checkBoxChannels) for i in range(len(self.checkBoxChannels)): self.checkBoxChannels[i] = QtGui.QCheckBox() self.checkBoxChannels[i].setText(channelsAviables[i]) self.checkBoxChannels[i].setChecked(False) self.chListVtypes[i] = QtGui.QListWidget() for vtype in vtypesAviables: self.chListVtypes[i].addItem(vtype) self.chListVtypes[i].setCurrentRow(0) |
c8a8ff0f6 modify gui |
160 161 |
self.layout.addWidget(self.checkBoxChannels[i], i+3, 1) self.layout.addWidget(self.chListVtypes[i], i+3, 2) |
bb3889092 Add files via upload |
162 163 |
self.checkBoxChannels[i].stateChanged.connect(self.infoSignal) self.chListVtypes[i].currentItemChanged.connect(self.infoSignal) |
9058343c5 some minor fixes |
164 |
self.address.textChanged.connect(self.infoSignal) |
faa244fdd Enable/disable st... |
165 |
|
bb3889092 Add files via upload |
166 167 168 169 170 |
self.infoSignal() @pyqtSlot() def infoSignal(self): self.instToLog = self.comboInst.currentText() |
9058343c5 some minor fixes |
171 |
self.addressToLog = self.address.text() |
bb3889092 Add files via upload |
172 173 174 175 176 |
self.chToLog = [] self.vTypeToLog = [] for i in range(len(self.checkBoxChannels)): if self.checkBoxChannels[i].isChecked(): |
8b41ae5b5 enable/disable vt... |
177 |
self.chListVtypes[i].setEnabled(True) |
bb3889092 Add files via upload |
178 179 |
self.chToLog.append(str(self.checkBoxChannels[i].text())) self.vTypeToLog.append(str(self.chListVtypes[i].currentItem().text())) |
8b41ae5b5 enable/disable vt... |
180 181 |
else: self.chListVtypes[i].setEnabled(False) |
7bc4035fc enable startButto... |
182 183 184 185 186 187 188 |
allChannelsUnchecked = False for i in self.checkBoxChannels: allChannelsUnchecked = allChannelsUnchecked or i.isChecked() if allChannelsUnchecked == False: self.startButton.setEnabled(False) else: self.startButton.setEnabled(True) |
9058343c5 some minor fixes |
189 |
self.textDisplay.setText('>> %s@%s - %s - %s'%(self.instToLog, self.addressToLog, self.chToLog, self.vTypeToLog)) |
bb3889092 Add files via upload |
190 |
|
9058343c5 some minor fixes |
191 |
self.myLog = acq_routine(self.instToLog, self.chToLog, self.vTypeToLog, self.addressToLog) |
bb3889092 Add files via upload |
192 193 194 |
@pyqtSlot() def startLog(self): |
faa244fdd Enable/disable st... |
195 196 |
self.startButton.setEnabled(False) self.stopButton.setEnabled(True) |
9058343c5 some minor fixes |
197 |
self.address.setEnabled(False) |
120da9952 enable/disable co... |
198 |
self.comboInst.setEnabled(False) |
f5cf6b2b6 disable address a... |
199 200 |
for i in self.checkBoxChannels: i.setEnabled(False) |
56312b9ab improve GUI |
201 202 |
for i in self.chListVtypes: i.setEnabled(False) |
bb3889092 Add files via upload |
203 204 205 206 207 |
self.myLog.connect() self.myLog.start() @pyqtSlot() def stopLog(self): |
faa244fdd Enable/disable st... |
208 209 |
self.startButton.setEnabled(True) self.stopButton.setEnabled(False) |
9058343c5 some minor fixes |
210 |
self.address.setEnabled(True) |
120da9952 enable/disable co... |
211 |
self.comboInst.setEnabled(True) |
56312b9ab improve GUI |
212 213 214 215 216 217 218 |
for i in range(len(self.checkBoxChannels)): if self.checkBoxChannels[i].isChecked(): self.checkBoxChannels[i].setEnabled(True) self.chListVtypes[i].setEnabled(True) else: self.checkBoxChannels[i].setEnabled(True) self.chListVtypes[i].setEnabled(False) |
bb3889092 Add files via upload |
219 220 221 222 223 224 225 |
self.myLog.stop() #============================================================================== #============================================================================== if __name__ == "__main__": mainGui() |