jtccr: add more logic

- set VTI T
- stop CCR compressor on warmup
This commit is contained in:
2026-08-11 15:53:28 +02:00
parent e91b61dc0b
commit 0251d52f65
+12 -7
View File
@@ -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'