Beispiel #1
0
    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)
Beispiel #2
0
 def quit(self):
     mc = MultiClampDriver.instance()
     if mc is not None:
         mc.quit()