Пример #1
0
class K2750(object):
    def __init__(self, port='/dev/ttyUSB0', clr=True, ident=True):
        self.gpib = PUGpib(port=port,
                           addr=16,
                           clr=clr,
                           eos=3,
                           ser_timeout=1.0,
                           gpib_timeout=0.9)
        self.func = None
        self.vendor = None
        self.model = None
        self.sn = None
        if ident:
            vendor, model = self.ident()
            if (vendor, model) != ('KEITHLEY INSTRUMENTS INC.', 'MODEL 2750'):
                raise ValueError('Bad instrument: %s, %s' % (vendor, model))

    def ident(self):
        # just vendor, model
        return self.ident_ex()[0:2]

    def ident_ex(self):
        '''
        Returns the manufacturer, model number, serial
        number, and firmware revision levels of the
        unit.
        ['KEITHLEY INSTRUMENTS INC.', 'MODEL 2750', '0967413', 'A07  /A01']
        '''
        ret = self.gpib.sendrecv_str("*IDN?").split(',')
        self.vendor = ret[0]
        self.model = ret[1]
        sn = ret[2]
        fw = ret[3]
        return (self.vendor, self.model, sn, fw)

    def card_sn(self):
        return self.gpib.sendrecv_str("SYSTem:CARD1:SNUMber?")

    def tim_int(self):
        '''Query timer interval'''
        return float(self.gpib.snd_rcv('TRIGger:TIMer?'))

    def local(self):
        '''Go to local mode'''
        # Error -113
        self.gpib.snd('GTL')

    def set_beep(self, en):
        '''
        You can disable the beeper for limits and continuity tests. However, when limits or CONT
        is again selected, the beeper will automatically enable.
        '''
        if en:
            self.gpib.snd("SYSTEM:BEEPER OFF")
        else:
            self.gpib.snd("SYSTEM:BEEPER ON")

    def error(self):
        '''Get next error from queue'''
        return self.gpib.snd_rcv("SYSTEM:ERROR?")

    def errors(self):
        ret = []
        while True:
            e = self.error()
            if e == '0,"No error"':
                return ret
            ret.append(e)

    def volt_dc_ex(self):
        if self.func != 'VOLT:DC':
            self.gpib.snd(":FUNC 'VOLT:DC'")
            time.sleep(0.20)
            self.func = 'VOLT:DC'

        raw = self.gpib.snd_rcv(":DATA?")
        m = volt_dc_re.match(raw)
        if not m:
            raise Exception("Bad reading: %s" % (raw, ))
        vdc = float(m.group(1))
        secs = float(m.group(2))
        rdng = float(m.group(3))
        return {"VDC": vdc, "SECS": secs, "RDNG#": rdng}

    def volt_dc(self):
        return self.volt_dc_ex()["VDC"]

    def curr_dc_ex(self):
        if self.func != 'CURR:DC':
            self.gpib.snd(":FUNC 'CURR:DC'")
            # Seems to take at least 0.1 sec
            # had problems with 0.15
            time.sleep(0.20)
            self.func = 'CURR:DC'

        raw = self.gpib.snd_rcv(":DATA?")
        m = curr_dc_re.match(raw)
        if not m:
            raise Exception("Bad reading: %s" % (raw, ))
        adc = float(m.group(1))
        secs = float(m.group(2))
        rdngn = float(m.group(3))
        return {"ADC": adc, "SECS": secs, "RDNG#": rdngn}

    def curr_dc(self):
        return self.curr_dc_ex()["ADC"]

    def res_ex(self):
        if self.func != 'RES':
            self.gpib.snd(":FUNC 'RES'")
            # Seems to take at least 0.1 sec
            # had problems with 0.15
            time.sleep(0.20)
            self.func = 'RES'

        raw = self.gpib.snd_rcv(":DATA?")
        m = res_re.match(raw)
        if not m:
            raise Exception("Bad reading: %s" % (raw, ))
        adc = m.group(1)
        if adc.find('OHM') >= 0:
            adc = float(adc.replace('OHM', ''))
        else:
            adc = float('inf')
        secs = float(m.group(2))
        rdngn = float(m.group(3))
        return {"ADC": adc, "SECS": secs, "RDNG#": rdngn}

    def res(self):
        return self.res_ex()["ADC"]
