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 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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user