gpib.py

Tue, 11 Dec 2007 00:07:33 +0100

author
David Douard <david.douard@logilab.fr>
date
Tue, 11 Dec 2007 00:07:33 +0100
changeset 7
2e2742648546
parent 2
cd9efa64f6da
child 9
3b50c46fca56
permissions
-rw-r--r--

fixes in gpib module

"""
gpib: create serial connection to GPIB-USB device (ProLogix is the
only supported device for now).
"""
import serial
from serial.serialutil import SerialException
import time

class ConnectionError(Exception):
    pass

class GPIB(object):
    _retries = 15
    def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1,
                    address=0, mode=1):        
        self._cnx = serial.Serial(port=device, baudrate=baudrate, timeout=timeout)
        self._timeout = timeout
        
        self.set_mode(mode)
        self.set_address(address)

    def _set_cmd(self, cmd, value):
        self._cnx.write('++%s %d\r'%(cmd, value))
        self._cnx.write('++%s\r'%(cmd))
        rval = self._read().strip()
        if not rval.isdigit() or int(rval) != value:
            raise ConnectionError("Can't set GPIB %s to %s [ret=%s]"%(cmd, value, repr(rval)))
        
    def set_address(self, address):        
        self._set_cmd('addr', address)
        self._adress = address
        
    def set_mode(self, mode):
        self._set_cmd('mode', mode)
        self._mode = mode
        
    def _read(self):
        for i in range(self._retries):
            rdata = self._cnx.readline()
            if rdata.strip() != "":
                break
            time.sleep(self._timeout)
        return rdata

mercurial