heliox: improve drivers

- adjustable sorb temperatures
- two phases: one for about 5 min at sorbset1, then sorbset2
This commit is contained in:
2025-07-11 14:11:30 +02:00
parent 4941232be6
commit e8baff57d7

View File

@ -41,6 +41,18 @@ proc stdConfig::heliox {} {
prop check heliox::check_condenseflow prop check heliox::check_condenseflow
prop help "flow for condensing" prop help "flow for condensing"
prop write stdSct::complete 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 { catch {
hsetprop /tt getsample hvali /th/pot hsetprop /tt getsample hvali /th/pot
@ -116,6 +128,8 @@ proc heliox::check_set {} {
tt dblctrl 0 tt dblctrl 0
tt set 1.25 tt set 1.25
catch {hdelprop /ts/mode soft_deadline} catch {hdelprop /ts/mode soft_deadline}
catch {hdelprop /ts/mode condense_deadline}
catch {hdelprop /ts/mode deadline1}
} }
default { default {
error "bad mode" error "bad mode"
@ -185,13 +199,15 @@ proc heliox::check_mode {} {
th set 0 th set 0
th setsorb/channel C th setsorb/channel C
th mainloop set th mainloop set
th setsorb 40 th setsorb [hvali [sct parent]/sorbset1]
tt set 1.25 tt set 1.25
tt dblctrl 0 tt dblctrl 0
set state "-> condense" set state "-> condense"
hsetprop /th target 0.25 hsetprop /th target 0.25
hsetprop /ts target 0.25 hsetprop /ts target 0.25
catch {hdelprop /ts/mode soft_deadline} catch {hdelprop /ts/mode soft_deadline}
catch {hdelprop /ts/mode condense_deadline}
catch {hdelprop /ts/mode deadline1}
} }
} }
setmainsensor $mainsensor setmainsensor $mainsensor
@ -250,12 +266,34 @@ proc heliox::read {} {
} }
} }
if {$mode == 4} { 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 # above 3 K: set deadline
nv set [hvali [sct parent]/condenseflow] nv set [hvali [sct parent]/condenseflow]
set lasts_until 0 set lasts_until 0
set sorbset2 [hvali [sct parent]/sorbset2]
if {[result th setsorb] != $sorbset2} {
th setsorb $sorbset2
}
sct condense_deadline [expr $now + 3600] sct condense_deadline [expr $now + 3600]
} elseif {[result th sorb] > 39} { } else {
nv set [hvali [sct parent]/condenseflow] nv set [hvali [sct parent]/condenseflow]
# 3He vapor pressure: 200 mbar at 2 K, power law # 3He vapor pressure: 200 mbar at 2 K, power law
set p [expr 200 * ($ts / 2.0) ** 3.5] 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 target_hours [hvali [sct parent]/target_hours]
set lasts_until [expr int($now + $hours * 3600)] set lasts_until [expr int($now + $hours * 3600)]
calc_pot $lasts_until calc_pot $lasts_until
sct condense_deadline [silent [expr $now + 3600] sct condense_deadline]
if {$hours > 8} { if {$hours > 8} {
set dl [expr $now + ($target_hours - $hours) * 30] set dl [expr $now + ($target_hours - $hours) * 30]
set sdl [silent $dl sct soft_deadline] 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" clientput "stop condensing - target_hours is probably too high - expect only [expr round($hours)] h hold time"
set target_hours $hours set target_hours $hours
} }
} elseif {$now > [sct condense_deadline]} { } elseif {$now > $condense_deadline} {
clientput "condense timeout - hold time is probably very low" clientput "condense timeout - hold time is probably very low"
set target_hours $hours set target_hours $hours
} }