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