From e8baff57d73c7e8f9e94234aeb8879e664b604fd Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Fri, 11 Jul 2025 14:11:30 +0200 Subject: [PATCH] heliox: improve drivers - adjustable sorb temperatures - two phases: one for about 5 min at sorbset1, then sorbset2 --- tcl/drivers/heliox.tcl | 47 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/tcl/drivers/heliox.tcl b/tcl/drivers/heliox.tcl index 9493fea..0e8cd9f 100644 --- a/tcl/drivers/heliox.tcl +++ b/tcl/drivers/heliox.tcl @@ -41,6 +41,18 @@ proc stdConfig::heliox {} { prop check heliox::check_condenseflow prop help "flow for condensing" prop write stdSct::complete + + node sorbset1 par 40 + prop help "sorb T for condensing phase 1" + + node sorbset2 par 30 + prop help "sorb T for condensing phase 2" + + node ts_threshold par 2.7 + prop help "ts threshold to trigger condensation" + prop write stdSct::complete + + } catch { hsetprop /tt getsample hvali /th/pot @@ -116,6 +128,8 @@ proc heliox::check_set {} { tt dblctrl 0 tt set 1.25 catch {hdelprop /ts/mode soft_deadline} + catch {hdelprop /ts/mode condense_deadline} + catch {hdelprop /ts/mode deadline1} } default { error "bad mode" @@ -185,13 +199,15 @@ proc heliox::check_mode {} { th set 0 th setsorb/channel C th mainloop set - th setsorb 40 + th setsorb [hvali [sct parent]/sorbset1] tt set 1.25 tt dblctrl 0 set state "-> condense" hsetprop /th target 0.25 hsetprop /ts target 0.25 catch {hdelprop /ts/mode soft_deadline} + catch {hdelprop /ts/mode condense_deadline} + catch {hdelprop /ts/mode deadline1} } } setmainsensor $mainsensor @@ -250,12 +266,34 @@ proc heliox::read {} { } } if {$mode == 4} { - if {$ts > 3} { + # try first to heat sorb to sorbset2 + # when reached, wait 5 minutes or ts > ts_threshold + # then wait for ts < ts_threshold + # set sorb to sorbset2 and calcualte condense_deadline + # as soon as the calculated target hours (from vapor pressure + # of helium3 at ts) is bigger than the target_hours parameter, + # sorb heating is stopped and cooldown starts + set deadline1 [silent 0 sct deadline1] + set condense_deadline [silent 0 sct condense_deadline] + if {$deadline1 == 0} { + set deadline1 [expr $now + 300] + sct deadline1 $deadline1 + } + if {[result th sorb] < [result th setsorb] - 1} { + sct deadline1 [expr $now + 300] + return idle + } elseif {$now < $deadline1 && $ts < [hvali [sct parent]/ts_threshold]} { + return idle + } elseif {$ts > [hvali [sct parent]/ts_threshold] || $condense_deadline == 0} { # above 3 K: set deadline nv set [hvali [sct parent]/condenseflow] set lasts_until 0 + set sorbset2 [hvali [sct parent]/sorbset2] + if {[result th setsorb] != $sorbset2} { + th setsorb $sorbset2 + } sct condense_deadline [expr $now + 3600] - } elseif {[result th sorb] > 39} { + } else { nv set [hvali [sct parent]/condenseflow] # 3He vapor pressure: 200 mbar at 2 K, power law set p [expr 200 * ($ts / 2.0) ** 3.5] @@ -268,7 +306,6 @@ proc heliox::read {} { set target_hours [hvali [sct parent]/target_hours] set lasts_until [expr int($now + $hours * 3600)] calc_pot $lasts_until - sct condense_deadline [silent [expr $now + 3600] sct condense_deadline] if {$hours > 8} { set dl [expr $now + ($target_hours - $hours) * 30] set sdl [silent $dl sct soft_deadline] @@ -278,7 +315,7 @@ proc heliox::read {} { clientput "stop condensing - target_hours is probably too high - expect only [expr round($hours)] h hold time" set target_hours $hours } - } elseif {$now > [sct condense_deadline]} { + } elseif {$now > $condense_deadline} { clientput "condense timeout - hold time is probably very low" set target_hours $hours }