def __init__(self, dm, config, name): Device.__init__(self, dm, config, name) self.config = config self.lock = Mutex(Mutex.Recursive) self.index = None self.devRackGui = None self.stateLock = Mutex(Mutex.Recursive) ## only for locking self.lastState and self.lastMode self.lastState = {} self.lastMode = None try: # default holding state self.holding = { 'VC': -50e-3, 'IC': 0.0, 'I=0': 0.0 } self.mc = MultiClampDriver.instance().getChannel(self.config['channelID'], self.mcUpdate) ## wait for first update.. c = 0 while self.mc.getState() is None: time.sleep(0.1) c += 1 if c > 50: raise Exception("Timed out waiting for first update from multi clamp commander.") print "Created MultiClamp device", self.config['channelID'] ## set configured holding values if 'vcHolding' in self.config: self.holding['VC'] = self.config['vcHolding'] if 'icHolding' in self.config: self.holding['IC'] = self.config['icHolding'] ## Set up default MC settings for each mode, then leave MC in I=0 mode # look for 'defaults', followed by 'settings' (for backward compatibility) defaults = self.config.get('defaults', self.config.get('settings', None)) if defaults is not None: for mode in ['IC', 'VC']: if mode in defaults: #print "set mode", mode self.setMode(mode) #print "set params" self.mc.setParams(defaults[mode]) self.setMode('I=0') ## safest mode to leave clamp in except: try: mc = MultiClampDriver.instance() if mc is not None: mc.quit() except: pass raise dm.declareInterface(name, ['clamp'], self)
def quit(self): mc = MultiClampDriver.instance() if mc is not None: mc.quit()