Пример #2
0
class K2750(object):
    def __init__(self, port='/dev/ttyUSB0', clr=True, ident=True):
        self.gpib = PUGpib(port=port, addr=16, clr=clr, eos=3, ser_timeout=1.0, gpib_timeout=0.9)
        self.func = None
        self.vendor = None
        self.model = None
        self.sn = None
        if ident:
            vendor, model = self.ident()
            if (vendor, model) != ('KEITHLEY INSTRUMENTS INC.', 'MODEL 2750'):
                raise ValueError('Bad instrument: %s, %s' % (vendor, model))

    def ident(self):
        # just vendor, model
        return self.ident_ex()[0:2]
        
    def ident_ex(self):
        '''
        Returns the manufacturer, model number, serial
        number, and firmware revision levels of the
        unit.
        ['KEITHLEY INSTRUMENTS INC.', 'MODEL 2750', '0967413', 'A07  /A01']
        '''
        ret = self.gpib.sendrecv_str("*IDN?").split(',')
        self.vendor = ret[0]
        self.model = ret[1]
        sn = ret[2]
        fw = ret[3]
        return (self.vendor, self.model, sn, fw)

    def card_sn(self):
        return self.gpib.sendrecv_str("SYSTem:CARD1:SNUMber?")

    def tim_int(self):
        '''Query timer interval'''
        return float(self.gpib.snd_rcv('TRIGger:TIMer?'))

    def local(self):
        '''Go to local mode'''
        # Error -113
        self.gpib.snd('GTL')

    def set_beep(self, en):
        '''
        You can disable the beeper for limits and continuity tests. However, when limits or CONT
        is again selected, the beeper will automatically enable.
        '''
        if en:
            self.gpib.snd("SYSTEM:BEEPER OFF")
        else:
            self.gpib.snd("SYSTEM:BEEPER ON")

    def error(self):
        '''Get next error from queue'''
        return self.gpib.snd_rcv("SYSTEM:ERROR?")

    def errors(self):
        ret = []
        while True:
            e = self.error()
            if e == '0,"No error"':
                return ret
            ret.append(e)
    
    def volt_dc_ex(self):
        if self.func != 'VOLT:DC':
            self.gpib.snd(":FUNC 'VOLT:DC'")
            time.sleep(0.20)
            self.func = 'VOLT:DC'

        raw = self.gpib.snd_rcv(":DATA?")
        m = volt_dc_re.match(raw)
        if not m:
            raise Exception("Bad reading: %s" % (raw,))
        vdc = float(m.group(1))
        secs = float(m.group(2))
        rdng = float(m.group(3))
        return {"VDC": vdc, "SECS": secs, "RDNG#": rdng}

    def volt_dc(self):
        return self.volt_dc_ex()["VDC"]

    def curr_dc_ex(self):
        if self.func != 'CURR:DC':
            self.gpib.snd(":FUNC 'CURR:DC'")
            # Seems to take at least 0.1 sec
            # had problems with 0.15
            time.sleep(0.20)
            self.func = 'CURR:DC'

        raw = self.gpib.snd_rcv(":DATA?")
        m = curr_dc_re.match(raw)
        if not m:
            raise Exception("Bad reading: %s" % (raw,))
        adc = float(m.group(1))
        secs = float(m.group(2))
        rdngn = float(m.group(3))
        return {"ADC": adc, "SECS": secs, "RDNG#": rdngn}

    def curr_dc(self):
        return self.curr_dc_ex()["ADC"]

    def res_ex(self):
        if self.func != 'RES':
            self.gpib.snd(":FUNC 'RES'")
            # Seems to take at least 0.1 sec
            # had problems with 0.15
            time.sleep(0.20)
            self.func = 'RES'

        raw = self.gpib.snd_rcv(":DATA?")
        m = res_re.match(raw)
        if not m:
            raise Exception("Bad reading: %s" % (raw,))
        adc = m.group(1)
        if adc.find('OHM') >= 0:
            adc = float(adc.replace('OHM', ''))
        else:
            adc = float('inf')
        secs = float(m.group(2))
        rdngn = float(m.group(3))
        return {"ADC": adc, "SECS": secs, "RDNG#": rdngn}

    def res(self):
        return self.res_ex()["ADC"]