Merge branch 'master' of gitlab.psi.ch-samenv:samenv/sea

Conflicts:
	tcl/drivers/hepump.tcl
This commit is contained in:
2023-10-24 13:21:16 +02:00
21 changed files with 229 additions and 167 deletions

2
.gitignore vendored
View File

@ -33,6 +33,7 @@ CVS
/focus
/hifi
/hrpt
/hrpt2
/morpheus
/poldi
/ppms
@ -40,6 +41,7 @@ CVS
/seaman
/tasp
/zebra
/zebra2
/logger_tar
cheat_chart
tcl/stuff_before_2022

View File

@ -28,7 +28,7 @@ GraphAdd 17tf.nlevel % N2_lev black
#makeCCU4 blank nv
#GraphAdd nv.flow mbar nv_flow red
makenv ln2fill -driver ccu4ext n2 "17tf nlevel"
makenv ln2fill -driver ccu4ext n2 /17tf/nlevel
#make17tfNv

View File

@ -1,54 +1,13 @@
stickDesc = 100 mm dilution
deviceDesc = DIL5 Frappy history recorder
set box linse-dil5
set ::secop_version 4
proc triton {kind obj name db col {htrdb ""}} {
upvar box box
makenv $obj -driver itc$kind -port ${box}:33576 -controller _tritondil $db $htrdb
switch $kind {
temp {
GraphAdd $obj K_3 T_$name
# GraphAdd $obj.raw Ohm_3 R_$name
}
press {
GraphAdd $obj mbar_2 p_$name
}
}
set ins [result instrument]
if {[string match "prep*" $ins]} {
set nr [string range $ins end end]
makenv frappy_stick -driver secop -port localhost:1521$nr
} elseif {[lindex [split [info hostname] .] 0] ne $ins} {
error "runs on instruments or prep0-9 only"
} else {
makenv frappy_stick -driver secop -port localhost:15201
}
proc itcchan {obj name dbt dbh col setcol} {
upvar box box
makenv $obj -driver itctemp -port ${box}:3000 -controller _itcdil ${dbt}.T1 ${dbh}.H1
GraphAdd $obj K_5 T_$name
GraphAdd $obj.set K_5 T_${name}_set $setcol
# GraphAdd $obj.pow W_3 pow_$name
# GraphAdd $obj.raw Ohm_3 R_$name
}
itcchan twstill wupstill MB1 MB0 blue cyan
itcchan tonek oneK DB5 DB3 red orange
itcchan twmix wupMix DB6 DB1 green lightgreen
itcchan twivc wupIVC DB7 DB2 magenta violet
itcchan tcond cond DB8 DB3 yellow grey
triton temp tsorb sorb T1 dark_violet
triton temp tivc IVC T2 brown
triton temp tstill still T3 orange
triton temp tcp cond T4 grey
triton temp tmix mix T5 cyan H1
triton press pdump dump P1 cyan
triton press pcond cond P2 blue
triton press pstill still P3 black
triton press pfore fore P4 green
triton press pback back P5 red
makenv tmixdrv -driver drvpar /tmix
defineTemperature tmixdrv

View File

@ -3,7 +3,7 @@ namespace eval ccu4ext {
}
# automatic fill with level reading from external source
proc stdConfig::ccu4ext {type {readlevel 0}} {
proc stdConfig::ccu4ext {type {readpath 0}} {
variable node
variable ctrl
@ -27,13 +27,14 @@ proc stdConfig::ccu4ext {type {readlevel 0}} {
node state upd -text
node readlevel -text par $readlevel
node readpath -text par $readpath
prop visible false
node lowlevel par 10
node highlevel par 100
node smooth upd
prop fmt %.7g
prop geterror undefined
default -1
node minfillminutes par 3.0
@ -89,7 +90,7 @@ proc ccu4ext::changestate {type state} {
proc ccu4ext::calcsmooth {level minspeed maxspeed} {
if {![string is double $level]} {
return 999.9
return 199
}
set now [clock seconds]
set lasttime [silent 0 sct lasttime]
@ -98,10 +99,7 @@ proc ccu4ext::calcsmooth {level minspeed maxspeed} {
}
set delta [expr $now - $lasttime]
sct lasttime $now
set smooth [hvali [sct]/smooth]
if {$smooth < 0} {
set smooth $level
}
set smooth [silent $level hvali [sct]/smooth]
set gs [expr $smooth + $delta * $maxspeed]
if {$level > $gs} {
set smooth $gs
@ -126,6 +124,7 @@ proc ccu4ext::calcsmooth {level minspeed maxspeed} {
}
}
hupdate [sct]/smooth $smooth
hdelprop [sct]/smooth geterror
return $smooth
}
@ -148,7 +147,8 @@ proc ccu4ext::fillExt {type} {
}
}
set errtxt ""
set sm [expr [DoubleTime] > [silent 0 sct change_time] + 10]
set now [DoubleTime]
set sm [expr $now > [silent 0 sct change_time] + 10]
switch -- $valve {
0 {
set txt "fill valve off"
@ -178,6 +178,12 @@ proc ccu4ext::fillExt {type} {
set errtxt "unknown error"
}
}
set rdpath [hvali [sct]/readpath]
set level [hvali $rdpath]
set levelerror [silent "" hgetpropval $rdpath geterror]
if {$levelerror ne "" && $errtxt eq "" && [hvali [sct]] < 2} {
set errtxt "$txt ($rdpath $levelerror)"
}
if {$errtxt eq ""} {
updateval [sct]/state $txt
hupdate [sct]/status ""
@ -189,11 +195,6 @@ proc ccu4ext::fillExt {type} {
changestate $type fill
return idle
}
set level [silent invalid result [hvali [sct]/readlevel]]
if {! [string is double $level]} {
hsetprop [sct]/readlevel geterror "illegal $type level reading"
return idle
}
set state [sctval [sct]]
set now [clock seconds]
set lowlevel [hvali [sct]/lowlevel]
@ -219,6 +220,7 @@ proc ccu4ext::fillExt {type} {
return idle
}
0 { # watching
validated_level
set minspeed [expr - 100.0 / [hvali [sct]/minholdhours] / 3600.]
set maxspeed [expr - 100.0 / [hvali [sct]/maxholdhours] / 3600.]
set s [calcsmooth $level $minspeed $maxspeed]
@ -231,13 +233,18 @@ proc ccu4ext::fillExt {type} {
}
# start fill
hset [sct] 1
clientput "$type level low - start fill"
clientput "$type level low ($level smooth $s) - start fill"
} else {
changestate $type stop
}
return idle
}
1 {
1 { # filling
if {[validated_level] eq ""} {
hset [sct] 2
changestate $type off
return idle
}
set vcmd [silent 0 sct vessel_cmd]
# check that vessel command works
if {$vcmd ne "0" && [catch {[result $vcmd]}]} {
@ -246,7 +253,7 @@ proc ccu4ext::fillExt {type} {
set vmd 0
}
set now [clock seconds]
set s [hvali [sct]/smooth]
set s [silent $level hval [sct]/smooth]
sct minlevel [silent 999 sct minlevel]
if {$s < [sct minlevel]} {
sct minlevel $s
@ -321,12 +328,30 @@ proc ccu4ext::fillExt {type} {
return idle
}
proc ccu4ext::validated_level {} {
set rdpath [hval [sct]/readpath]
if {[DoubleTime] < [silent 0 hgetpropval $rdpath read_time] + 30} {
return [hval $rdpath]
}
if {[silent "" hgetpropval $rdpath geterror] eq ""} {
clientlog "ERROR: no reading of $rdpath within 30 sec"
}
hsetprop $rdpath geterror not_available
return ""
}
proc ccu4ext::writeExt {type {activate 1}} {
sct update [sct target]
hupdate [sct]/smooth [silent 0 result [hvali [sct]/readlevel]]
switch -- [sct target] {
# watching
0 {
set level [validated_level]
if {$level eq ""} {
changestate $type off
sct update 2
return idle
}
hupdate [sct]/smooth $level
catch {logsetup [sct]/vext clear}
hupdate [sct]/status ""
eval [silent "expr 0" sct slow_cmd]
@ -350,6 +375,13 @@ proc ccu4ext::writeExt {type {activate 1}} {
}
# fill
1 {
set level [validated_level]
if {$level eq ""} {
changestate $type off
sct update 2
return idle
}
hupdate [sct]/smooth $level
hupdate [sct]/status ""
set vcmd [silent 0 sct vessel_cmd]
if {$vcmd ne "0"} {

View File

@ -8,7 +8,7 @@ proc stdConfig::ccu4flow {args} {
obj ccu4flow wr
prop write ccu4flow::setmode
prop read "ccu4flow::read [silent 0 result instconfig sensirion]"
prop read ccu4flow::read
prop dir 1
prop enum fixed=0,controlled=1,automatic=2,close=3,open=4
prop filter 0
@ -28,10 +28,14 @@ proc stdConfig::ccu4flow {args} {
prop lastmov 0
prop hystpulse 0
prop lastist 0
set sensirion 0
foreach arg $args {
if {$arg eq "release_blocked"} {
prop release_blocked 1
}
if {$arg eq "1"} {
set sensirion 1
}
}
default 0
kids "needle valve" {
@ -48,29 +52,35 @@ proc stdConfig::ccu4flow {args} {
node flowmax par 20
prop label "flow maximum"
node flowp upd
prop help "flow calculated from pressure before pump"
node span upd
node use_pressure par -int [expr !$sensirion]
prop enum 1
prop help "use pressure instead of flow meter for control"
node ctrl -none
kids "control parameters" {
node regtext upd -text
default regulate
prop label status
prop width 40
node prop_o par 0.1
node prop_o par 0.05
prop help {prop [sec/mbar] when opening. above 4 mbar a 10 times lower value is used}
node prop_c par 0.05
node prop_c par 0.03
prop help {prop [sec/mbar] when closing. above 4 mbar a 10 times lower value is used}
node deriv_o par 30
prop help {convergence target time [sec] when opening}
node deriv_c par 30
prop help {convergence target time [sec] when closing}
node minpulse_o out
default 0.05
prop help {minimum close pulse [sec]}
@ -92,11 +102,11 @@ proc stdConfig::ccu4flow {args} {
node tol par 0.25
prop label tolerance
prop help {valid below 3 mbar}
node tolhigh par 0.5
prop label tol. above 4
prop help {valid above 4 mbar}
node openpulse par 60
prop help {time to open from completely closed to a significant opening}
@ -104,7 +114,7 @@ proc stdConfig::ccu4flow {args} {
prop enum 1
prop help {adjust minpulse automatically}
}
node autoflow -none
kids "autoflow control parameters" {
flow::make ccu4flow::tmts {result tt set/reg}
@ -112,7 +122,7 @@ proc stdConfig::ccu4flow {args} {
node calib -none
kids calib {
node ln_per_min_per_mbar par 0.9
node mbar_offset par 0.5
node mbar_offset par 0.8
}
}
}
@ -158,21 +168,19 @@ proc ccu4flow::check_minpulse {dir} {
sct update [sct target]
}
proc ccu4flow::read {{sensirion 0}} {
proc ccu4flow::read {} {
hsetprop /cc/fa nvpath [sct]
_cc updatescript /cc/fa ccu4flow::updatemode
hsetprop /cc/f nvpath [sct]
if {$sensirion} {
hsetprop /nvflow flowsource flowmeter
hsetprop /cc/f nvctrl [sct controller]
hsetprop /cc/f flowsource pressure
_cc updatescript /cc/f ccu4flow::updateflow
catch {
hsetprop /nvflow flowsource flow
hsetprop /nvflow nvpath [sct]
hsetprop /nvflow nvctrl [sct controller]
_hemot updatescript /nvflow ccu4flow::updateflow
hsetprop /cc/f flowsource pressref
} else {
hsetprop /cc/f nvctrl [sct controller]
hsetprop /cc/f flowsource flowpress
}
_cc updatescript /cc/f ccu4flow::updateflow
return unpoll
}
@ -220,11 +228,10 @@ proc ccu4flow::updatemode {value} {
proc ccu4flow::updateflow {value} {
# flowsource:
# pressref: just update nv/flowp
# flowmeter: update nv/flow
# flowpress: flow from pressure
# pressure: this is a pressure
# flow: this is a flow from a flowmeter
set source [silent pressure sct flowsource]
set source [silent none sct flowsource]
set n [silent 9 sct filter_n]
set filter [lrange "[silent $value sct filter] $value" end-$n end]
sct filter $filter
@ -257,9 +264,9 @@ proc ccu4flow::updateflow {value} {
}
}
sct filtered $flow
if {$source eq "flowmeter"} {
if {$source eq "flow"} {
updateval [sct nvpath]/flow $flow
} else {
} elseif {$source eq "pressure"} {
if {$flow < -50} {
set flow -62.5
} else {
@ -267,12 +274,10 @@ proc ccu4flow::updateflow {value} {
set fpm [hval [sct nvpath]/calib/ln_per_min_per_mbar]
set flow [expr ($flow - $off) * $fpm]
}
if {$source eq "pressref"} {
hupdate [sct nvpath]/flowp $flow
return
}
updateval_e [sct nvpath]/flow $flow -62.5 no_sensor
updateval_e [sct nvpath]/flowp $flow -62.5 no_sensor
hupdate [sct nvpath]/span $span
} else {
error "[sct] illegal flowsource: $source"
}
[sct nvctrl] queue [sct nvpath] read ccu4flow::ctrl
}
@ -384,7 +389,11 @@ proc ccu4flow::ctrl {} {
}
set regstate [sct regstate]
set now [DoubleTime]
set ist [hvali [sct]/flow]
if {[hval [sct]/use_pressure]} {
set ist [hvali [sct]/flowp]
} else {
set ist [hvali [sct]/flow]
}
set tol [hvali [sct]/ctrl/tol]
set tolhigh [hvali [sct]/ctrl/tolhigh]
set closestate 0

View File

@ -821,8 +821,8 @@ proc dil12::autostep {phase init} {
dil12::msg "pump for 15 more seconds"
}
}
} elseif {[sct pumptime] != 0} {
dil12::msg "there might be some mixure in TRAP A, please check"
# } elseif {[sct pumptime] != 0} {
# dil12::msg "there might be some mixure in TRAP A, please check"
}
}
init_pipes_ready {

View File

@ -160,29 +160,33 @@ proc hepump::set_calib {} {
hsetprop /nv off_reason "pump mode changed"
sct print "pump mode change: suspend needle valve control for 20 sec."
}
return idle
return idle
}
proc hepump::read {} {
set p [expr [silent 0 result cc f] * [silent 0.6 hvali /nv/calib/ln_per_min_per_mbar]]
set f [silent 0 result nvflow]
if {[hvali [sct]/eco] == 0 && $p > 1 && $f > 0.5 && $f < 25} {
set health [expr 100 * $f / ($p / 1.2 - 0.5)]
set health [expr [silent $health sct health] * 0.95 + 0.05 * $health]
sct health $health
if {abs($health - [silent 0 hval [sct]/health]) > 1} {
sct health_cnt 0
hupdate [sct]/health [format %.1f $health]
} else {
sct health_cnt [expr [sct health_cnt] + 1]
if {[sct health_cnt] == 10} {
if {$health > 100} {set health 100}
catch {prep0 / pump_health_update [result instrument] [format %.0f $health]} msg
}
set p [silent 0 result nv flowp]
set f [silent 0 result nv flow]
set p_buf [silent 0 sct p_buf]
set f_buf [silent 0 sct f_buf]
lappend p_buf $p
lappend f_buf $f
sct p_buf [lrange $p_buf end-30 end]
sct f_buf [lrange $f_buf end-30 end]
set pmin [tcl::mathfunc::min {*}$p_buf]
set pmax [tcl::mathfunc::max {*}$p_buf]
set fmin [tcl::mathfunc::min {*}$f_buf]
set fmax [tcl::mathfunc::max {*}$f_buf]
if {[silent 0 hval [sct]/eco] == 0 && $pmin >= 1 && $fmin >= 0.5 && $fmin < 25} {
set hmax [expr round(100 * $fmax / ($pmin - 0.4))]
set hmin [expr round(100 * $fmin / ($pmax - 0.4))]
set health [silent 100 hval [sct]/health]
if {$hmax < $health} {
set health $hmax
} elseif {$hmin > $health} {
set health $hmin
}
} else {
# reset filter
hdelprop [sct] health
hupdate [sct]/health $health
catch {prep0 / pump_health_update [result instrument] [expr min($health, 100)]} msg
}
return [hepump::set_calib]
}
@ -401,7 +405,9 @@ proc hepump::get_auto {} {
set eco [sctval [sct parent]/eco]
set lim [sctval [sct parent]/eco_t_lim 7]
set target [silent [silent $lim hval /tt/target] hval /tt/set/reg]
if {$target < $lim && [silent $lim hval /tt] < 2 * $lim} {
if {[silent 0 result nv use_pressure]} {
set ecoset 0
} elseif {$target < $lim && [silent $lim hval /tt] < 2 * $lim} {
set ecoset 0
} elseif {$target > $lim || [silent $lim hval /tt] > 3 * $lim} {
set ecoset 1

View File

@ -895,7 +895,7 @@ proc lsc::set_curve {} {
}
#write action, direct
proc lsc::check_header {id} {
proc lsc::check_header {{id unknown}} {
upvar #0 lsc::cache_$id cache
if {[lsc::hdreq $cache([sct curveno]) [sct result]]} {
sct oldhdr [sct result]
@ -4628,6 +4628,7 @@ proc stdConfig::lsc_end {} {
if {$lsc(samplesensor) eq ""} {
set lsc(samplesensor) $lsc(mainsensor)
}
dolater 0 fix_stick_sensors
hsetprop $path getcmd "hvali $path/$lsc(mainsensor)"
hsetprop $path getsample "hvali $path/$lsc(samplesensor)"
if {[silent "" set lsc(setsample)] ne ""} {

View File

@ -1,7 +1,7 @@
namespace eval nvstep {
}
proc stdConfig::nvstep {} {
proc stdConfig::nvstep {args} {
variable name
controller syncedprot
@ -9,7 +9,7 @@ proc stdConfig::nvstep {} {
obj NvStep wr
prop write nvstep::write
prop read "nvstep::read [silent 0 result instconfig sensirion]"
prop read nvstep::read
prop enum fixed=0,controlled=1,automatic=2,close=3,open=4
prop write nvstep::write
prop lastpulse 0
@ -22,6 +22,13 @@ proc stdConfig::nvstep {} {
prop maxflow 0
default 0
set sensirion 0
foreach arg $args {
if {$arg eq "1"} {
set sensirion 1
}
}
kids "needle value" {
node flow upd
@ -39,6 +46,10 @@ proc stdConfig::nvstep {} {
node flowp upd
prop help "flow calculated from pressure before pump"
node use_pressure par -int [expr !$sensirion]
prop enum 1
prop help "use pressure instead of flow meter for control"
node ctrl -none
kids "control parameters" {
node prop par 10
@ -172,7 +183,11 @@ proc nvstep::poll {} {
hupdate [sct]/status $umsg
}
}
set ist [hvali [sct]/flow]
if {[hval [sct]/use_pressure]} {
set ist [hvali [sct]/flowp]
} else {
set ist [hvali [sct]/flow]
}
set tol [hvali [sct]/ctrl/tol]
set a [sct amplitude]
set t [sct t_after_delay]
@ -270,29 +285,26 @@ proc nvstep::poll {} {
return idle
}
proc nvstep::read {{sensirion 0}} {
proc nvstep::read {} {
hsetprop /cc/fa nvpath [sct]
_cc updatescript /cc/fa nvstep::updatemode
hsetprop /cc/f nvpath [sct]
if {$sensirion} {
hsetprop /nvflow flowsource flowmeter
hsetprop /cc/f nvctrl [sct controller]
hsetprop /cc/f flowsource pressure
_cc updatescript /cc/f nvstep::updateflow
catch {
hsetprop /nvflow flowsource flow
hsetprop /nvflow nvpath [sct]
hsetprop /nvflow nvctrl [sct controller]
_hemot updatescript /nvflow nvstep::updateflow
hsetprop /cc/f flowsource pressref
} else {
hsetprop /cc/f nvctrl [sct controller]
hsetprop /cc/f flowsource flowpress
}
_cc updatescript /cc/f nvstep::updateflow
return unpoll
}
proc nvstep::updateflow {value} {
# flowsource:
# pressref: just update nv/flowp
# flowmeter: update nv/flow
# flowpress: flow from pressure
# pressure: this is a pressure
# flow: this is a flow from a flowmeter
set source [silent pressure sct flowsource]
set filter [lrange "[silent $value sct filter] $value" end-9 10]
@ -317,21 +329,27 @@ proc nvstep::updateflow {value} {
}
}
sct filtered $flow
if {$source eq "flowmeter"} {
if {$source eq "flow"} {
if {$flow < 1} {
# avoid negative flow values, but it smooth]
set flow [expr exp($flow - 1)]
}
updateval [sct nvpath]/flow $flow
} else {
} elseif {$source eq "pressure" {
if {$flow < -50} {
set flow -62.5
} else {
set off [hval [sct nvpath]/calib/mbar_offset]
set fpm [hval [sct nvpath]/calib/ln_per_min_per_mbar]
set flow [expr ($flow - $off) * $fpm]
if {$flow < 1} {
# avoid negative flow values, but keep it smooth]
set flow [expr exp($flow - 1)]
}
}
if {$source eq "pressref"} {
hupdate [sct nvpath]/flowp $flow
return
}
updateval_e [sct nvpath]/flow $flow -62.5 no_sensor
updateval_e [sct nvpath]/flowp $flow -62.5 no_sensor
} else {
error "[sct] illegal flowsource: $source"
}
[sct nvctrl] queue [sct nvpath] read nvstep::poll
}

View File

@ -61,11 +61,11 @@ proc stdConfig::sensirion {} {
proc sensirion::updateFlow {} {
lassign [sct result] flow stddev
if {$flow == 0 && $stddev == 0} {
if {[hgetpropval /nvflow flowsource] eq "flowmeter"} {
hsetprop /nvflow flowsource flowpress
hepump eco 0
error "invalid flow -> switched to pressure"
if {$flow == 0 && $stddev == 0 || [silent 0 sct simerror]} {
set use_pressure [silent 0 hval /nv/use_pressure]
if {! $use_pressure} {
hset /nv/use_pressure 1
clientput "ERROR: invalid flow -> switched to pressure"
}
}
sct update $flow

View File

@ -13,5 +13,8 @@ tt set/limit 310
makeCCU4 ill5 nv n2 he
nv set 1
nv ctrl/prop_o 0.05
nv ctrl/prop_c 0.03
source maxi_orange.table

View File

@ -5,11 +5,11 @@ device stick_menu "ma6 dil2 dil3 dil4 coil"
makenv tt -driver [lsdriver] {
lsc_sensor tm A -sensor x48581 -sensorname VTI
lsc_sensor ts C -sensorname sample
lsc_sensor ts_2 D -sensor code -sensorname sample2
# 2023-07-06: sample sensor seems defect, use hx sensor
# lsc_sensor ts C -sensorname sample
# lsc_sensor ts_2 D -sensor code -sensorname sample2
lsc_sensor ts D -sensorname sample
lsc_sensor ts_2 C -sensor code -sensorname sample2
# lsc_sensor ts D -sensorname sample
# lsc_sensor ts_2 C -sensor code -sensorname sample2
lsc_loop set -loop 1 -channel A -maxheater 32W -resist 80Ohm -color green
if {[lsdriver] eq "336_lsc"} {
lsc_loop setsamp -loop 2 -channel C -maxheater 62.5W -resist 20Ohm -color dark_green -loopname sample
@ -20,7 +20,7 @@ makenv tt -driver [lsdriver] {
makeCCU4 ma6 nv he_ilm
hupdate /nv/set 1.2
hupdate /nv/set 1.5
makeN2Fill ccu4ilm {
ln2fill lowlevel 10
ln2fill highlevel 100

View File

@ -1,4 +1,4 @@
stickDesc = standard MA6 stick
stick_sensors x63163 undefined
# stick_sensors x63161 x63163
stick_sensors x63161 undefined
#stick_sensors x63161 x63163 # sensor 2 wiring defect

View File

@ -1,4 +1,4 @@
deviceDesc = FRAPPY history recorder, with stick
deviceDesc = MB11 Frappy history recorder
set ::secop_version 4
@ -11,6 +11,5 @@ if {[string match "prep*" $ins]} {
error "runs on instruments or prep0-9 only"
} else {
makenv frappy_main -driver secop -port localhost:15101
makenv frappy_stick -driver secop -port localhost:15201
makeHePump
}

13
tcl/mb11.stick Normal file
View File

@ -0,0 +1,13 @@
deviceDesc = MB11 stick Frappy history recorder
set ::secop_version 4
set ins [result instrument]
if {[string match "prep*" $ins]} {
set nr [string range $ins end end]
makenv frappy_stick -driver secop -port localhost:1521$nr
} elseif {[lindex [split [info hostname] .] 0] ne $ins} {
error "runs on instruments or prep0-9 only"
} else {
makenv frappy_stick -driver secop -port localhost:15201
}

View File

@ -628,7 +628,7 @@ proc stick_sensors {sensor1 sensor2} {
source config/stick.list
if {[string match "code*" $sensor2]} {
set code [lindex [split $sensor2=0 =] 1]
set table_code [silent -1 set stick_cfgtable($stick_name)]
set table_code [silent 0 set stick_cfgtable($stick_name)]
if {$table_code != $code} {
clientput "ERROR: code $code in $stick_name.stick does not match value from config/sticklist: $table_code"
}
@ -652,6 +652,16 @@ proc stick_sensors {sensor1 sensor2} {
}
}
proc fix_stick_sensors {} {
# fix stick sensors
foreach path {/tt/ts/curve /tt/ts_2/curve} {
set curv [silent "" sctval $path]
if {$curv ne ""} {
hset $path $curv
}
}
}
proc ts_sensor {sensor} {
catch {
catch {

View File

@ -19,7 +19,7 @@ proc makeHeFill {levcmd} {
if {$levcmd eq "ccu"} {
makenv hefill he_ext_ccu ccu
} elseif {$levcmd eq "ccu4ilm"} {
makenv hefill -driver ccu4ext he lev
makenv hefill -driver ccu4ext he /lev
lappend fast_cmd {lev mode 1}
lappend slow_cmd {lev mode 0}
} else {
@ -90,7 +90,7 @@ proc makeN2Fill {{option ccu} {code 0}} {
GraphAdd n2.upper K_2 N2_Upper red
GraphAdd n2.lower K_2 N2_Lower green
} elseif {$option eq "ccu4ilm"} {
makenv ln2fill -driver ccu4ext n2 "lev n2"
makenv ln2fill -driver ccu4ext n2 /lev/n2
GraphAdd lev.n2 % "N2_level" black
if {! $c} {
# switch silently to inactive

View File

@ -20,13 +20,14 @@ proc makeCCU4 {args} {
set badargs [list]
set cfgdev "0"
set hepump 0
set sensirion [silent 0 result instconfig sensirion]
foreach arg $args {
switch $arg {
nv - nv_release_blocked {
if {$arg eq "nv_release_blocked"} {
makenv nv -driver ccu4flow release_blocked
makenv nv -driver ccu4flow release_blocked $sensirion
} else {
makenv nv -driver ccu4flow
makenv nv -driver ccu4flow $sensirion
}
# GraphAdd cc.f mbar nv_flow red
GraphAdd nv.flow ln/min nv_flow magenta
@ -117,6 +118,7 @@ proc makeCCU4 {args} {
}
if {$hepump} {
makeHePump
hsetprop /nv hepump /hepump
}
set cfg [ccu4_get_device_config $cfgdev codesfile]
if {$cfg eq "" || [llength $badargs] > 0} {

8
tcl/startup/dilpars.tcl Normal file
View File

@ -0,0 +1,8 @@
proc apply_dilpars {} {
catch {
ts auto/condenseflow [hval dilpars/condenseflow]
}
catch {
ts auto/circulateflow [hval dilpars/circulateflow]
}
}

View File

@ -161,7 +161,7 @@ proc flow::make {{getT flow::tmts} {getS "result tt tr"} {getF "result nv flow"}
node difRange par 7
node flowSize par 10
node convTime par 30
node Tmin par 1.5
node Tmin par 10
node script -text par "flow::task"
prop width 24
node getTemp -text par "$getT"

View File

@ -177,7 +177,7 @@ proc get_param_values {hp} {
}
proc check_or_do {doit service cfgs} {
# result: 1: no change needed, 0: change needed, 2: failure
# result: 1: no change needed, 0: change needed, "ERROR:...": failure
set result 1
set config ""
set stick ""
@ -199,7 +199,7 @@ proc check_or_do {doit service cfgs} {
if {$doit} {
if {[hval /device/confirmed] eq [hval /device/name]} {
set msg "do not allow frappy to change from [hval /device/name] to $config"
clientlog $msg
clientlog ERROR:$msg
return $msg
}
clientlog 0