8 |
8 |
9 class ConnectionError(Exception): |
9 class ConnectionError(Exception): |
10 pass |
10 pass |
11 |
11 |
12 class GPIB(object): |
12 class GPIB(object): |
13 _retries = 10 |
13 _retries = 15 |
14 def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, |
14 def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, |
15 address=0, mode=1): |
15 address=0, mode=1): |
16 self._cnx = serial.Serial(port=device, baudrate=baudrate, timeout=timeout) |
16 self._cnx = serial.Serial(port=device, baudrate=baudrate, timeout=timeout) |
17 self._timeout = timeout |
17 self._timeout = timeout |
18 |
18 |
19 self.set_mode(mode) |
19 self.set_mode(mode) |
20 if mode == 1: |
20 self.set_address(address) |
21 self.set_address(address) |
|
22 |
21 |
23 def _set_cmd(self, cmd, value): |
22 def _set_cmd(self, cmd, value): |
24 self._cnx.write('++%s %d\r'%(cmd, value)) |
23 self._cnx.write('++%s %d\r'%(cmd, value)) |
25 rval = self._read() |
24 self._cnx.write('++%s\r'%(cmd)) |
|
25 rval = self._read().strip() |
26 if not rval.isdigit() or int(rval) != value: |
26 if not rval.isdigit() or int(rval) != value: |
27 raise ConnectionError("Can't set GPIB %s to %s"%(cmd, value)) |
27 raise ConnectionError("Can't set GPIB %s to %s [ret=%s]"%(cmd, value, repr(rval))) |
28 |
28 |
29 def set_address(self, address): |
29 def set_address(self, address): |
30 self._set_cmd('addr', address) |
30 self._set_cmd('addr', address) |
31 self._adress = address |
31 self._adress = address |
32 |
32 |
33 def set_mode(self, mode): |
33 def set_mode(self, mode): |
34 self._set_cmd('mode', mode) |
34 self._set_cmd('mode', mode) |
35 self._mode = mode |
35 self._mode = mode |
36 |
36 |
37 def _read(self): |
37 def _read(self): |
38 for i in range(self._retries): |
38 for i in range(self._retries): |
39 rdata = self._cnx.readline() |
39 rdata = self._cnx.readline() |
40 if rdata.strip() != "": |
40 if rdata.strip() != "": |
41 break |
41 break |
42 time.sleep(self._timeout) |
42 time.sleep(self._timeout) |
43 return rdata |
43 return rdata |