Commit bb3889092e0d7ebbd1f8b26342429def41df0a56
Committed by
GitHub
1 parent
97c7affa24
Exists in
master
Add files via upload
Showing 1 changed file with 194 additions and 0 deletions Inline Diff
datalogger-gui.py
File was created | 1 | #!/usr/bin/env python | ||
2 | ||||
3 | # -*- coding: utf-8 -*- | |||
4 | ||||
5 | import time, os, instruments, inspect, sys, threading | |||
6 | import PyQt4.QtGui as QtGui | |||
7 | from PyQt4.QtCore import pyqtSlot | |||
8 | ||||
9 | #============================================================================== | |||
10 | #============================================================================== | |||
11 | ||||
12 | class acq_routine(): | |||
13 | def __init__(self, instrument, channels, vtypes, adress, path = os.getcwd(), samplingtime = 1, fileduration = 24*3600): | |||
14 | exec('self.instrument = instruments.%s.%s(%s, %s, "%s")'%(instrument, instrument, channels, vtypes, adress)) | |||
15 | self.path = path | |||
16 | self.samplingtime = samplingtime | |||
17 | self.fileduration = fileduration | |||
18 | ||||
19 | def makeTree(self): | |||
20 | try: | |||
21 | year = time.strftime("%Y", time.gmtime(self.t0)) | |||
22 | month = time.strftime("%Y-%m", time.gmtime(self.t0)) | |||
23 | os.chdir(self.path + '/' + year + '/' + month) | |||
24 | except: | |||
25 | try: | |||
26 | os.chdir(self.path + '/' + year) | |||
27 | os.mkdir(month) | |||
28 | os.chdir(self.path + '/' + year + '/' + month) | |||
29 | except: | |||
30 | os.chdir(self.path) | |||
31 | os.mkdir(year) | |||
32 | os.chdir(self.path + '/' + year) | |||
33 | os.mkdir(month) | |||
34 | os.chdir(self.path + '/' + year + '/' + month) | |||
35 | ||||
36 | def connect(self): | |||
37 | self.instrument.connect() | |||
38 | ||||
39 | self.t0 = time.time() | |||
40 | self.filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(self.t0)) + '-' + self.instrument.model() + '.dat' | |||
41 | self.makeTree() | |||
42 | self.data_file = open(self.filename, 'wr', 0) | |||
43 | ||||
44 | def start(self): | |||
45 | tic = time.time() | |||
46 | ||||
47 | if (time.time() - self.t0 >= self.fileduration) & (self.fileduration >0 ): | |||
48 | self.data_file.close() | |||
49 | ||||
50 | self.t0 = time.time() | |||
51 | self.filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(self.t0)) + '-' + self.instrument.model() + '.dat' | |||
52 | self.makeTree() | |||
53 | self.data_file = open(self.filename, 'wr', 0) | |||
54 | ||||
55 | #epoch time | |||
56 | epoch = time.time() | |||
57 | #MJD time | |||
58 | mjd = epoch / 86400.0 + 40587 | |||
59 | # Meas values | |||
60 | meas = self.instrument.getValue() | |||
61 | meas = meas.replace(",", "\t") | |||
62 | meas = meas.replace(";", "\t") | |||
63 | meas = meas.replace("+", "") | |||
64 | ||||
65 | string = "%f\t%f\t%s" % (epoch, mjd, meas) | |||
66 | self.data_file.write(string) # Write in a file | |||
67 | print(string) | |||
68 | ||||
69 | self.thread = threading.Timer(self.samplingtime - (time.time() - tic), self.start) | |||
70 | self.thread.start() | |||
71 | ||||
72 | def stop(self): | |||
73 | self.thread.cancel() | |||
74 | self.instrument.disconnect() | |||
75 | self.data_file.close() | |||
76 | ||||
77 | #============================================================================== | |||
78 | #============================================================================== | |||
79 | ||||
80 | class mainGui(): | |||
81 | def __init__(self): | |||
82 | self.setWindow() | |||
83 | self.setSignalsSlots() | |||
84 | self.runApp() | |||
85 | ||||
86 | def setWindow(self): | |||
87 | self.a = QtGui.QApplication(sys.argv) | |||
88 | self.w = QtGui.QMainWindow() | |||
89 | self.w.resize(640, 480) | |||
90 | self.w.setWindowTitle('datalogger-gui') | |||
91 | ||||
92 | self.wid = QtGui.QWidget() | |||
93 | self.w.setCentralWidget(self.wid) | |||
94 | self.layout = QtGui.QGridLayout() | |||
95 | self.wid.setLayout(self.layout) | |||
96 | ||||
97 | self.comboInst = QtGui.QComboBox() | |||
98 | self.layout.addWidget(self.comboInst, 0, 0) | |||
99 | ||||
100 | self.adress = QtGui.QLineEdit() | |||
101 | self.adress.setMaximumWidth(120) | |||
102 | self.layout.addWidget(self.adress, 99, 0) | |||
103 | ||||
104 | self.startButton = QtGui.QPushButton() | |||
105 | self.startButton.setText('Start log') | |||
106 | self.layout.addWidget(self.startButton, 99, 1) | |||
107 | ||||
108 | self.stopButton = QtGui.QPushButton() | |||
109 | self.stopButton.setText('Stop log') | |||
110 | self.layout.addWidget(self.stopButton, 99, 2) | |||
111 | ||||
112 | self.textDisplay = QtGui.QLabel() | |||
113 | self.textDisplay.setText('>>') | |||
114 | self.layout.addWidget(self.textDisplay, 100, 2) | |||
115 | ||||
116 | self.setComboInst() | |||
117 | self.updateSignal() | |||
118 | ||||
119 | def setComboInst(self): | |||
120 | for name, obj in inspect.getmembers(instruments): | |||
121 | if inspect.ismodule(obj) and name.startswith('__') == False and name.startswith('abstract') == False: | |||
122 | self.comboInst.addItem(name) | |||
123 | ||||
124 | def setSignalsSlots(self): | |||
125 | self.comboInst.currentIndexChanged.connect(self.updateSignal) | |||
126 | self.startButton.clicked.connect(self.startLog) | |||
127 | self.stopButton.clicked.connect(self.stopLog) | |||
128 | ||||
129 | def runApp(self): | |||
130 | self.w.show() | |||
131 | sys.exit(self.a.exec_()) | |||
132 | ||||
133 | @pyqtSlot() | |||
134 | def updateSignal(self): | |||
135 | for i in reversed(range(5, self.layout.count())): | |||
136 | self.layout.itemAt(i).widget().setParent(None) | |||
137 | ||||
138 | defaultAdress = '' | |||
139 | channelsAviables = [] | |||
140 | vtypesAviables = [] | |||
141 | ||||
142 | exec('channelsAviables = instruments.%s.ALL_CHANNELS'%self.comboInst.currentText()) | |||
143 | exec('vtypesAviables = instruments.%s.ALL_VAL_TYPE'%self.comboInst.currentText()) | |||
144 | exec('defaultAdress = instruments.%s.ADRESS'%self.comboInst.currentText()) | |||
145 | ||||
146 | self.adress.setText(defaultAdress) | |||
147 | ||||
148 | self.checkBoxChannels = [None]*len(channelsAviables) | |||
149 | self.chListVtypes = [None]*len(self.checkBoxChannels) | |||
150 | ||||
151 | for i in range(len(self.checkBoxChannels)): | |||
152 | self.checkBoxChannels[i] = QtGui.QCheckBox() | |||
153 | self.checkBoxChannels[i].setText(channelsAviables[i]) |