Exemplo n.º 1
0
 def __init__(self, name='hp83620a', pad=12, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.write('SYST:LANG SCPI') # set language to SCPI
     time.sleep(0.2)
     self.idstr = self.idstring()
     self.mult = self.get_mult()
     logger.debug("ID for synth : %s; Multiplier set to: %s" % (self.idstr, self.mult))
Exemplo n.º 2
0
 def __init__(self, name='hp83620a', pad=12, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.write('SYST:LANG SCPI')  # set language to SCPI
     time.sleep(0.2)
     self.idstr = self.idstring()
     self.mult = self.get_mult()
     logger.debug("ID for synth : %s; Multiplier set to: %s" %
                  (self.idstr, self.mult))
Exemplo n.º 3
0
 def __init__(self, name='unidex11', pad=2, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     #self.idstr = self.idstring()
     self.step_size_az = 0.1 / 60.  # 0.1 arcmin step size
     self.step_size_el = 0.05 / 60.
     self.pos_az = 0.0
     self.pos_el = 0.0
     self.limits = (-180.0, 180.0)  # az and el position limits
     self.max_feedrate = 20000  #to be safe
Exemplo n.º 4
0
 def __init__(self, name='unidex11', pad=2, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     #self.idstr = self.idstring()
     self.step_size_az = 0.1/60. # 0.1 arcmin step size
     self.step_size_el = 0.05/60.
     self.pos_az = 0.0
     self.pos_el = 0.0
     self.limits = (-180.0, 180.0) # az and el position limits
     self.max_feedrate = 20000  #to be safe
Exemplo n.º 5
0
 def __init__(self, name='8757e', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.format = 0  #normal ascii
     #self.setformat(self.format)
     self.numchannels = int(float(self.ask('OPSP')))
     time.sleep(0.2)
     self.bytesperchan = {0: 8, 2: 9}
     self.syn = Gpib('8757e_pt')
     self.write('PT19')
     time.sleep(0.2)
     self.FA = float(self.syn.ask('OPFA'))
     time.sleep(0.1)
     self.FB = float(self.syn.ask('OPFB'))
     time.sleep(0.1)
     self.PL = float(self.syn.ask('OPPL'))  #power level
     time.sleep(0.1)
     self.idstr = self.idstring()
Exemplo n.º 6
0
 def __init__(self, name='8757e', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.format = 0   #normal ascii
     #self.setformat(self.format)
     self.numchannels = int(float(self.ask('OPSP')))
     time.sleep(0.2)
     self.bytesperchan = { 0 : 8,
                           2 : 9
                           }
     self.syn = Gpib('8757e_pt')
     self.write('PT19')
     time.sleep(0.2)
     self.FA = float(self.syn.ask('OPFA'))
     time.sleep(0.1)
     self.FB = float(self.syn.ask('OPFB'))
     time.sleep(0.1)
     self.PL = float(self.syn.ask('OPPL')) #power level
     time.sleep(0.1)
     self.idstr = self.idstring()
Exemplo n.º 7
0
 def process_gpib_command(self):
     data = self.recv(1024)
     print data
     if not data:
         return False
     else:
         msg = data.split()
         self.gpibcmd = ''
         try:
             self.printlog("msg[0] is %s" % msg[0])
             self.syn = Gpib(msg[0])
         except:
             self.printlog(syslog.LOG_ERR, "GPIB Error")
             return False
         if msg[1] in ["ask", "read", "write"]:                
             self.gpibcmd = ' '.join(msg[2:])
             self.printlog("Received for %s %s and GPIB cmd: %s" % (msg[0], msg[1], self.gpibcmd))
         else:
             self.printlog(syslog.LOG_ERR, "Ignoring unknown message %s" % data)
             return False
         if self.syn and self.gpibcmd:
             self.do_gpib_command(msg[1])
             return True
Exemplo n.º 8
0
 def __init__(self, name='8510C', pad=None, sad=0,
              timeout=gpib.T3s):
     Gpib.__init__(self, name=name, pad=pad, sad=sad, 
                   timeout=timeout)
     self.numfrequencies = 0
     self.read_error_count = 0
Exemplo n.º 9
0
 def __init__(self, name='lakeshore', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.temperature = {}
     self.idstr = self.idstring()
Exemplo n.º 10
0
 def __init__(self, name='8780a',
              pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
Exemplo n.º 11
0
 def __init__(self, name='83711b', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.idstr = self.idstring()
     self.mult = self.get_mult()
Exemplo n.º 12
0
class GpibSocket:
    '''Base class for GPIB tcpip socket communications'''

    debug = 0
    status_bytes = []
    status_dict = {}

    def __init__(self,HOST=None, PORT=None, log=LOG_SYSLOG):
        self.log = log
        if self.log == LOG_SYSLOG:
            syslog.openlog('GPIBSockServer')
        try:
            self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            if HOST:
	        #self.s.connect((HOST, PORT))
                self.s.bind((HOST, PORT))
            else:
                self.s.bind((socket.gethostname(),PORT))
            self.conn = None            
            self.addr = None
            self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            #self.syn = Gpib('83711b')
        except:
            self.printlog(syslog.LOG_ERR, str(self.formatExceptionInfo()))
    

    def formatExceptionInfo(self, maxTBlevel=5):
        """copied from Linux Journal article 5821"""
        cla, exc, trbk = sys.exc_info()
        excName = cla.__name__
        try:
            excArgs = exc.__dict__["args"]
        except KeyError:
            excArgs = "<no args>"
        excTb = traceback.format_tb(trbk, maxTBlevel)
        return (excName, excArgs, excTb)

    def printlog(self, *arguments):
        if len(arguments) == 1:
            type=syslog.LOG_INFO
            msg = arguments[0]
        else:
            type=arguments[0]
            msg=arguments[1]
        if self.log == LOG_STDOUT:
            print msgtype[type], msg
        else:
            syslog.syslog(type, msg)
            
    def listen(self, numconnections=10):
        self.s.listen(numconnections)
        
    def accept(self):
        self.conn, self.addr = self.s.accept()
        self.printlog("Connected by %s" % repr(self.addr))
        return True

    def recv(self, maxlen=1024):
        if self.conn:
            try:
                data = self.conn.recv(maxlen)
                return data
            except:
                self.printlog(syslog.LOG_ERR, "No data")
                self.conn=None
                return None
        else:
            self.printlog(syslog.LOG_ERR,"No connection")

    def process_gpib_command(self):
        data = self.recv(1024)
        print data
        if not data:
            return False
        else:
            msg = data.split()
            self.gpibcmd = ''
            try:
                self.printlog("msg[0] is %s" % msg[0])
                self.syn = Gpib(msg[0])
            except:
                self.printlog(syslog.LOG_ERR, "GPIB Error")
                return False
            if msg[1] in ["ask", "read", "write"]:                
                self.gpibcmd = ' '.join(msg[2:])
                self.printlog("Received for %s %s and GPIB cmd: %s" % (msg[0], msg[1], self.gpibcmd))
            else:
                self.printlog(syslog.LOG_ERR, "Ignoring unknown message %s" % data)
                return False
            if self.syn and self.gpibcmd:
                self.do_gpib_command(msg[1])
                return True

    def send(self, msg=None):
        if not msg:
            if self.conn:
                if self.gpibreturn:
                    self.conn.send(self.gpibreturn)
        else:
            if self.conn:
                self.conn.send(msg)

    def conn_close(self):
        if self.conn:
            self.conn.close()
        
    def do_gpib_command(self, msg, gpibcmd=None):
        self.gpibreturn = ''
        if not gpibcmd:
            if self.gpibcmd:
                gpibcmd = self.gpibcmd
            else:
                self.printlog("No GPIB command to execute")
                return
        if msg == "ask":
            self.gpibreturn = self.syn.ask(gpibcmd)
            return
        elif msg == "write":
            self.syn.write(gpibcmd)
            return
        elif msg == "read":
            try:
                sze = int(gpibcmd)
            except:
                sze = 512
            self.gpibreturn = self.syn.read(sze)
            return
        
    def receive_with_size(self, msglen):
        msg = ''
        while len(msg) < msglen:
            chunk = self.s.recv(msglen-len(msg))
            if chunk == '':
                raise RuntimeError, "socket connection broken"
            msg = msg + chunk
        return msg


    def close(self):
        self.s.close()
Exemplo n.º 13
0
 def __init__(self, name='hp3457a', pad=22, sad=0, asksleep=0.01):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.asksleep = asksleep
     self.idstr = self.idstring()
     logger.debug("Multimeter Id: %s" % self.idstr)
Exemplo n.º 14
0
class Analyzer_8757e(Gpib):
    """A Gpib helper class for interfacing with the HP8757E
    Scalar Network Analyzer. Pass through commands to 8350B attached to it.
    """
    def __init__(self, name='8757e', pad=None, sad=0):
        Gpib.__init__(self, name=name, pad=pad, sad=sad)
        self.format = 0  #normal ascii
        #self.setformat(self.format)
        self.numchannels = int(float(self.ask('OPSP')))
        time.sleep(0.2)
        self.bytesperchan = {0: 8, 2: 9}
        self.syn = Gpib('8757e_pt')
        self.write('PT19')
        time.sleep(0.2)
        self.FA = float(self.syn.ask('OPFA'))
        time.sleep(0.1)
        self.FB = float(self.syn.ask('OPFB'))
        time.sleep(0.1)
        self.PL = float(self.syn.ask('OPPL'))  #power level
        time.sleep(0.1)
        self.idstr = self.idstring()

    def idstring(self):
        "returns ID string"
        return "%s" % self.ask('OI')

    def tracepoints(self, number):
        "Sets the number of tracepoints for a sweep"
        if number in (101, 201, 401):
            self.write('SP%d' % number)
            self.numchannels = number
        else:
            print "Number of trace points has to be one of (101,201,401)"

    def ip(self):
        "Instrument Preset"
        self.write('IP')

    def channel(self, chan, state=True):
        """Selects channel chan, make it active if state
        is True or else turn it off if state is False.
        chan can be a tuple or list. It turns all elements in list to on if
        state is True. If state is set to False, turns first element of list
        or tuple to off and the rest on"""
        if not state:
            if type(chan) == types.TupleType or type(chan) == types.ListType:
                if len(chan) > 1:
                    chan = list(chan)
                    if chan[0] in (1, 2):
                        self.write('C%1dC0' % chan[0])
                    else:
                        print "Chan has to be one of 1,2"
                        return
                    for c in chan[1:]:
                        if c in (1, 2):
                            self.write('C%1d' % c)
                        else:
                            print "Chan has to be one of 1,2"
                            return
                else:
                    print "When turning off a channel, need to send another channel to make active"
                    return
            else:
                print "When turning off a channel, need to send another channel to make active"
                return
        else:
            if type(chan) == types.TupleType or type(chan) == types.ListType:
                for c in list(chan):
                    if c in (1, 2):
                        self.write('C%1d' % c)
                    else:
                        print "Chan has to be one of 1,2"
            else:
                if chan in (1, 2):
                    self.write('C%1d' % chan)

    def setformat(self, num):
        "Sets Ascii formatting of output data"
        if num in (0, 2):
            self.write('FD%d' % num)
            self.format = num
        else:
            print "Supported formats are FD0 and FD2"

    def setFA(self, num):
        "Sets the FA start freq for sweeper"
        fa_gz = num / 1.e9
        self.write('PT19')
        self.syn.write("FA%fGZ" % fa_gz)
        time.sleep(0.1)
        self.FA = float(self.syn.ask('OPFA'))
        self.idstr = self.ask('OI')

    def getFA(self):
        self.write('PT19')
        self.FA = float(self.syn.ask('OPFA'))
        self.idstr = self.ask('OI')
        return self.FA

    def setCW(self, num):
        cw_gz = num / 1.e9
        self.write('PT19')
        self.syn.write("CW%fGZ" % cw_gz)
        time.sleep(0.1)
        self.CW = float(self.syn.ask('OPCW'))
        self.idstr = self.ask('OI')

    def getCW(self):
        self.write('PT19')
        self.CW = float(self.syn.ask('OPCW'))
        self.idstr = self.ask('OI')
        return self.CW

    def setPL(self, num):
        self.write('PT19')
        self.syn.write("PL%fDM" % num)
        time.sleep(0.1)
        self.PL = float(self.syn.ask('OPPL'))
        self.idstr = self.ask('OI')

    def getPL(self):
        self.write('PT19')
        self.PL = float(self.syn.ask('OPPL'))
        self.idstr = self.ask('OI')
        return self.PL

    def setFB(self, num):
        "Sets the FB start freq for sweeper"
        fb_gz = num / 1.e9
        self.write('PT19')
        self.syn.write("FB%fGZ" % fb_gz)
        time.sleep(0.1)
        self.FB = float(self.syn.ask('OPFB'))
        self.idstr = self.ask('OI')

    def getFB(self):
        self.write('PT19')
        self.FB = float(self.syn.ask('OPFB'))
        self.idstr = self.ask('OI')
        return self.FB

    def get_learn_string(self):
        self.write('OL')
        self.an_learn = self.readbin(len=150)
        self.write('PT19')
        self.syn.write('OL')
        self.syn_learn = self.syn.readbin(len=90)
        self.idstr = self.ask('OI')
        return (self.an_learn, self.syn_learn)

    def set_learn_string(self, an_learn, syn_learn):
        msg = 'IL' + an_learn
        self.writebin(msg, len(msg))
        self.write('PT19')
        msg = 'IL' + syn_learn
        self.syn.writebin(msg, len(msg))
        self.idstr = self.ask('OI')

    def _getdata(self, text, samples=10):
        self.write('SW1')  #put in sweep mode
        self.write('SW2')  #sweephold mode
        self.write('TS%d' % samples)  #take sample number of samples
        time.sleep(1.5)
        self.write('SW1')
        self.write(text)  #ask for the data
        numbytes = self.bytesperchan[self.format] * self.numchannels
        datastr = self.read(len=numbytes)
        data = map(float, datastr.split(','))
        self.write('SW1')
        return data

    def _getdata_normal(self, text, samples=10):
        """this is more reliable than with TS10
        or whatever for some reason"""
        #self.write('SW1')   #put in sweep mode
        #self.write('SW2')   #sweephold mode
        #self.write('TS%d' % samples) #take sample number of samples
        #time.sleep(1.5)
        #self.write('SW1')
        self.write(text)  #ask for the data
        numbytes = self.bytesperchan[self.format] * self.numchannels
        datastr = self.read(len=numbytes)
        data = map(float, datastr.split(','))
        #self.write('SW1')
        return data

    def get_data(self, samples=10):
        return self._getdata_normal('OD', samples)

    def get_memory(self, samples=10):
        return self._getdata_normal('OM', samples)

    def get_normalized(self, samples=10):
        return self._getdata_normal('ON', samples)

    def write_memory(self, datastr):
        datastr = 'WM' + datastr
        self.write(datastr)
Exemplo n.º 15
0
 def __init__(self, name='hp3478a', pad=23, sad=0, asksleep=0.02):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.asksleep = asksleep
Exemplo n.º 16
0
 def __init__(self, name='pmeter', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.idstr = self.idstring()
Exemplo n.º 17
0
 def __init__(self, name='pmeter', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.idstr = self.idstring()
Exemplo n.º 18
0
 def __init__(self, name='hp3457a', pad=22, sad=0,
              asksleep=0.01):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.asksleep = asksleep
     self.idstr = self.idstring()
     logger.debug("Multimeter Id: %s" % self.idstr)
Exemplo n.º 19
0
 def __init__(self, name='8780a', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
Exemplo n.º 20
0
class Analyzer_8757e(Gpib):
    """A Gpib helper class for interfacing with the HP8757E
    Scalar Network Analyzer. Pass through commands to 8350B attached to it.
    """
    def __init__(self, name='8757e', pad=None, sad=0):
        Gpib.__init__(self, name=name, pad=pad, sad=sad)
        self.format = 0   #normal ascii
        #self.setformat(self.format)
        self.numchannels = int(float(self.ask('OPSP')))
        time.sleep(0.2)
        self.bytesperchan = { 0 : 8,
                              2 : 9
                              }
        self.syn = Gpib('8757e_pt')
        self.write('PT19')
        time.sleep(0.2)
        self.FA = float(self.syn.ask('OPFA'))
        time.sleep(0.1)
        self.FB = float(self.syn.ask('OPFB'))
        time.sleep(0.1)
        self.PL = float(self.syn.ask('OPPL')) #power level
        time.sleep(0.1)
        self.idstr = self.idstring()
        
    def idstring(self):
        "returns ID string"
        return "%s" % self.ask('OI')

    def tracepoints(self, number):
        "Sets the number of tracepoints for a sweep"
        if number in (101,201,401):
            self.write('SP%d' % number)
            self.numchannels = number
        else:
            print "Number of trace points has to be one of (101,201,401)"
    
    def ip(self):
        "Instrument Preset"
        self.write('IP')

    def channel(self, chan, state=True):
        """Selects channel chan, make it active if state
        is True or else turn it off if state is False.
        chan can be a tuple or list. It turns all elements in list to on if
        state is True. If state is set to False, turns first element of list
        or tuple to off and the rest on"""
        if not state:
            if type(chan) == types.TupleType or type(chan) == types.ListType:
                if len(chan) > 1:
                    chan = list(chan)
                    if chan[0] in (1,2):
                        self.write('C%1dC0' % chan[0])
                    else:
                        print "Chan has to be one of 1,2"
                        return
                    for c in chan[1:]:
                        if c in (1,2):
                            self.write('C%1d' % c)
                        else:
                            print "Chan has to be one of 1,2"
                            return                        
                else:
                    print "When turning off a channel, need to send another channel to make active"
                    return
            else:
                print "When turning off a channel, need to send another channel to make active"
                return
        else:
            if type(chan) == types.TupleType or type(chan) == types.ListType:
                for c in list(chan):
                    if c in (1,2):
                        self.write('C%1d' % c)
                    else:
                        print "Chan has to be one of 1,2"
            else:
                if chan in (1,2):
                    self.write('C%1d' % chan)

                
    def setformat(self,num):
        "Sets Ascii formatting of output data"
        if num in (0, 2):
            self.write('FD%d' % num)
            self.format = num
        else:
            print "Supported formats are FD0 and FD2"

    def setFA(self, num):
        "Sets the FA start freq for sweeper"
        fa_gz = num/1.e9
        self.write('PT19')
        self.syn.write("FA%fGZ" % fa_gz)
        time.sleep(0.1)
        self.FA = float(self.syn.ask('OPFA'))
        self.idstr = self.ask('OI')

    def getFA(self):
        self.write('PT19')
        self.FA = float(self.syn.ask('OPFA'))
        self.idstr = self.ask('OI')
        return self.FA

    def setCW(self,num):
        cw_gz = num/1.e9
        self.write('PT19')
        self.syn.write("CW%fGZ" % cw_gz)
        time.sleep(0.1)
        self.CW =float(self.syn.ask('OPCW'))
        self.idstr = self.ask('OI')

    def getCW(self):
        self.write('PT19')
        self.CW = float(self.syn.ask('OPCW'))
        self.idstr = self.ask('OI')
        return self.CW
        
    def setPL(self, num):
        self.write('PT19')
        self.syn.write("PL%fDM" % num)
        time.sleep(0.1)
        self.PL = float(self.syn.ask('OPPL'))
        self.idstr = self.ask('OI')

    def getPL(self):
        self.write('PT19')
        self.PL = float(self.syn.ask('OPPL'))
        self.idstr = self.ask('OI')
        return self.PL
    
    def setFB(self, num):
        "Sets the FB start freq for sweeper"
        fb_gz = num/1.e9
        self.write('PT19')
        self.syn.write("FB%fGZ" % fb_gz)
        time.sleep(0.1)
        self.FB = float(self.syn.ask('OPFB'))
        self.idstr = self.ask('OI')

    def getFB(self):
        self.write('PT19')
        self.FB = float(self.syn.ask('OPFB'))
        self.idstr = self.ask('OI')
        return self.FB    

    def get_learn_string(self):
        self.write('OL')
        self.an_learn = self.readbin(len=150)
        self.write('PT19')
        self.syn.write('OL')
        self.syn_learn = self.syn.readbin(len=90)
        self.idstr = self.ask('OI')
        return (self.an_learn, self.syn_learn)

    def set_learn_string(self,an_learn, syn_learn):
        msg = 'IL'+an_learn
        self.writebin(msg, len(msg))
        self.write('PT19')
        msg = 'IL'+syn_learn
        self.syn.writebin(msg, len(msg))
        self.idstr = self.ask('OI')

    def _getdata(self, text, samples=10):
        self.write('SW1')   #put in sweep mode
        self.write('SW2')   #sweephold mode
        self.write('TS%d' % samples) #take sample number of samples
        time.sleep(1.5)
        self.write('SW1')
        self.write(text)    #ask for the data
        numbytes = self.bytesperchan[self.format]*self.numchannels
        datastr = self.read(len=numbytes)
        data = map(float, datastr.split(','))
        self.write('SW1')        
        return data

    def _getdata_normal(self, text, samples=10):
        """this is more reliable than with TS10
        or whatever for some reason"""
        #self.write('SW1')   #put in sweep mode
        #self.write('SW2')   #sweephold mode
        #self.write('TS%d' % samples) #take sample number of samples
        #time.sleep(1.5)
        #self.write('SW1')
        self.write(text)    #ask for the data
        numbytes = self.bytesperchan[self.format]*self.numchannels
        datastr = self.read(len=numbytes)
        data = map(float, datastr.split(','))
        #self.write('SW1')        
        return data    

    def get_data(self, samples=10):
        return self._getdata_normal('OD', samples)

    def get_memory(self,samples=10):
        return self._getdata_normal('OM', samples)

    def get_normalized(self,samples=10):
        return self._getdata_normal('ON', samples)
    
    def write_memory(self, datastr):
        datastr = 'WM'+datastr
        self.write(datastr)
Exemplo n.º 21
0
 def __init__(self, name='lakeshore', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.temperature = {}
     self.idstr = self.idstring()
Exemplo n.º 22
0
 def __init__(self, name='hp3478a', pad=23, sad=0,
              asksleep=0.02):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.asksleep = asksleep
Exemplo n.º 23
0
 def __init__(self, name='8510C', pad=None, sad=0, timeout=gpib.T3s):
     Gpib.__init__(self, name=name, pad=pad, sad=sad, timeout=timeout)
     self.numfrequencies = 0
     self.read_error_count = 0
Exemplo n.º 24
0
 def __init__(self, name='83751b', pad=None, sad=0):
     Gpib.__init__(self, name=name, pad=pad, sad=sad)
     self.idstr = self.idstring()
     self.mult = self.get_mult()