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)
This commit is contained in:
2026-06-09 14:21:21 +02:00
parent cf6592da53
commit 81282167c3
+26 -14
View File
@@ -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'