heliox: improve drivers
- adjustable sorb temperatures - two phases: one for about 5 min at sorbset1, then sorbset2
This commit is contained in:
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user