83 lines
3.3 KiB
Tcl
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
|
|
}
|
|
}
|
|
}
|