# START MOTOR CONFIGURATION # Setup addresses of Galil DMC2280 controllers. set dmc2280_controller1(host) mc1-echidna set dmc2280_controller1(port) pmc1-echidna set dmc2280_controller2(host) mc2-echidna set dmc2280_controller2(port) pmc2-echidna set dmc2280_controller3(host) mc3-echidna set dmc2280_controller3(port) pmc3-echidna set dmc2280_controller4(host) mc4-echidna set dmc2280_controller4(port) pmc4-echidna # 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 ############################ #: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 7414753\ cntsPerX -8192] setHomeandRange -motor mphi -home 0 -lowrange 15 -uprange 15 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 7818915\ cntsPerX 8192] setHomeandRange -motor mchi -home 90 -lowrange 15 -uprange 15 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 7781680\ cntsPerX 8192] setHomeandRange -motor my -home 0 -lowrange 20 -uprange 20 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 7562793\ cntsPerX -8192] setHomeandRange -motor mx -home 0 -lowrange 20 -uprange 20 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 17694127\ 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.5\ maxAccel 0.2\ maxDecel 0.2\ stepsPerX 25000\ absEnc 1\ absEncHome 10299428\ cntsPerX 93207] mtth hardlowerlim 85 mtth hardupperlim 155 mtth softlowerlim 85 mtth softupperlim 155 mtth home 120 mtth speed 0.5 mtth precision 0.01 # Primary Collimator 1 #Motor pc1 DMC2280 [params \ # host $dmc2280_controller1(host)\ # port $dmc2280_controller1(port)\ # axis G\ # units xxxx\ # maxSpeed xxxx\ # maxAccel xxxx\ # maxDecel xxxx\ # stepsPerX xxxx] #setHomeandRange -motor pc1 -home 0 -lowrange 0 -uprange 0 #pc1 speed 1 #pc1 precision 0.01 # Primary Collimator 2 #Motor pc2 DMC2280 [params \ # host $dmc2280_controller1(host)\ # port $dmc2280_controller1(port)\ # axis H\ # units xxxx\ # maxSpeed xxxx\ # maxAccel xxxx\ # maxDecel xxxx\ # stepsPerX xxxx] #setHomeandRange -motor pc2 -home 0 -lowrange 0 -uprange 0 #pc2 speed 1 #pc2 precision 0.01 ############################ # Motor Controller 2 ############################ #:TP at HOME # 7924507, 7542917, 7626584, 24029910, 24984596, 14530407, 22369621, 22369621 # 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 7924507\ cntsPerX -8192] setHomeandRange -motor sphi -home 0 -lowrange 20 -uprange 20 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 7542917\ cntsPerX 8192] setHomeandRange -motor schi -home 90 -lowrange 20 -uprange 20 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 7626584\ 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 24029910\ 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 24984596\ cntsPerX 4096] setHomeandRange -motor som -home 0 -lowrange 142 -uprange 218 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.2\ maxDecel 0.2\ stepsPerX 125000\ absEnc 1\ absEncHome 14530407\ cntsPerX -93207] stth hardlowerlim -74 stth hardupperlim 74 stth softlowerlim -70 stth softupperlim 70 stth home 0 stth speed 0.5 stth precision 0.01 #Default upper and lower ranges for vertical slits set vertSlitLowRange 20 set vertSlitUpRange 100 #Default upper and lower ranges for horizontal slits set horSlitLowRange 15 set horSlitUpRange 35 #Measured or computed slit motor steps per millimetre set slitStepRate 20180 ############################ # Motor Controller 3 ############################ # # Monochromator radius, focus #Motor mr 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 xxxx\ # cntsPerX xxxx] #setHomeandRange -motor mr -home 0 -lowrange 0 -uprange 360 #mr speed 1 #mr precision 0.01 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 [expr 54.5/2*$slitStepRate]] setHomeandRange -motor ss1r -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange 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 [expr 54.5/2*$slitStepRate]] setHomeandRange -motor ss1l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange 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 [expr 207.5/2*$slitStepRate]] setHomeandRange -motor ss1u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange 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 [expr 207.5/2*$slitStepRate]] setHomeandRange -motor ss1d -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange ############################ # Motor Controller 4 ############################ # # Little is known about the Eularian Cradle #Motor ephi DMC2280 [params \ # host $dmc2280_controller4(host)\ # port $dmc2280_controller4(port)\ # axis A\ # units degrees\ # maxSpeed xxxx\ # maxAccel xxxx\ # maxDecel xxxx\ # stepsPerX xxxx\ # absEnc 1\ # absEncHome xxxx\ # cntsPerX xxxx] #setHomeandRange -motor ephi -home 0 -lowrange 180 -uprange 180 #Motor echi DMC2280 [params \ # host $dmc2280_controller4(host)\ # port $dmc2280_controller4(port)\ # axis B\ # units degrees\ # maxSpeed xxxx\ # maxAccel xxxx\ # maxDecel xxxx\ # stepsPerX xxxx\ # absEnc 1\ # absEncHome xxxx\ # cntsPerX xxxx] #setHomeandRange -motor echi -home 0 -lowrange 180 -uprange 180 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 [expr 52.25/2*$slitStepRate]] setHomeandRange -motor ss2r -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange 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 [expr 52.25/2*$slitStepRate]] setHomeandRange -motor ss2l -home 0 -lowrange $horSlitLowRange -uprange $horSlitUpRange 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 [expr 204.1/2*$slitStepRate]] setHomeandRange -motor ss2u -home 0 -lowrange $vertSlitLowRange -uprange $vertSlitUpRange 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 [expr 204.1/2*$slitStepRate]] 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