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