Mon, 10 Dec 2007 21:22:33 +0100
small cleanup
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
1 | import sys, os |
0 | 2 | import time |
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
3 | import gpib |
0 | 4 | |
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
5 | class GPIBplotter(gpib.GPIB): |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
6 | replies={ |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
7 | "OE": "0", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
8 | "OH": "0,0,10000,7500", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
9 | "OI": "7470A", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
10 | "OP": "0,0,10000,7500", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
11 | "OO": "0,1,0,0,0,0,0,0", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
12 | "OF": "40,40", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
13 | "OS": "24", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
14 | } |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
15 | def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
16 | address=0): |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
17 | super(GPIBplotter, self).__init__(device, baudrate, timeout, address, mode=0) |
0 | 18 | |
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
19 | def load_plot(self, wait_timeout=0): |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
20 | """ |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
21 | Make a full plot process. |
0 | 22 | |
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
23 | 'wait_timeout' is the first timeout. Same semantic as the |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
24 | 'timeout' property of a serial connection (if set to None, it |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
25 | will block until the GPIB device actually perform a plot |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
26 | command.) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
27 | """ |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
28 | res = "" |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
29 | i=0 |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
30 | replies = self._replies.copy() |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
31 | if wait_timeout is not None or not isinstance(wait_timeout, int): |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
32 | raise TypeError |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
33 | if wait_timeout<0: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
34 | raise ValueError |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
35 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
36 | self._cnx.timeout = wait_timeout |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
37 | firstloop = True |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
38 | while i<self._retries: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
39 | l = self._cnx.readline().strip() |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
40 | if firstloop: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
41 | self._cnx.timeout = self._timeout |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
42 | firstloop = False |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
43 | if l == "": |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
44 | i += 1 |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
45 | for k, v in replies.items(): |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
46 | if res.endswith(k) or res.endswith(k+';'): |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
47 | self._cnx.write("%s"%v) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
48 | if k == "OS": |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
49 | replies[k] = "16" |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
50 | break |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
51 | self._cnx.write('\r') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
52 | if i > self._retries/2: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
53 | time.sleep(self._timeout) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
54 | continue |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
55 | res += l + "\n" |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
56 | i = 0 |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
57 | return res |
0 | 58 | |
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
59 | if __name__ == '__main__': |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
60 | import optparse |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
61 | opt = optparse.OptionParser('A simple HP7470A GPIB plotter emulator for USB-GPIB bundle (ProLogix)') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
62 | opt.add_option('-f', '--filename', default=None, |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
63 | dest='filename', |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
64 | help='Output filename. If not set, write to stdout') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
65 | opt.add_option('-d', '--device', default='/dev/ttyUSB0', |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
66 | dest='device', |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
67 | help='Device of the RS232 connection (default: /dev/ttyUSB0)', |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
68 | ) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
69 | opt.add_option('-a', '--address', default=0, |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
70 | dest='address', |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
71 | help='GPIB address of the device', |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
72 | ) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
73 | opt.add_option('-l', '--loop', default=False, |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
74 | action="store_true", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
75 | dest="loop", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
76 | help="Continuously wait for new plots. If set, filename must be set and files will be created with _n at the end") |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
77 | opt.add_option('-v', '--verbose', default=False, |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
78 | action="store_true", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
79 | dest="verbose", |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
80 | help="Verbose mode",) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
81 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
82 | options, argv = opt.parse_args(sys.argv) |
0 | 83 | |
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
84 | if options.loop and not options.filename: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
85 | opt.error('If loop is set, you *must* provide a filename') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
86 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
87 | if options.filename: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
88 | outf = open(options.filename, "w") |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
89 | else: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
90 | outf = sys.stdout |
0 | 91 | |
92 | ||
1
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
93 | try: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
94 | plotter = GPIBplotter(device=options.device, address=options.address) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
95 | except (gpib.SerialException, gpib.ConnectionError), e: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
96 | sys.stderr.write('Connection error:\n\t' + '\n\t'.join([str(x) for x in e.args]) + '\n') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
97 | sys.stderr.write('Check your parameters\n') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
98 | sys.exit(1) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
99 | if options.verbose: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
100 | sys.stderr.write('connection established\n') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
101 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
102 | loop = True |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
103 | nloop = 0 |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
104 | while loop: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
105 | plot = plotter.load_plot(wait_timeout=1) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
106 | if options.verbose: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
107 | sys.stderr.write('.') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
108 | if plot: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
109 | outf.write(plot) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
110 | if options.verbose: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
111 | sys.stderr.write('\n') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
112 | sys.stderr.write('Received a new plot (written to %s)\n'%outf.name) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
113 | if not options.loop: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
114 | loop = False |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
115 | else: |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
116 | nloop += 1 |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
117 | fname, ext = os.path.splitext(options.filename) |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
118 | outf = open(fname + "_%d"%nloop + ext, 'w') |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
119 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
120 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
121 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
122 | |
0670b1f5c155
make 7470 plotter emulator more user friendly & several file renames
David Douard <david.douard@logilab.fr>
parents:
0
diff
changeset
|
123 |