fix autoscan behaviour in ls370res
when in autoscan, and dwell < filter, the channel was never read + do not export pollinterval on both Main and ResChannel Change-Id: I50df9e151b219ab28875ac78107dcdfdede42c51 Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/25087 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
69f5692951
commit
d0f895ed44
@ -63,7 +63,7 @@ class Main(HasIodev, Drivable):
|
|||||||
value = Parameter('the current channel', poll=REGULAR, datatype=IntRange(0, 17))
|
value = Parameter('the current channel', poll=REGULAR, datatype=IntRange(0, 17))
|
||||||
target = Parameter('channel to select', datatype=IntRange(0, 17))
|
target = Parameter('channel to select', datatype=IntRange(0, 17))
|
||||||
autoscan = Parameter('whether to scan automatically', datatype=BoolType(), readonly=False, default=False)
|
autoscan = Parameter('whether to scan automatically', datatype=BoolType(), readonly=False, default=False)
|
||||||
pollinterval = Parameter('sleeptime between polls', default=1)
|
pollinterval = Parameter(default=1, export=False)
|
||||||
|
|
||||||
pollerClass = Poller
|
pollerClass = Poller
|
||||||
iodevClass = StringIO
|
iodevClass = StringIO
|
||||||
@ -120,6 +120,11 @@ class Main(HasIodev, Drivable):
|
|||||||
self.status = [Status.BUSY, 'switching']
|
self.status = [Status.BUSY, 'switching']
|
||||||
return channel
|
return channel
|
||||||
|
|
||||||
|
def write_autoscan(self, value):
|
||||||
|
scan.send_change(self, self.value, value)
|
||||||
|
# self.sendRecv('SCAN %d,%d;SCAN?' % (channel, self.autoscan))
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
class ResChannel(HasIodev, Readable):
|
class ResChannel(HasIodev, Readable):
|
||||||
"""temperature channel on Lakeshore 336"""
|
"""temperature channel on Lakeshore 336"""
|
||||||
@ -144,7 +149,7 @@ class ResChannel(HasIodev, Readable):
|
|||||||
main = Attached()
|
main = Attached()
|
||||||
|
|
||||||
value = Parameter(datatype=FloatRange(unit='Ohm'))
|
value = Parameter(datatype=FloatRange(unit='Ohm'))
|
||||||
pollinterval = Parameter(visibility=3)
|
pollinterval = Parameter(visibility=3, default=1, export=False)
|
||||||
range = Parameter('reading range', readonly=False,
|
range = Parameter('reading range', readonly=False,
|
||||||
datatype=EnumType(**RES_RANGE), handler=rdgrng)
|
datatype=EnumType(**RES_RANGE), handler=rdgrng)
|
||||||
minrange = Parameter('minimum range for software autorange', readonly=False, default=1,
|
minrange = Parameter('minimum range for software autorange', readonly=False, default=1,
|
||||||
@ -158,16 +163,24 @@ class ResChannel(HasIodev, Readable):
|
|||||||
dwell = Parameter('dwell time with autoscan', datatype=FloatRange(1, 200), readonly=False, handler=inset)
|
dwell = Parameter('dwell time with autoscan', datatype=FloatRange(1, 200), readonly=False, handler=inset)
|
||||||
filter = Parameter('filter time', datatype=FloatRange(1, 200), readonly=False, handler=filterhdl)
|
filter = Parameter('filter time', datatype=FloatRange(1, 200), readonly=False, handler=filterhdl)
|
||||||
|
|
||||||
|
_trigger_read = False
|
||||||
|
|
||||||
def initModule(self):
|
def initModule(self):
|
||||||
self._main = self.DISPATCHER.get_module(self.main)
|
self._main = self.DISPATCHER.get_module(self.main)
|
||||||
self._main.register_channel(self)
|
self._main.register_channel(self)
|
||||||
|
|
||||||
def read_value(self):
|
def read_value(self):
|
||||||
if self.channel != self._main.value:
|
|
||||||
return Done
|
|
||||||
if not self.enabled:
|
if not self.enabled:
|
||||||
self.status = [self.Status.DISABLED, 'disabled']
|
self.status = [self.Status.DISABLED, 'disabled']
|
||||||
return Done
|
return Done
|
||||||
|
if self.channel != self._main.value:
|
||||||
|
if self.channel == self._main.target:
|
||||||
|
self._trigger_read = True
|
||||||
|
return Done
|
||||||
|
if not self._trigger_read:
|
||||||
|
return Done
|
||||||
|
# we got here, when we missed the idle state of self._main
|
||||||
|
self._trigger_read = False
|
||||||
result = self.sendRecv('RDGR?%d' % self.channel)
|
result = self.sendRecv('RDGR?%d' % self.channel)
|
||||||
result = float(result)
|
result = float(result)
|
||||||
if self.autorange == 'soft':
|
if self.autorange == 'soft':
|
||||||
|
@ -35,6 +35,7 @@ class Ls370Sim(Communicator):
|
|||||||
('*IDN?', 'LSCI,MODEL370,370184,05302003'),
|
('*IDN?', 'LSCI,MODEL370,370184,05302003'),
|
||||||
('SCAN?', '3,1'),
|
('SCAN?', '3,1'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def earlyInit(self):
|
def earlyInit(self):
|
||||||
self._data = dict(self.OTHER_COMMANDS)
|
self._data = dict(self.OTHER_COMMANDS)
|
||||||
for fmt, v in self.CHANNEL_COMMANDS:
|
for fmt, v in self.CHANNEL_COMMANDS:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user