Files
sea/tcl/drivers/pgas.tcl
2022-08-18 15:04:28 +02:00

98 lines
2.4 KiB
Tcl

# gas pressure automation
# makes sure capillary is always warm enough
# uses the following objects:
# tt: vti temperature
# tc: capillary temperature
# p: pressure ?
namespace eval pgas {
}
proc stdConfig::pgas {} {
controller syncedprot
obj PGAS rd -text
prop checklimits pgas::checklimits
prop read pgas::read
prop write stdSct::complete
prop label ""
prop help "automation is off when T > max_cpl"
prop initcnt 5
kids "capillary automation" {
node auto par 1
prop help "activate automation for pressure cell"
prop enum 1
prop newline 1
node min_cpl par 20
node max_cpl par 100
node fact_cpl par 1.5
node max_ramp par 2
node target upd
}
}
proc pgas::read {} {
set T [expr max([hvali /tt/tm], [hvali /tt/ts])]
set auto [hval [sct]/auto]
set target [hvali /tt/target]
set max_cpl [hval [sct]/max_cpl]
set text "manual mode: be careful"
if {$T > $max_cpl && ($target > $max_cpl || $target == 0)} {
set auto 0
set text "off (T > max_cpl or target > max_cpl)"
}
if {[sct initcnt] > 0} {
sct initcnt [expr [sct initcnt] - 1]
set auto 0
set text "initializing"
}
if {$auto} {
set text "on"
}
sct update $text
if {!$auto} {
return idle
}
# relevant T:
set T0 [expr max($target, $T)]
set capTarget [expr round(max([hvali [sct]/min_cpl], min([hvali [sct]/max_cpl], $T0 * [hvali [sct]/fact_cpl])))]
set capT [hvali /tc]
if {abs($capTarget - [hval /tc/set]) > 0.6} {
tc set $capTarget
hupdate /tc/target $capTarget
}
set ramp [hval /tt/set/ramp]
if {($ramp == 0 || $ramp > [hvali [sct]/max_ramp]) && [hval /tt/tm] < [hval /tt/set]} {
if {$ramp == 0} {
tt set [hval /tt/tm]
}
set ramp [hvali [sct]/max_ramp]
clientlog "WARNING: set tt ramp back to $ramp"
tt set/ramp $ramp
}
if {$T < $max_cpl - 10 && $capT <= $T} {
if {[hvali /tt/set] > 10 || $ramp != 0} {
clientlog "WARNING: T $T > capillary $capT -> setpoint 1"
tt set/ramp 0
if {[hvali /tt/dblctrl]} {
sct activate_dblctrl 1
tt dblctrl 0
}
internalset /tt/set 1
}
sct fastcool 1
} elseif {[silent 0 sct fastcool]} {
clientlog "capillary ok -> setpoint back to $target"
run tt $target
if {[silent 0 sct activate_dblctrl]} {
tt dblctrl 1
sct activate_dblctrl 0
}
sct fastcool 0
}
return idle
}