gpib.py

changeset 7
2e2742648546
parent 2
cd9efa64f6da
child 9
3b50c46fca56
equal deleted inserted replaced
6:6b6dc68588b2 7:2e2742648546
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

mercurial