Commit fb53d3a627cd501ee3849ba6e24c9eac2c24d17c

Authored by bma
Committed by bma
1 parent f7b8018088
Exists in master

Add files via upload

Showing 1 changed file with 210 additions and 0 deletions Inline Diff

File was created 1 #!/usr/bin/env python
2
3 # -*- coding: utf-8 -*-
4
5 import argparse, time, os, instruments, inspect
6
7 #==============================================================================
8
9 # Path
10 PATH = os.getcwd()
11 # Sampling time acquisition
12 SAMPLING_TIME = 1
13 # File duration
14 FILE_DURATION = 3600*24
15 # Default instrument
16 INSTRUMENT = None
17 # Default instrument adress
18 ADRESS = None
19 #Default val type
20 VAL_TYPE = None
21
22 #==============================================================================
23
24 def parse():
25 """
26 Specific parsing procedure for transfering data from any abstract instrument.
27 :returns: populated namespace (parser)
28 """
29
30 parser = argparse.ArgumentParser(description = 'Acquire data from INSTRUMENT',
31 epilog = 'Example: \'./datalogger.py -i myInstrument -st 10\' logs myInstrument every 10 seconds to output file YYYYMMDD-HHMMSS-INSTRUMENT.dat')
32
33 parser.add_argument('-l',
34 action='store_true',
35 dest='list',
36 default=False,
37 help='List all available instruments')
38
39 parser.add_argument('-I',
40 action='store',
41 dest='instLog',
42 default=INSTRUMENT,
43 help='Instrument to log (default '+str(INSTRUMENT)+')')
44
45 parser.add_argument('-ip',
46 action='store',
47 dest='adress',
48 default=ADRESS,
49 help='Adress of instrument (IP, USB...) (default '+str(ADRESS)+')')
50
51 parser.add_argument('-v',
52 action='store',
53 dest='vtype',
54 default=VAL_TYPE,
55 help='Value type to measure (default '+str(VAL_TYPE)+')')
56
57 parser.add_argument('-st',
58 action='store',
59 dest='samplingtime',
60 default=SAMPLING_TIME,
61 help='Sampling time acquistion (default '+str(SAMPLING_TIME)+' second)')
62
63 parser.add_argument('-fd',
64 action='store',
65 dest='fileduration',
66 default=FILE_DURATION,
67 help='File duration (infinite : \'-fd -1\') (default '+str(FILE_DURATION)+' second)')
68
69 parser.add_argument('-p',
70 action='store',
71 dest='path',
72 default=PATH,
73 help='Absolute path (default '+PATH+')')
74
75 args = parser.parse_args()
76 return args
77
78 #==============================================================================
79
80 def acq_routine(instrument, path, samplingtime, fileduration):
81 instrument.connect()
82 t0 = time.time()
83 filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(t0)) + '-' + instrument.model() + '.dat'
84 print('Opening %s' %filename)
85 try:
86 year = time.strftime("%Y", time.gmtime(t0))
87 month = time.strftime("%Y-%m", time.gmtime(t0))
88 os.chdir(path + '/' + year + '/' + month)
89 except:
90 try:
91 os.chdir(path + '/' + year)
92 os.mkdir(month)
93 os.chdir(path + '/' + year + '/' + month)
94 except:
95 os.chdir(path)
96 os.mkdir(year)
97 os.chdir(path + '/' + year)
98 os.mkdir(month)
99 os.chdir(path + '/' + year + '/' + month)
100
101 data_file = open(filename, 'wr', 0)
102
103 # Infinite loop
104 while True:
105 # tic
106 tic = time.time()
107
108 if time.time() - t0 >= fileduration:
109 t0 = time.time()
110 print('Closing %s\n' %filename)
111 data_file.close()
112
113 try:
114 year = time.strftime("%Y", time.gmtime(t0))
115 month = time.strftime("%Y-%m", time.gmtime(t0))
116 os.chdir(path + '/' + year + '/' + month)
117 except:
118 try:
119 os.chdir(path + '/' + year)
120 os.mkdir(month)
121 os.chdir(path + '/' + year + '/' + month)
122 except:
123 os.chdir(path)
124 os.mkdir(year)
125 os.chdir(path + '/' + year)
126 os.mkdir(month)
127 os.chdir(path + '/' + year + '/' + month)
128
129 filename = time.strftime("%Y%m%d-%H%M%S", time.gmtime(t0)) + '-' + instrument.model() + '.dat'
130 print('Opening %s\n' %filename)
131 data_file = open(filename, 'wr', 0)
132
133 try:
134 try:
135 #epoch time
136 epoch = time.time()
137 #MJD time
138 mjd = epoch / 86400.0 + 40587
139 # Meas values
140 meas = instrument.getValue()
141 meas = meas.replace(",", "\t")
142 meas = meas.replace(";", "\t")
143 meas = meas.replace("+", "")
144
145 string = "%f\t%f\t%s" % (epoch, mjd, meas)
146 data_file.write(string) # Write in a file
147 print(string)
148
149 # Sleep until sampletime
150 time.sleep(samplingtime - (time.time() - tic))
151
152 except Exception as ex:
153 print 'Exception during controler data reading: ' + str(ex)
154
155 except KeyboardInterrupt:
156 print '\n --> Disconnected'
157 instrument.disconnect()
158 data_file.close()
159
160 # To stop the loop in a clean way
161 break
162
163 #==============================================================================
164
165 def main():
166 """
167 Main script
168 """
169 # Parse command line
170 args = parse()
171 # path
172 path = args.path
173 # Sampling time
174 samplingtime=float(args.samplingtime)