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

90 lines
1.9 KiB
Tcl

namespace eval amoroven {
}
proc stdConfig::amoroven {} {
controller syncedprot
obj AMOROVEN rd
prop read amoroven::read_press
kids "pressure, pump and gas" {
node vacuumpump wr -int
prop enum 1
prop read amoroven::read_pump
prop check amoroven::check_pump
prop write stdSct::complete
node gasflow wr -int
prop enum 1
prop read amoroven::read_valve hcd hv
prop check amoroven::set_valve hcd
prop write stdSct::complete
node tlimit par 700
node tlimit_without_vacuum par 320
}
}
proc amoroven::read_press {} {
sct update [expr [result cc f] * 4 + 4]
return idle
}
proc amoroven::update_limit {vacuumon} {
if {$vacuumon} {
set tlim [hval [sct parent]/tlimit]
set msg ""
} else {
set tlim [hval [sct parent]/tlimit_without_vacuum]
set msg " vacuum pump off"
}
if {$tlim != [result tt set/limit] || [silent "" hgetpropval /tt/set tlimit_message] ne $msg} {
tt set/limit $tlim
hsetprop /tt/set tlimit_message $msg
}
}
proc amoroven::check_pump {} {
if {[sct target]} {
update_limit 1
} else {
set tlim [hval [sct parent]/tlimit_without_vacuum]
if {[result tt set] > $tlim || [result tt] > $tlim} {
error "temperature to high to switch off pump"
}
update_limit 0
}
set_valve nc
}
proc amoroven::read_pump {} {
read_valve nc nv
set tlim [result tt set/limit]
update_limit [hvali [sct]]
if {![hvali [sct]] && [hvali /tt/set] > $tlim} {
tt set 0
clientlog "WARNING: vacuumpump off, switched off T"
}
return idle
}
proc amoroven::set_valve {cmd} {
set on [expr [sct target] != 0]
clientput "$cmd $on"
cc $cmd $on
sct update $on
return idle
}
proc amoroven::read_valve {cmd getcmd} {
# if sct requested is available, the target is changed, but not yet applied
if {[silent [result cc $getcmd] sct requested]} {
# refresh
cc $cmd 1
sct update 1
} else {
sct update 0
}
return idle
}