Files
sics/site_ansto/instrument/tas/config/tasmad/sicscommon/motorhp.tcl
2014-05-16 17:23:58 +10:00

83 lines
3.3 KiB
Tcl

#---------------------------------------------------------------------------
# These scripts save and load motor positions for EL734 motors connected
# directly to SICS through the terminal server. For all others, use
# David Madens el734_motor program
#
# Mark Koennecke, April 2004
#-------------------------------------------------------------------------
if { ![info exists motorhpscript] } {
set motorhpscript 1
Publish motorinternsave Mugger
Publish motorsave Mugger
Publish motorload Mugger
Publish loadmotordir Mugger
Publish savemotorarray Mugger
}
#----------------------------------------------------------------------
# save motor parameters from controller, number to file described by
# file descriptor fd
#----------------------------------------------------------------------
proc motorinternsave {controller number fd} {
lappend parlist mn ec ep a fd fm d e f g h j k l m q t v w z mem
puts $fd [format "%s send ec %d 0 0" $controller $number]
foreach e $parlist {
set data [$controller send $e $number]
puts $fd [format "%s send %s %d %s" $controller $e $number $data]
}
}
#----------------------------------------------------------------------
# save a motor parameter set to a directory. The filename is automatically
# created in order to help motorload
#---------------------------------------------------------------------
proc motorsave {controller number dirname} {
set filename [format "%s/%s%2.2d.par" $dirname $controller $number]
set f [open $filename w]
motorinternsave $controller $number $f
close $f
}
#----------------------------------------------------------------------------
# Loading motor parameters. Because some of the commands change the position
# of the motor, the position is saved first and redefined after processing
# the data. It is assumed that the filename is in the format as made
# by motorsave.
#---------------------------------------------------------------------------
proc motorload {filename} {
set fil [file tail $filename]
set ind [string last . $fil]
set number [string range $fil [expr $ind - 2] [expr $ind - 1]]
set controller [string range $fil 0 [expr $ind - 3]]
set pos [$controller send u $number]
fileeval $filename
$controller send uu $number $pos
}
#--------------------------------------------------------------------------
# load a motor directory
#------------------------------------------------------------------------
proc loadmotordir {dirname} {
set l [glob $dirname/*.par]
foreach e $l {
set ret [catch {motorload $e} msg]
if { $ret != 0} {
clientput "ERROR: failed to load $e with $msg"
}
}
}
#-----------------------------------------------------------------------
# save a whole array of motors. The array must have the following form:
# An entry: controllerlist conatins a list of all controllers
# There exists an entry with the controller name in the array which contains
# a list of motor number
#------------------------------------------------------------------------
proc savemotorarray {motar dir} {
upvar $motar motorarray
set controllerList $motorarray(controllerlist)
foreach controller $controllerList {
set motlist $motorarray($controller)
foreach mot $motlist {
motorsave $controller $mot $dir
}
}
}