from qolab.hardware.basic import BasicInstrument from qolab.hardware.power_supply import PowerSupplySCPI class KeysightE3612A(PowerSupplySCPI): """ Keysight E3612A power supply """ def __init__(self, resource, *args, **kwds): super().__init__(resource, *args, **kwds) self.resource.read_termination='\n' self.config['Device model'] = 'Keysight E3612A' self.numberOfChannels = 3 self.deviceProperties = {'OpMode', }; self.channelProperties = {'IsOn', 'Regulation', 'Vout', 'Vlimit', 'Iout', 'Ilimit', } def getOpMode(self): """ Queries power supply operation mode, returns OFF|PAR|SER|TRAC OFF stands for independent channels """ qstr = f'OUTP:PAIR?' rstr = self.query(qstr) return( rstr ) def setOpMode(self, val): """ Sets power supply operation mode, returns OFF|PAR|SER|TRAC OFF stands for independent channels """ cmnd = f'OUTP:PAIR {val}' rstr = self.write(cmnd) def setChanOn(self, chNum): """ Power up channel output """ self.write(f'OUTP ON,(@{chNum})') def setChanOff(self, chNum): """ Power down channel output """ self.write(f'OUTP OFF,(@{chNum})') @BasicInstrument.tsdb_append def getChanIsOn(self, chNum): """ Queries channel output state """ qstr = f'OUTP? (@{chNum})' rstr = self.query(qstr) return( bool(float(rstr)) ) @BasicInstrument.tsdb_append def getChanRegulation(self, chNum): """ Queries channel output regulation 0 - The output is off and unregulated 1 - The output is CC (constant current) operating mode 2 - The output is CV (constant voltage) operating mode 3 - The output has hardware failure """ qstr = f'STAT:QUES:INST:ISUM{chNum}:COND?' rstr = self.query(qstr) return( int(rstr) ) @BasicInstrument.tsdb_append def getChanVout(self, chNum): qstr = f'MEAS:VOLT? (@{chNum})' rstr = self.query(qstr) return( float(rstr) ) @BasicInstrument.tsdb_append def getChanVlimit(self, chNum): qstr = f'SOUR:VOLT? (@{chNum})' rstr = self.query(qstr) return( float(rstr) ) @BasicInstrument.tsdb_append def setChanVlimit(self, chNum, val): cmnd = f'SOURCe:VOLT {val},(@{chNum})' rstr = self.write(cmnd) @BasicInstrument.tsdb_append def getChanIout(self, chNum): qstr = f'MEAS:CURR? (@{chNum})' rstr = self.query(qstr) return( float(rstr) ) @BasicInstrument.tsdb_append def getChanIlimit(self, chNum): qstr = f'SOURce:CURR? (@{chNum})' rstr = self.query(qstr) return( float(rstr) ) @BasicInstrument.tsdb_append def setChanIlimit(self, chNum, val): cmnd = f'SOURCe:CURR {val},(@{chNum})' rstr = self.write(cmnd) if __name__ == '__main__': import pyvisa print("testing") rm = pyvisa.ResourceManager() print(rm.list_resources()) instr=rm.open_resource('USB0::10893::4354::MY61001869::0::INSTR') ps = KeysightE3612A(instr) print('------ Header start -------------') print(str.join('\n', ps.getHeader())) print('------ Header ends -------------')