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))
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
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
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 __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 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 __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
def __init__(self, name='lakeshore', pad=None, sad=0): Gpib.__init__(self, name=name, pad=pad, sad=sad) self.temperature = {} self.idstr = self.idstring()
def __init__(self, name='8780a', pad=None, sad=0): Gpib.__init__(self, name=name, pad=pad, sad=sad)
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()
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()
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)
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)
def __init__(self, name='hp3478a', pad=23, sad=0, asksleep=0.02): Gpib.__init__(self, name=name, pad=pad, sad=sad) self.asksleep = asksleep
def __init__(self, name='pmeter', pad=None, sad=0): Gpib.__init__(self, name=name, pad=pad, sad=sad) self.idstr = self.idstring()
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)
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()