updated/added file to support galil contoller in Lyrebird - jgn

r3067 | jgn | 2011-02-24 09:12:56 +1100 (Thu, 24 Feb 2011) | 3 lines
This commit is contained in:
Jing Chen
2011-02-24 09:12:56 +11:00
committed by Douglas Clowes
parent ea087769dc
commit 102b722b5a
3 changed files with 114 additions and 1 deletions

View File

@@ -0,0 +1,102 @@
# Author:
##
# @file Lyrebird Flight Tube Rotate controller
namespace eval ::scobj::galil {
variable sim_mode
}
##
# @brief Send a command which returns a TPF value from Motor
# @param nextState, State which handles the reply
# @return The next state
proc ::scobj::galil::getTPF {} {
sct send "TPF"
return ackCmd
}
##
# @brief Get a TPF value from Motor
# Convert TPF value to the Angle value which be displayed on Gumtree client.
proc ::scobj::galil::ackCmd {batpath} {
set tpfValue [sct result]
set tmp [expr {($tpfValue - 190161)*(-0.006696) + 25.77375473}]
broadcast "tpfValue = $tpfValue; tmp = $tmp"
hset $batpath/Angle $tmp
broadcast "Angle = [hget $batpath/Angle]"
return idle
}
##
# @brief Read Angle value from Gumtree client and then send the command to the Motor
# @return The next state
proc ::scobj::galil::getValue {nextState} {
set tmpAngle [sct target]
set comm "ANGLE=$tmpAngle"
sct send $comm
return $nextState
}
##
# @brief Get ACK from the Motor after sending an ANGLE command to the Motor
# @return IDLE
proc ::scobj::galil::rdStatusFunc {} {
set ack [sct result]
if {$ack == -1} {
broadcast "Done: angle command set correctly!"
} elseif {
broadcast "Error $ack: Angle is not set correctly, check the error code $ack!"
}
return idle
}
proc ::scobj::galil::mkGalil {argList} {
foreach {k v} $argList {
set KEY [string toupper $k]
set pa($KEY) $v
}
set NS ::scobj::$pa(NAME)
set internal $pa(INTERVAL)
set batObjName $pa(NAME)
set batpath /sics/$batObjName
set sim_mode [SplitReply [motor_simulation]]
#set sim_mode "false"
puts "sim_mode=$sim_mode"
MakeSICSObj $batObjName SCT_OBJECT
# Set hipadaba properties for GumTree interface
# and NeXus data file.
#sicslist setatt $pa(NAME) klass instrument
#sicslist setatt $pa(NAME) long_name $pa(NAME)
hsetprop $batpath klass NXaperture
hfactory /sics/$pa(NAME)/Angle plain user float
hfactory /sics/$pa(NAME)/setAngle plain user float
makesctcontroller sct_ft galil $pa(IP):$pa(PORT)
#makesctcontroller sct_ft std $pa(IP):$pa(PORT)
# Get the TPF value from the Motor, then convert to current ANGLE position
hsetprop $batpath read ${NS}::getTPF
hsetprop $batpath ackCmd ${NS}::ackCmd $batpath
# Read the ANGLE value from the Gumtree client, then send roate command to Motor and get ACK from Motor.
hsetprop $batpath write ${NS}::getValue rdStatus
hsetprop $batpath rdStatus ${NS}::rdStatusFunc
::scobj::hinitprops $batObjName setAngle Angle
puts "batpath : $batpath"
sct_ft poll $batpath $internal
sct_ft write $batpath
}

View File

@@ -0,0 +1,11 @@
fileeval $cfPath(motors)/sct_flightTube.tcl
::scobj::galil::mkGalil {
name "galil"
#IP 137.157.204.25
IP localhost
PORT 1034
tuning 1
interval 1
}

View File

@@ -18,7 +18,7 @@ fileeval $cfPath(source)/source.tcl
source $cfPath(hipadaba)/hipadaba_configuration.tcl
fileeval $cfPath(motors)/motor_configuration.tcl
fileeval $cfPath(motors)/sct_flightTube.tcl
fileeval $cfPath(motors)/spin_galil.tcl
fileeval $cfPath(motors)/positmotor_configuration.tcl
#fileeval $cfPath(velsel)/velsel.tcl