fix keithley 2601b after tests
- add missing super call in initModule - change mode before writing levels - fix MEASURE_DCVOLTS instead of MEASURE_VOLTS Change-Id: Id93187e082db9868f443d4ef8cbdc85acd11be2b Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28256 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
478075c545
commit
8eee7ab3b0
@ -20,8 +20,6 @@
|
|||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
"""Keithley 2601B 4 quadrant source meter
|
"""Keithley 2601B 4 quadrant source meter
|
||||||
|
|
||||||
not tested yet
|
|
||||||
|
|
||||||
* switching between voltage and current happens by setting their target
|
* switching between voltage and current happens by setting their target
|
||||||
* switching output off by setting the active parameter of the controlling
|
* switching output off by setting the active parameter of the controlling
|
||||||
module to False.
|
module to False.
|
||||||
@ -41,7 +39,7 @@ SOURCECMDS = {
|
|||||||
' smua.source.output = 0 print("ok")',
|
' smua.source.output = 0 print("ok")',
|
||||||
1: 'reset()'
|
1: 'reset()'
|
||||||
' smua.source.func = smua.OUTPUT_DCAMPS'
|
' smua.source.func = smua.OUTPUT_DCAMPS'
|
||||||
' display.smua.measure.func = display.MEASURE_VOLTS'
|
' display.smua.measure.func = display.MEASURE_DCVOLTS'
|
||||||
' smua.source.autorangei = 1'
|
' smua.source.autorangei = 1'
|
||||||
' smua.source.output = 1 print("ok")',
|
' smua.source.output = 1 print("ok")',
|
||||||
2: 'reset()'
|
2: 'reset()'
|
||||||
@ -65,11 +63,11 @@ class SourceMeter(HasIO, Module):
|
|||||||
return float(self.communicate('print((smua.source.func+1)*smua.source.output)'))
|
return float(self.communicate('print((smua.source.func+1)*smua.source.output)'))
|
||||||
|
|
||||||
def write_mode(self, value):
|
def write_mode(self, value):
|
||||||
|
assert self.communicate(SOURCECMDS[value]) == 'ok'
|
||||||
if value == 'current':
|
if value == 'current':
|
||||||
self.write_vlimit(self.vlimit)
|
self.write_vlimit(self.vlimit)
|
||||||
elif value == 'voltage':
|
elif value == 'voltage':
|
||||||
self.write_ilimit(self.ilimit)
|
self.write_ilimit(self.ilimit)
|
||||||
assert self.communicate(SOURCECMDS[value]) == 'ok'
|
|
||||||
return self.read_mode()
|
return self.read_mode()
|
||||||
|
|
||||||
def read_ilimit(self):
|
def read_ilimit(self):
|
||||||
@ -118,6 +116,7 @@ class Current(HasIO, Writable):
|
|||||||
limit = Parameter('current limit', FloatRange(0, 2.0, unit='A'), default=2)
|
limit = Parameter('current limit', FloatRange(0, 2.0, unit='A'), default=2)
|
||||||
|
|
||||||
def initModule(self):
|
def initModule(self):
|
||||||
|
super().initModule()
|
||||||
self.sourcemeter.registerCallbacks(self)
|
self.sourcemeter.registerCallbacks(self)
|
||||||
|
|
||||||
def read_value(self):
|
def read_value(self):
|
||||||
@ -129,9 +128,9 @@ class Current(HasIO, Writable):
|
|||||||
def write_target(self, value):
|
def write_target(self, value):
|
||||||
if value > self.sourcemeter.ilimit:
|
if value > self.sourcemeter.ilimit:
|
||||||
raise ValueError('current exceeds limit')
|
raise ValueError('current exceeds limit')
|
||||||
value = float(self.communicate('smua.source.leveli = %g print(smua.source.leveli)' % value))
|
|
||||||
if not self.active:
|
if not self.active:
|
||||||
self.sourcemeter.write_mode('current') # triggers update_mode -> set active to True
|
self.sourcemeter.write_mode('current') # triggers update_mode -> set active to True
|
||||||
|
value = float(self.communicate('smua.source.leveli = %g print(smua.source.leveli)' % value))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def read_limit(self):
|
def read_limit(self):
|
||||||
@ -163,6 +162,7 @@ class Voltage(HasIO, Writable):
|
|||||||
limit = Parameter('voltage limit', FloatRange(0, 2.0, unit='V'), default=2)
|
limit = Parameter('voltage limit', FloatRange(0, 2.0, unit='V'), default=2)
|
||||||
|
|
||||||
def initModule(self):
|
def initModule(self):
|
||||||
|
super().initModule()
|
||||||
self.sourcemeter.registerCallbacks(self)
|
self.sourcemeter.registerCallbacks(self)
|
||||||
|
|
||||||
def read_value(self):
|
def read_value(self):
|
||||||
@ -174,9 +174,9 @@ class Voltage(HasIO, Writable):
|
|||||||
def write_target(self, value):
|
def write_target(self, value):
|
||||||
if value > self.sourcemeter.vlimit:
|
if value > self.sourcemeter.vlimit:
|
||||||
raise ValueError('voltage exceeds limit')
|
raise ValueError('voltage exceeds limit')
|
||||||
value = float(self.communicate('smua.source.levelv = %g print(smua.source.levelv)' % value))
|
|
||||||
if not self.active:
|
if not self.active:
|
||||||
self.sourcemeter.write_mode('voltage') # triggers update_mode -> set active to True
|
self.sourcemeter.write_mode('voltage') # triggers update_mode -> set active to True
|
||||||
|
value = float(self.communicate('smua.source.levelv = %g print(smua.source.levelv)' % value))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def read_limit(self):
|
def read_limit(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user