Files
sics/site_ansto/instrument/hipd/motor_configuration.tcl
Ferdi Franceschini 48c899599e New motor driver now requires hard upper and lower limits.
r1482 | ffr | 2007-02-14 16:49:53 +1100 (Wed, 14 Feb 2007) | 2 lines
2012-11-15 12:58:44 +11:00

719 lines
18 KiB
Tcl

# $Revision: 1.7 $
# $Date: 2007-02-14 05:49:53 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $
# START MOTOR CONFIGURATION
set animal wombat
# Setup addresses of Galil DMC2280 controllers.
set dmc2280_controller1(host) mc1-$animal
set dmc2280_controller1(port) pmc1-$animal
set dmc2280_controller2(host) mc2-$animal
set dmc2280_controller2(port) pmc2-$animal
set dmc2280_controller3(host) mc3-$animal
set dmc2280_controller3(port) pmc3-$animal
set dmc2280_controller4(host) mc4-$animal
set dmc2280_controller4(port) pmc4-$animal
#Measured absolute encoder reading at home position
# 7613185, 7504518, 6770094, 7463036, 8901369, 19927837, 22369621, 22369621
# 7613516, 7503905, 6767221, 7464891
set mphi_Home 7613516
set mchi_Home 7503905
set my_Home 6767221
set mx_Home 7464891
set mom_Home 8901369
set mtth_Home 19927837
# 7938155, 7585392, 7556982, 7563854, 17214054, 22369621, 22369621, 22369621
# 7937974, 7585956, 7557524, 7557304, 16992893, 1497938, 7788744, 22369621
set sphi_Home 7937974
set schi_Home 7585956
set sy_Home 7557524
set sx_Home 7557304
set som_Home 17214054
set stth_Home 8488515
set oct_Home 7788750
#Measured or computed slit motor steps per millimetre
# 125 steps * 161:1 gears = 20125
set slitStepRate 20125
#Measured slit gap, in units, after homing on limit switches
set ss1h_Gap 52.5
set ss1v_Gap 205.9
set ss2h_Gap 51.3
set ss2v_Gap 203.8
set ss1r_Home [expr $ss1h_Gap/2*$slitStepRate]
set ss1l_Home [expr $ss1h_Gap/2*$slitStepRate]
set ss1u_Home [expr $ss1v_Gap/2*$slitStepRate]
set ss1d_Home [expr $ss1v_Gap/2*$slitStepRate]
set ss2r_Home [expr $ss2h_Gap/2*$slitStepRate]
set ss2l_Home [expr $ss2h_Gap/2*$slitStepRate]
set ss2u_Home [expr $ss2v_Gap/2*$slitStepRate]
set ss2d_Home [expr $ss2v_Gap/2*$slitStepRate]
#Default upper and lower ranges for vertical slits
set vertSlitHome 0
set vertSlitLowRange 25
set vertSlitUpRange 100
#Default upper and lower ranges for horizontal slits
set horSlitHome 0
set horSlitLowRange 25
set horSlitUpRange 25
# Run slit homing routines on controllers 3 and 4
#if [catch {dmc_connect dmc2280_controller3} ] {
# dmc_sendCmd dmc2280_controller3 "XQ#HOME,1"
# dmc_close dmc2280_controller3
#}
#if [catch {dmc_connect dmc2280_controller4} ] {
# dmc_sendCmd dmc2280_controller4 "XQ#HOME,1"
# dmc_close dmc2280_controller4
#}
############################
# Motor Controller 1
# Motor Controller 1
# Motor Controller 1
############################
#:TP at HOME
#
# Monochromator phi, Tilt 1, upper
Motor mphi DMC2280 [params \
host $dmc2280_controller1(host)\
port $dmc2280_controller1(port)\
axis A\
units degrees\
hardlowerlim -5\
hardupperlim 5\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -25000\
absEnc 1\
absEncHome $mphi_Home\
cntsPerX -8192]
setHomeandRange -motor mphi -home 0 -lowrange 5 -uprange 5
mphi speed 1
mphi precision 0.01
# Monochromator chi, Tilt 2, lower
Motor mchi DMC2280 [params \
host $dmc2280_controller1(host)\
port $dmc2280_controller1(port)\
axis B\
units degrees\
hardlowerlim 85\
hardupperlim 95\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX 25000\
absEnc 1\
absEncHome $mchi_Home\
cntsPerX 8192]
setHomeandRange -motor mchi -home 90 -lowrange 5 -uprange 5
mchi speed 1
mchi precision 0.01
# Monochromator Trans 1, upper
Motor my DMC2280 [params \
host $dmc2280_controller1(host)\
port $dmc2280_controller1(port)\
axis C\
units mm\
hardlowerlim -10\
hardupperlim 10\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX 25000\
absEnc 1\
absEncHome $my_Home\
cntsPerX 8192]
setHomeandRange -motor my -home 0 -lowrange 10 -uprange 10
my speed 1
my precision 0.01
# Monochromator Trans 2, lower
Motor mx DMC2280 [params \
host $dmc2280_controller1(host)\
port $dmc2280_controller1(port)\
axis D\
units mm\
hardlowerlim -10\
hardupperlim 10\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -25000\
absEnc 1\
absEncHome $mx_Home\
cntsPerX -8192]
setHomeandRange -motor mx -home 0 -lowrange 10 -uprange 10
mx speed 1
mx precision 0.01
# Monochromator omega, rotate
Motor mom DMC2280 [params \
host $dmc2280_controller1(host)\
port $dmc2280_controller1(port)\
axis E\
units degrees\
hardlowerlim -180\
hardupperlim 180\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -12500\
absEnc 1\
absEncHome $mom_Home\
cntsPerX -4096]
setHomeandRange -motor mom -home 0 -lowrange 180 -uprange 180
mom speed 1
mom precision 0.01
# Monochromator two-theta, flight-tube rotate
Motor mtth DMC2280 [params \
host $dmc2280_controller1(host)\
port $dmc2280_controller1(port)\
axis F\
units degrees\
hardlowerlim 45\
hardupperlim 100\
maxSpeed 0.2\
maxAccel 0.2\
maxDecel 0.2\
stepsPerX [expr 25000*18]\
absEnc 1\
absEncHome $mtth_Home\
motoffdelay 5000\
cntsPerX -93207]
mtth softlowerlim 45
mtth softupperlim 100
mtth home 90
mtth speed 0.2
mtth accel 0.01
mtth decel 0.01
mtth precision 0.02
mtth maxretry 10
mtth failafter 10
############################
# Motor Controller 2
# Motor Controller 2
# Motor Controller 2
############################
# Sample Tilt 1, upper, phi
Motor sphi DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis A\
units degrees\
hardlowerlim -15\
hardupperlim 15\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -25000\
absEnc 1\
absEncHome $sphi_Home\
cntsPerX -8192]
setHomeandRange -motor sphi -home 0 -lowrange 15 -uprange 15
sphi speed 1
sphi precision 0.01
# Sample Tilt 2, lower, chi
Motor schi DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis B\
units degrees\
hardlowerlim 75\
hardupperlim 105\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX 25000\
absEnc 1\
absEncHome $schi_Home\
cntsPerX 8192]
setHomeandRange -motor schi -home 90 -lowrange 15 -uprange 15
schi speed 1
schi precision 0.01
# Sample Trans 1, upper, y
Motor sy DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis C\
units mm\
hardlowerlim -20\
hardupperlim 20\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX 25000\
absEnc 1\
absEncHome $sy_Home\
cntsPerX 8192]
setHomeandRange -motor sy -home 0 -lowrange 20 -uprange 20
sy speed 1
sy precision 0.01
# Sample Trans2, lower, x
Motor sx DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis D\
units mm\
hardlowerlim -20\
hardupperlim 20\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -25000\
absEnc 1\
absEncHome $sx_Home\
cntsPerX -8192]
setHomeandRange -motor sx -home 0 -lowrange 20 -uprange 20
sx speed 1
sx precision 0.01
# Sample Omega, rotate
Motor som DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis E\
units degrees\
hardlowerlim -54\
hardupperlim 120\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX 12500\
absEnc 1\
absEncHome $som_Home\
cntsPerX 4096]
setHomeandRange -motor som -home 0 -lowrange 54 -uprange 120
som speed 1
som precision 0.01
# Sample two-theta, detector rotate
Motor stth DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis F\
units degrees\
hardlowerlim -60\
hardupperlim 84\
maxSpeed 0.5\
maxAccel 0.1\
maxDecel 0.1\
stepsPerX 125000\
absEnc 1\
absEncHome $stth_Home\
cntsPerX -93207]
stth softlowerlim -60
stth softupperlim 80
stth home 0
stth speed 0.5
stth precision 0.01
# Oscillating Collimator Translation
Motor oct DMC2280 [params \
host $dmc2280_controller2(host)\
port $dmc2280_controller2(port)\
axis G\
units degrees\
hardlowerlim -2\
hardupperlim 2\
maxSpeed 0.5\
maxAccel 0.1\
maxDecel 0.1\
stepsPerX 56762\
absEnc 1\
absEncHome $oct_Home\
cntsPerX -465]
oct softlowerlim -2
oct softupperlim 2
oct home 0
oct speed 0.5
oct precision 0.01
############################
# Motor Controller 3
# Motor Controller 3
# Motor Controller 3
############################
#
# Monochromator Focusing (HOPG)
#Motor mf1 DMC2280 [params \
# host $dmc2280_controller3(host)\
# port $dmc2280_controller3(port)\
# axis A\
# units degrees\
# hardlowerlim xxxx\
# hardupperlim xxxx\
# maxSpeed xxxx\
# maxAccel xxxx\
# maxDecel xxxx\
# stepsPerX xxxx\
# absEnc 1\
# absEncHome $mf1_Home\
# cntsPerX xxxx]
#setHomeandRange -motor mf1 -home 0 -lowrange 0 -uprange 360
#mf1 speed 1
#mf1 precision 0.01
# Monochromator Focusing (Ge)
#Motor mf2 DMC2280 [params \
# host $dmc2280_controller3(host)\
# port $dmc2280_controller3(port)\
# axis B\
# units degrees\
# hardlowerlim xxxx\
# hardupperlim xxxx\
# maxSpeed xxxx\
# maxAccel xxxx\
# maxDecel xxxx\
# stepsPerX xxxx\
# absEnc 1\
# absEncHome xxxx\
# cntsPerX xxxx]
#setHomeandRange -motor mf2 -home 0 -lowrange 0 -uprange 360
#mf2 speed 1
#mf2 precision 0.01
# Slit 1, right
Motor ss1r DMC2280 [params \
host $dmc2280_controller3(host)\
port $dmc2280_controller3(port)\
axis E\
units mm\
hardlowerlim [expr $horSlitHome - $horSlitLowRange]\
hardupperlim [expr $horSlitHome + $horSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1r_Home]
setHomeandRange -motor ss1r -home $horSlitHome -lowrange $horSlitLowRange -uprange $horSlitUpRange
# Slit 1, left
Motor ss1l DMC2280 [params \
host $dmc2280_controller3(host)\
port $dmc2280_controller3(port)\
axis F\
units mm\
hardlowerlim [expr $horSlitHome - $horSlitLowRange]\
hardupperlim [expr $horSlitHome + $horSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1l_Home]
setHomeandRange -motor ss1l -home $horSlitHome -lowrange $horSlitLowRange -uprange $horSlitUpRange
# Slit 1, up
Motor ss1u DMC2280 [params \
host $dmc2280_controller3(host)\
port $dmc2280_controller3(port)\
axis G\
units mm\
hardlowerlim [expr $horSlitHome - $horSlitLowRange]\
hardupperlim [expr $horSlitHome + $horSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1u_Home]
setHomeandRange -motor ss1u -home $horSlitHome -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
# Slit 1, down
Motor ss1d DMC2280 [params \
host $dmc2280_controller3(host)\
port $dmc2280_controller3(port)\
axis H\
units mm\
hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\
hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss1d_Home]
setHomeandRange -motor ss1d -home $vertSlitHome -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
############################
# Motor Controller 4
# Motor Controller 4
# Motor Controller 4
############################
#
# Slit 2, right
Motor ss2r DMC2280 [params \
host $dmc2280_controller4(host)\
port $dmc2280_controller4(port)\
axis E\
units mm\
hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\
hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2r_Home]
setHomeandRange -motor ss2r -home $vertSlitHome -lowrange $horSlitLowRange -uprange $horSlitUpRange
# Slit 2, left
Motor ss2l DMC2280 [params \
host $dmc2280_controller4(host)\
port $dmc2280_controller4(port)\
axis F\
units mm\
hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\
hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2l_Home]
setHomeandRange -motor ss2l -home $vertSlitHome -lowrange $horSlitLowRange -uprange $horSlitUpRange
# Slit 2, up
Motor ss2u DMC2280 [params \
host $dmc2280_controller4(host)\
port $dmc2280_controller4(port)\
axis G\
units mm\
hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\
hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2u_Home]
setHomeandRange -motor ss2u -home $vertSlitHome -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
# Slit 2, down
Motor ss2d DMC2280 [params \
host $dmc2280_controller4(host)\
port $dmc2280_controller4(port)\
axis H\
units mm\
hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\
hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -$slitStepRate\
motorHome $ss2d_Home]
setHomeandRange -motor ss2d -home $vertSlitHome -lowrange $vertSlitLowRange -uprange $vertSlitUpRange
proc mthGet {} { return [expr [SplitReply [mtth]]/2.0]}
proc mthSet {val} { return "mtth=[SplitReply [mtth]]"}
publish mthSet user
publish mthGet user
MakeConfigurableMotor mth
mth readscript mthGet
mth drivescript mthSet
proc sthGet {} { return [expr [SplitReply [stth]]/2.0]}
proc sthSet {val} { return "stth=[SplitReply [stth]]"}
publish sthGet user
publish sthSet user
MakeConfigurableMotor sth
sth readscript sthGet
sth drivescript sthSet
#--------------------------------------------------------
proc ss1widthscript {val} {
set currentWidth [expr [SplitReply [ss1r]] + [SplitReply [ss1l]]]
set diff [expr $val - $currentWidth]
set newD1R [expr [SplitReply [ss1r]] + $diff/2]
set newD1L [expr [SplitReply [ss1l]] + $diff/2]
return "ss1r=$newD1R,ss1l=$newD1L"
}
publish ss1widthscript user
#-------------------------------------------------------
proc ss1readwidth {} {
return [expr [SplitReply [ss1r]] + [SplitReply [ss1l]]]
}
publish ss1readwidth user
MakeConfigurableMotor ss1hg
ss1hg drivescript ss1widthscript
ss1hg readscript ss1readwidth
#--------------------------------------------------------
proc ss1horoffsetscript {val} {
set SR [SplitReply [ss1r]]
set SL [SplitReply [ss1l]]
set currentOffset [ expr $SR - ($SR + $SL)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1R [expr $SR + $diff]
set newD1L [expr $SL - $diff]
return "ss1r=$newD1R,ss1l=$newD1L"
}
publish ss1horoffsetscript user
#-------------------------------------------------------
proc ss1readhoroffset {} {
set SR [SplitReply [ss1r]]
return [ expr $SR - ($SR + [SplitReply [ss1l]])/2.0 ]
}
publish ss1readhoroffset user
#-------------------------------------------------------
MakeConfigurableMotor ss1ho
ss1ho drivescript ss1horoffsetscript
ss1ho readscript ss1readhoroffset
#-----------------------------------------------------
proc ss1heightscript {val} {
set currentWidth [expr [SplitReply [ss1u]] + [SplitReply [ss1d]]]
set diff [expr $val - $currentWidth]
set newD1B [expr [SplitReply [ss1d]] + $diff/2]
set newD1T [expr [SplitReply [ss1u]] + $diff/2]
return "ss1d=$newD1B,ss1u=$newD1T"
}
publish ss1heightscript user
#-------------------------------------------------------
proc ss1readheight {} {
return [expr [SplitReply [ss1u]] + [SplitReply [ss1d]]]
}
publish ss1readheight user
#---------------------------------------------------------
MakeConfigurableMotor ss1vg
ss1vg drivescript ss1heightscript
ss1vg readscript ss1readheight
#--------------------------------------------------------
proc ss1vertoffsetscript {val} {
set SU [SplitReply [ss1u]]
set SD [SplitReply [ss1d]]
set currentOffset [ expr $SU - ($SU + $SD)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1U [expr $SU + $diff]
set newD1D [expr $SD - $diff]
return "ss1u=$newD1U,ss1d=$newD1D"
}
publish ss1vertoffsetscript user
#-------------------------------------------------------
proc ss1readvertoffset {} {
set SU [SplitReply [ss1u]]
return [ expr $SU - ($SU + [SplitReply [ss1d]])/2.0 ]
}
publish ss1readvertoffset user
#-------------------------------------------------------
MakeConfigurableMotor ss1vo
ss1vo drivescript ss1vertoffsetscript
ss1vo readscript ss1readvertoffset
###############################################
#--------------------------------------------------------
proc ss2widthscript {val} {
set currentWidth [expr [SplitReply [ss2r]] + [SplitReply [ss2l]]]
set diff [expr $val - $currentWidth]
set newD1R [expr [SplitReply [ss2r]] + $diff/2]
set newD1L [expr [SplitReply [ss2l]] + $diff/2]
return "ss2r=$newD1R,ss2l=$newD1L"
}
publish ss2widthscript user
#-------------------------------------------------------
proc ss2readwidth {} {
return [expr [SplitReply [ss2r]] + [SplitReply [ss2l]]]
}
publish ss2readwidth user
MakeConfigurableMotor ss2hg
ss2hg drivescript ss2widthscript
ss2hg readscript ss2readwidth
#--------------------------------------------------------
proc ss2horoffsetscript {val} {
set SR [SplitReply [ss2r]]
set SL [SplitReply [ss2l]]
set currentOffset [ expr $SR - ($SR + $SL)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1R [expr $SR + $diff]
set newD1L [expr $SL - $diff]
return "ss2r=$newD1R,ss2l=$newD1L"
}
publish ss2horoffsetscript user
#-------------------------------------------------------
proc ss2readhoroffset {} {
set SR [SplitReply [ss2r]]
return [ expr $SR - ($SR + [SplitReply [ss2l]])/2.0 ]
}
publish ss2readhoroffset user
#-------------------------------------------------------
MakeConfigurableMotor ss2ho
ss2ho drivescript ss2horoffsetscript
ss2ho readscript ss2readhoroffset
#-----------------------------------------------------
proc ss2heightscript {val} {
set currentWidth [expr [SplitReply [ss2u]] + [SplitReply [ss2d]]]
set diff [expr $val - $currentWidth]
set newD1B [expr [SplitReply [ss2d]] + $diff/2]
set newD1T [expr [SplitReply [ss2u]] + $diff/2]
return "ss2d=$newD1B,ss2u=$newD1T"
}
publish ss2heightscript user
#-------------------------------------------------------
proc ss2readheight {} {
return [expr [SplitReply [ss2u]] + [SplitReply [ss2d]]]
}
publish ss2readheight user
#---------------------------------------------------------
MakeConfigurableMotor ss2vg
ss2vg drivescript ss2heightscript
ss2vg readscript ss2readheight
#--------------------------------------------------------
proc ss2vertoffsetscript {val} {
set SU [SplitReply [ss2u]]
set SD [SplitReply [ss2d]]
set currentOffset [ expr $SU - ($SU + $SD)/2.0 ]
set diff [expr $val - $currentOffset]
set newD1U [expr $SU + $diff]
set newD1D [expr $SD - $diff]
return "ss2u=$newD1U,ss2d=$newD1D"
}
publish ss2vertoffsetscript user
#-------------------------------------------------------
proc ss2readvertoffset {} {
set SU [SplitReply [ss2u]]
return [ expr $SU - ($SU + [SplitReply [ss2d]])/2.0 ]
}
publish ss2readvertoffset user
#-------------------------------------------------------
MakeConfigurableMotor ss2vo
ss2vo drivescript ss2vertoffsetscript
ss2vo readscript ss2readvertoffset
# END MOTOR CONFIGURATION