From 81282167c3e30ae6dcbfa6f27b28ee73f09db0c9 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Fri, 20 Mar 2026 15:52:10 +0100 Subject: [PATCH] frappy-psi.jtccr: fixes, use parameters instead of properties limit should be visible and should also be modifiable for test purposes + remove vm (as it is not connected and may be removed later) --- frappy_psi/jtccr.py | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/frappy_psi/jtccr.py b/frappy_psi/jtccr.py index 2c3c3000..5cb33024 100644 --- a/frappy_psi/jtccr.py +++ b/frappy_psi/jtccr.py @@ -35,29 +35,36 @@ class JTCCR(Writable): value = Parameter('current state', datatype=EnumType(STATES), default=0) target = Parameter('target state', datatype=EnumType(STATES), default=0) #p1min = Property('lower limit to switch to high pressure mode', dataype=FloatRange(unit='mbar'), default=1.8) - p1max = Property('limit to switch to circulating mode', datatype=FloatRange(unit='mbar'), default=2.2) - p2min = Property('lower limit to turn compressor off', datatype=FloatRange(unit='mbar'), default=0.12) - p2max = Property('upper limit to turn compressor on', datatype=FloatRange(unit='mbar'), default=0.8) + p1max = Parameter('limit to switch to circulating mode', datatype=FloatRange(unit='mbar'), + readonly=False, default=2.2) + p2min = Parameter('lower limit to turn compressor off', datatype=FloatRange(unit='mbar'), + readonly=False, default=0.12) + p2max = Parameter('upper limit to turn compressor on', datatype=FloatRange(unit='mbar'), + readonly=False, default=0.8) #p2lim = Property('do not start compressor if p2 is below this value', datatype=FloatRange(unit='mbar'), default=0.15) - pdifmax = Property('max pressure difference of compressor', datatype=FloatRange(unit='mbar'), default=5.0) - pdifmargin = Property('safety margin for pressure difference of compressor', - datatype=FloatRange(unit='mbar'), default=1.0) - p3margin = Property('start compressor when p3 is below pressreg setpoint plus this value', - datatype=FloatRange(unit='mbar'), default=0.01) + pdifmax = Parameter('max pressure difference of compressor', datatype=FloatRange(unit='mbar'), + readonly=False, default=5.0) + pdifmargin = Parameter('safety margin for pressure difference of compressor', + datatype=FloatRange(unit='mbar'), + readonly=False, default=1.0) + p3margin = Parameter('start compressor when p3 is below pressreg setpoint plus this value', + datatype=FloatRange(unit='mbar'), + readonly=False, default=0.01) p3reg = Parameter('pressure regulation setpoint', datatype=FloatRange(unit='mbar'), default=4.0) - plow = Property('pressure below 5K', datatype=FloatRange(unit='mbar'), default=4.0) + plow = Parameter('pressure below 5K', datatype=FloatRange(unit='mbar'), + readonly=False, default=4.0) valves_high_pressure = { 'close': 'v3 v4 v5 v6 v7 v8 v10', - 'open': 'v1 v2 v9 vm', + 'open': 'v1 v2 v9', # vm } valves_circulating = { 'close': 'v3 v4 v5 v6 v7 v9 v10', - 'open': 'v1 v2 v8 vm', + 'open': 'v1 v2 v8', # vm } valves_warmup = { 'close': 'v6 v7 v8 v9 v10', - 'open': 'v1 v2 v3 v4 v5 vm', + 'open': 'v1 v2 v3 v4 v5', # vm } valves_security= { 'open': '', @@ -70,7 +77,8 @@ class JTCCR(Writable): def write_target(self, target): if self.value != target: - self.set_mode(STATES.get(target)) + self.log.info('set mode %r', target) + self.set_mode(target) return target def set_mode(self, state): @@ -82,6 +90,8 @@ class JTCCR(Writable): self.handle_valves(**self.valves_circulating) elif state == 'warmup': self.handle_valves(**self.valves_warmup) + elif state != 'manual': + self.log.error('unknown state %r', state) self.value = state def security_settings(self): @@ -91,11 +101,13 @@ class JTCCR(Writable): def handle_valves(self, close=(), open=()): """set given valves. raises ImpossibleError, when checks fails""" + self.log.info('handle_valves %r %r', close, open) self._valves_to_wait_for = {} self._valves_failed = {True: [], False: []} for flag, valves in enumerate([close, open]): for vname in valves.split(): valve = self.secNode.modules[vname] + self.log.info('set valve %s to %r', vname, flag) valve.write_target(flag) # TODO: do we need to wait for motor valve? @@ -131,7 +143,7 @@ class JTCCR(Writable): self.compressor.write_target(False) if (p3 - p2) >= self.pdifmax + 0.1: self.handle_valves(**self.valves_overpressure) - self.status = BUSY, 'release to recovery' + self.status = WARN, 'release to recovery' elif self.secNode.modules['v10'].read_value(): self.secNode.modules['v10'].write_target(False) self.status = IDLE, 'release finished'