# $Revision: 1.6 $ # $Date: 2007-01-29 20:57:24 $ # Author: Ferdi Franceschini (ffr@ansto.gov.au) # Last revision by: $Author: dcl $ # 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 vertSlitLowRange 25 set vertSlitUpRange 100 #Default upper and lower ranges for horizontal slits 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\ 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\ 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\ 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\ 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\ 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\ maxSpeed 0.2\ maxAccel 0.2\ maxDecel 0.2\ stepsPerX [expr 25000*18]\ absEnc 1\ absEncHome $mtth_Home\ motoffdelay 5000\ cntsPerX -93207] mtth hardlowerlim 45 mtth hardupperlim 100 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\ 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\ 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\ 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\ 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\ 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\ maxSpeed 0.5\ maxAccel 0.1\ maxDecel 0.1\ stepsPerX 125000\ absEnc 1\ absEncHome $stth_Home\ cntsPerX -93207] stth hardlowerlim -60 stth hardupperlim 84 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\ maxSpeed 0.5\ maxAccel 0.1\ maxDecel 0.1\ stepsPerX 56762\ absEnc 1\ absEncHome $oct_Home\ cntsPerX -465] oct hardlowerlim -2 oct hardupperlim 2 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\ # 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\ # 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\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss1r_Home] setHomeandRange -motor ss1r -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange # Slit 1, left Motor ss1l DMC2280 [params \ host $dmc2280_controller3(host)\ port $dmc2280_controller3(port)\ axis F\ units mm\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss1l_Home] setHomeandRange -motor ss1l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange # Slit 1, up Motor ss1u DMC2280 [params \ host $dmc2280_controller3(host)\ port $dmc2280_controller3(port)\ axis G\ units mm\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss1u_Home] setHomeandRange -motor ss1u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange # Slit 1, down Motor ss1d DMC2280 [params \ host $dmc2280_controller3(host)\ port $dmc2280_controller3(port)\ axis H\ units mm\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss1d_Home] setHomeandRange -motor ss1d -home 0 -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\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss2r_Home] setHomeandRange -motor ss2r -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange # Slit 2, left Motor ss2l DMC2280 [params \ host $dmc2280_controller4(host)\ port $dmc2280_controller4(port)\ axis F\ units mm\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss2l_Home] setHomeandRange -motor ss2l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange # Slit 2, up Motor ss2u DMC2280 [params \ host $dmc2280_controller4(host)\ port $dmc2280_controller4(port)\ axis G\ units mm\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss2u_Home] setHomeandRange -motor ss2u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange # Slit 2, down Motor ss2d DMC2280 [params \ host $dmc2280_controller4(host)\ port $dmc2280_controller4(port)\ axis H\ units mm\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss2d_Home] setHomeandRange -motor ss2d -home 0 -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