81 lines
2.1 KiB
Tcl
81 lines
2.1 KiB
Tcl
source $cfPath(commands)/commands_common.tcl
|
|
|
|
namespace eval beamstops {
|
|
array set bs_target {3 66.5 4 66 5 64}
|
|
namespace export selbs
|
|
}
|
|
namespace eval motor {
|
|
# is_homing_list = comma separated list of motors which are safe to send "home"
|
|
variable is_homing_list ""
|
|
}
|
|
|
|
# Some metadata variables about the beamstop and the beam
|
|
foreach {var lname type priv units klass} {
|
|
BeamCenterX BeamCenterX float user mm parameter
|
|
BeamCenterY BeamCenterY float user mm parameter
|
|
BeamStop BeamStop int user none parameter
|
|
} {
|
|
::utility::mkVar $var $type $priv $lname true $klass true true
|
|
if {$units != "none"} {
|
|
sicslist setatt $var units $units
|
|
}
|
|
}
|
|
# TODO Implement BeamStop as a macro which checks actual beamstop positions.
|
|
BeamStop -1
|
|
|
|
##
|
|
# @brief Beamstop select command
|
|
# @param bs beamstop, 1,2,3,4,5 or 6
|
|
command ::beamstops::selbs {int=3,4,5 bs} {
|
|
variable bs_target
|
|
|
|
set bsdriving false
|
|
array set bsl [subst {
|
|
3 [SplitReply [bs3 softlowerlim]]
|
|
4 [SplitReply [bs4 softlowerlim]]
|
|
5 [SplitReply [bs5 softlowerlim]]
|
|
}]
|
|
if [ catch {
|
|
switch $bs {
|
|
"3" {
|
|
set bsmot "bs3"
|
|
set bsdownCmd "drive bs4 $bsl(4) bs5 $bsl(5)"
|
|
}
|
|
"4" {
|
|
set bsmot "bs4"
|
|
set bsdownCmd "drive bs3 $bsl(3) bs5 $bsl(5)"
|
|
}
|
|
"5" {
|
|
set bsmot "bs5"
|
|
set bsdownCmd "drive bs3 $bsl(3) bs4 $bsl(4)"
|
|
}
|
|
default {
|
|
error "beamstop selection must be an integer from 3 to 5"
|
|
}
|
|
}
|
|
|
|
statemon start selbs
|
|
if {[info level] > 1} {statemon start [lindex [info level -1] 0]}
|
|
set bsdriving true
|
|
BeamStop -1
|
|
drive $bsmot $bs_target($bs)
|
|
eval $bsdownCmd
|
|
BeamStop $bs
|
|
set bsdriving false
|
|
statemon stop selbs
|
|
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
|
|
} msg ] {
|
|
if {$bsdriving} {
|
|
statemon stop selbs
|
|
if {[info level] > 1} {statemon stop [lindex [info level -1] 0]}
|
|
}
|
|
return -code error $msg
|
|
}
|
|
}
|
|
namespace import ::beamstops::selbs
|
|
publish selbs user
|
|
|
|
proc ::commands::isc_initialize {} {
|
|
::commands::ic_initialize
|
|
}
|