From 0251d52f65e5f9518e9caab296bfdbae262b38fa Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Mon, 6 Jul 2026 14:34:25 +0200 Subject: [PATCH] jtccr: add more logic - set VTI T - stop CCR compressor on warmup --- frappy_psi/jtccr.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/frappy_psi/jtccr.py b/frappy_psi/jtccr.py index 19f76a78..d3eda86a 100644 --- a/frappy_psi/jtccr.py +++ b/frappy_psi/jtccr.py @@ -33,6 +33,8 @@ class JTCCR(Writable): compressor = Attached() ccrcompressor = Attached() + preg = Attached() + ccr_temp = Attached() value = Parameter('current state', datatype=EnumType(STATES), default=0) target = Parameter('target state', datatype=EnumType(STATES), default=0) @@ -52,7 +54,7 @@ class JTCCR(Writable): p3margin = Parameter('start compressor when p3 is below pressreg setpoint plus this value', datatype=FloatRange(unit='bar'), readonly=False, default=0.01) - p3reg = Parameter('pressure regulation setpoint', datatype=FloatRange(unit='bar'), default=4.0) + # preg = Parameter('pressure regulation setpoint', datatype=FloatRange(unit='bar'), default=4.0) plow = Parameter('pressure below 5K', datatype=FloatRange(unit='bar'), readonly=False, default=4.0) @@ -87,14 +89,17 @@ class JTCCR(Writable): def set_mode(self, state): if state == 'high_pressure': - self.p3reg = 12 + self.preg.write_target(12) self.handle_valves(**self.valves_high_pressure) + self.ccr_temp.write_target(1) elif state == 'circulating': - self.p3reg = self.plow + self.preg.write_target(self.plow) self.handle_valves(**self.valves_circulating) + self.ccr_temp.write_target(1) elif state == 'warmup': + self.ccr_temp.write_target(270) self.handle_valves(**self.valves_warmup) - self.ccrcompressor(False) + self.ccrcompressor.write_target(False) elif state != 'manual': self.log.error('unknown state %r', state) self.value = state @@ -129,20 +134,20 @@ class JTCCR(Writable): self.security_settings() self.status = WARN, 'overpressure: He recovery output closed?' return - if p2 < self.p2min and p3 < self.p3reg and self.value != 'high_pressure': + if p2 < self.p2min and p3 < self.preg.target and self.value != 'high_pressure': # underpressure protection self.security_settings() self.status = WARN, 'underpressure: not enough He' return if self.value == 'circulating': - if p3 < self.p3reg and not compressor_state: + if p3 < self.preg.target and not compressor_state: self.compressor.write_target(True) elif (p3 - p2) > self.pdifmax and compressor_state: self.compressor.write_target(False) # TODO: do we need to skip overpressure protection for one time? if self.value == 'high_pressure': if not self.ccrcompressor.read_value(): - if p4 > self.p3reg * 0.99: + if p4 > self.preg.target * 0.99: if self._start_ccr is None: self._start_ccr = time.time() + 900 # 15 min self.status = IDLE, 'flush a little before cooling'