modified ppms driver
chamber module has now an enum instead of a string as main value + update_value_status must be called even for disabled modules in order to update the status to disabled Change-Id: I3470de8b82f45b7fe53b18576c9898d1747e0ff6 Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21448 Tested-by: JenkinsCodeReview <bjoern_pedersen@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
3d94da983a
commit
d4916f4591
0
etc/ppms.cfg
Executable file → Normal file
0
etc/ppms.cfg
Executable file → Normal file
@ -110,15 +110,15 @@ class Main(Communicator):
|
|||||||
result = {}
|
result = {}
|
||||||
for bitpos, channelname in enumerate(self._channel_names):
|
for bitpos, channelname in enumerate(self._channel_names):
|
||||||
if mask & (1 << bitpos):
|
if mask & (1 << bitpos):
|
||||||
result[channelname] = reply.pop(0)
|
result[channelname] = float(reply.pop(0))
|
||||||
if 'temp' in result:
|
if 'temp' in result:
|
||||||
result['tv'] = result['temp']
|
result['tv'] = result['temp']
|
||||||
if 'ts' in result:
|
if 'ts' in result:
|
||||||
result['temp'] = result['ts']
|
result['temp'] = result['ts']
|
||||||
packed_status = int(result['packed_status'])
|
packed_status = int(result['packed_status'])
|
||||||
|
result['chamber'] = None # 'chamber' must be in result for status, but value is ignored
|
||||||
for channelname, channel in self.modules.items():
|
for channelname, channel in self.modules.items():
|
||||||
if channelname in result and channel.enabled:
|
channel.update_value_status(result.get(channelname, None), packed_status)
|
||||||
channel.update_value_status(float(result.get(channelname, None)), packed_status)
|
|
||||||
return data # return data as string
|
return data # return data as string
|
||||||
|
|
||||||
|
|
||||||
@ -204,7 +204,10 @@ class PpmsMixin(Module):
|
|||||||
return self.status
|
return self.status
|
||||||
|
|
||||||
def update_value_status(self, value, packed_status):
|
def update_value_status(self, value, packed_status):
|
||||||
"""update value and status"""
|
"""update value and status
|
||||||
|
|
||||||
|
to be reimplemented for modules looking at packed_status
|
||||||
|
"""
|
||||||
if not self.enabled:
|
if not self.enabled:
|
||||||
self.status = [self.Status.DISABLED, 'disabled']
|
self.status = [self.Status.DISABLED, 'disabled']
|
||||||
return
|
return
|
||||||
@ -441,7 +444,10 @@ class Level(PpmsMixin, Readable):
|
|||||||
|
|
||||||
|
|
||||||
class Chamber(PpmsMixin, Drivable):
|
class Chamber(PpmsMixin, Drivable):
|
||||||
"""sample chamber handling"""
|
"""sample chamber handling
|
||||||
|
|
||||||
|
value is an Enum, which is redundant with the status text
|
||||||
|
"""
|
||||||
|
|
||||||
Status = Drivable.Status
|
Status = Drivable.Status
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
@ -455,10 +461,24 @@ class Chamber(PpmsMixin, Drivable):
|
|||||||
hi_vacuum=5,
|
hi_vacuum=5,
|
||||||
noop=10,
|
noop=10,
|
||||||
)
|
)
|
||||||
|
StatusCode = Enum(
|
||||||
|
'StatusCode',
|
||||||
|
unknown=0,
|
||||||
|
purged_and_sealed=1,
|
||||||
|
vented_and_sealed=2,
|
||||||
|
sealed_unknown=3,
|
||||||
|
purge_and_seal=4,
|
||||||
|
vent_and_seal=5,
|
||||||
|
pumping_down=6,
|
||||||
|
at_hi_vacuum=7,
|
||||||
|
pumping_continuously=8,
|
||||||
|
venting_continuously=9,
|
||||||
|
general_failure=15,
|
||||||
|
)
|
||||||
parameters = {
|
parameters = {
|
||||||
'value':
|
'value':
|
||||||
Override(description='chamber state', poll=False,
|
Override(description='chamber state', poll=False,
|
||||||
datatype=StringType(), default='unknown'),
|
datatype=EnumType(StatusCode), default='unknown'),
|
||||||
'status':
|
'status':
|
||||||
Override(poll=False),
|
Override(poll=False),
|
||||||
'target':
|
'target':
|
||||||
@ -468,17 +488,17 @@ class Chamber(PpmsMixin, Drivable):
|
|||||||
Override(visibility=3),
|
Override(visibility=3),
|
||||||
}
|
}
|
||||||
STATUS_MAP = {
|
STATUS_MAP = {
|
||||||
0: [Status.ERROR, 'unknown'],
|
StatusCode.unknown: [Status.ERROR, 'unknown'],
|
||||||
1: [Status.IDLE, 'purged and sealed'],
|
StatusCode.purged_and_sealed: [Status.IDLE, 'purged and sealed'],
|
||||||
2: [Status.IDLE, 'vented and sealed'],
|
StatusCode.vented_and_sealed: [Status.IDLE, 'vented and sealed'],
|
||||||
3: [Status.WARN, 'sealed unknown'],
|
StatusCode.sealed_unknown: [Status.WARN, 'sealed unknown'],
|
||||||
4: [Status.BUSY, 'purge and seal'],
|
StatusCode.purge_and_seal: [Status.BUSY, 'purge and seal'],
|
||||||
5: [Status.BUSY, 'vent and seal'],
|
StatusCode.vent_and_seal: [Status.BUSY, 'vent and seal'],
|
||||||
6: [Status.BUSY, 'pumping down'],
|
StatusCode.pumping_down: [Status.BUSY, 'pumping down'],
|
||||||
7: [Status.IDLE, 'at hi vacuum'],
|
StatusCode.at_hi_vacuum: [Status.IDLE, 'at hi vacuum'],
|
||||||
8: [Status.IDLE, 'pumping continuously'],
|
StatusCode.pumping_continuously: [Status.IDLE, 'pumping continuously'],
|
||||||
9: [Status.IDLE, 'venting continuously'],
|
StatusCode.venting_continuously: [Status.IDLE, 'venting continuously'],
|
||||||
15: [Status.ERROR, 'general failure'],
|
StatusCode.general_failure: [Status.ERROR, 'general failure'],
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = 'chamber'
|
channel = 'chamber'
|
||||||
@ -486,8 +506,8 @@ class Chamber(PpmsMixin, Drivable):
|
|||||||
|
|
||||||
def update_value_status(self, value, packed_status):
|
def update_value_status(self, value, packed_status):
|
||||||
"""update value and status"""
|
"""update value and status"""
|
||||||
self.status = self.STATUS_MAP[(packed_status >> 8) & 0xf]
|
self.value = (packed_status >> 8) & 0xf
|
||||||
self.value = self.status[1]
|
self.status = self.STATUS_MAP[self.value]
|
||||||
|
|
||||||
def get_settings(self, pname):
|
def get_settings(self, pname):
|
||||||
"""read settings
|
"""read settings
|
||||||
|
29
secop_psi/ppmssim.py
Normal file → Executable file
29
secop_psi/ppmssim.py
Normal file → Executable file
@ -74,6 +74,7 @@ class PpmsSim:
|
|||||||
self.time = int(time.time())
|
self.time = int(time.time())
|
||||||
self.start = self.time
|
self.start = self.time
|
||||||
self.mf_start = 0
|
self.mf_start = 0
|
||||||
|
self.ch_start = 0
|
||||||
self.changed = set()
|
self.changed = set()
|
||||||
|
|
||||||
def progress(self):
|
def progress(self):
|
||||||
@ -127,11 +128,37 @@ class PpmsSim:
|
|||||||
else:
|
else:
|
||||||
self.mf += math.copysign(min(self.field.ramp, abs(dif)), dif)
|
self.mf += math.copysign(min(self.field.ramp, abs(dif)), dif)
|
||||||
# print(self.mf, self.status.mf, self.field)
|
# print(self.mf, self.status.mf, self.field)
|
||||||
|
|
||||||
dif = self.move.target - self.pos
|
dif = self.move.target - self.pos
|
||||||
speed = (15 - self.move.code) * 0.8
|
speed = (15 - self.move.code) * 0.8
|
||||||
self.pos += math.copysign(min(speed, abs(dif)), dif)
|
self.pos += math.copysign(min(speed, abs(dif)), dif)
|
||||||
|
|
||||||
# omit chamber for now
|
if 'CHAMBER' in self.changed:
|
||||||
|
self.changed.remove('CHAMBER')
|
||||||
|
if self.chamber.target == 0: # seal immediately
|
||||||
|
self.status.ch = 3 # sealed unknown
|
||||||
|
self.ch_start = 0
|
||||||
|
elif self.chamber.target == 3: # pump cont.
|
||||||
|
self.status.ch = 8
|
||||||
|
self.ch_start = 0
|
||||||
|
elif self.chamber.target == 4: # vent cont.
|
||||||
|
self.status.ch = 9
|
||||||
|
self.ch_start = 0
|
||||||
|
elif self.chamber.target == 1: # purge and seal
|
||||||
|
self.status.ch = 4
|
||||||
|
self.ch_start = now
|
||||||
|
elif self.chamber.target == 2: # vent and seal
|
||||||
|
self.status.ch = 5
|
||||||
|
self.ch_start = now
|
||||||
|
elif self.chamber.target == 5: # hi vac.
|
||||||
|
self.status.ch = 6 # pumping down
|
||||||
|
self.ch_start = now
|
||||||
|
elif self.ch_start and now > self.ch_start + 15:
|
||||||
|
self.ch_start = 0
|
||||||
|
if self.chamber.target == 5:
|
||||||
|
self.status.ch = 7 # at high vac.
|
||||||
|
else:
|
||||||
|
self.status.ch = self.chamber.target
|
||||||
|
|
||||||
if abs(self.t - self.temp.target) < 0.01:
|
if abs(self.t - self.temp.target) < 0.01:
|
||||||
self.status.t = 1
|
self.status.t = 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user