# $Revision: 1.14 $ # $Date: 2007-03-19 03:55:27 $ # Author: Ferdi Franceschini (ffr@ansto.gov.au) # Last revision by: $Author: dcl $ # START MOTOR CONFIGURATION set animal platypus # 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 MakeRS232Controller dmc_rs1 137.157.202.131 1034 MakeRS232Controller dmc_rs2 137.157.202.132 1034 MakeRS232Controller dmc_rs3 137.157.202.133 1034 MakeRS232Controller dmc_rs4 137.157.202.134 1034 MakeMultiChan dmc_mc1 dmc_rs1 MakeMultiChan dmc_mc2 dmc_rs2 MakeMultiChan dmc_mc3 dmc_rs3 MakeMultiChan dmc_mc4 dmc_rs4 #Measured absolute encoder reading at home position set bz_home 8142000 set c1ht_home 8265000 set m1ro_home 134658 set bat_home 7500000 set st3vt_home 8742250 set st4vt_home 8806900 set sth_home 23511400 set sphi_home 7548440 set sx_home 8574000 set sy_home 7500000 set sz_home 8927484 set dy_home 7500000 set dz_home 7805000 #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 56.7 set ss1v_Gap 54.5 set ss2h_Gap 9.1 set ss2v_Gap 23.1 set ss3h_Gap 7.4 set ss3v_Gap 28.6 set ss4h_Gap 12.1 set ss4v_Gap 23.6 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] set ss3r_Home [expr $ss3h_Gap/2*$slitStepRate] set ss3l_Home [expr $ss3h_Gap/2*$slitStepRate] set ss3u_Home [expr $ss3v_Gap/2*$slitStepRate] set ss3d_Home [expr $ss3v_Gap/2*$slitStepRate] set ss4r_Home [expr $ss4h_Gap/2*$slitStepRate] set ss4l_Home [expr $ss4h_Gap/2*$slitStepRate] set ss4u_Home [expr $ss4v_Gap/2*$slitStepRate] set ss4d_Home [expr $ss4v_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 # set movecount high to reduce the frequency of # hnotify messages to a reasonable level set move_count 100 ############################ # Motor Controller 1 # Motor Controller 1 # Motor Controller 1 ############################ #:TP at HOME # # Beam Shade Vertical Translation (6mm/T double helix, 500mm) Motor bz DMC2280 [params \ multichan dmc_mc1\ axis A\ units mm\ hardlowerlim 0\ hardupperlim 275\ maxSpeed 5\ maxAccel 1\ maxDecel 1\ stepsPerX [expr -25000/6]\ absEnc 1\ absEncHome $bz_home\ cntsPerX [expr -8192/6]] bz softlowerlim 0 bz softupperlim 275 bz home 0 # Collimator Table Horizontal Translation, X Motor c1ht DMC2280 [params \ multichan dmc_mc1\ axis B\ units mm\ hardlowerlim 0\ hardupperlim 1065\ maxSpeed 10\ maxAccel 1\ maxDecel 1\ stepsPerX [expr 25000/5]\ absEnc 1\ absEncHome $c1ht_home\ cntsPerX [expr -8192/5]] c1ht softlowerlim 0 c1ht softupperlim 1065 c1ht home 0 # Collimator Tilt, Z axis, positive is down Motor m1ro DMC2280 [params \ multichan dmc_mc1\ axis C\ units degrees\ hardlowerlim -3.5\ hardupperlim 3.5\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX 275000\ absEnc 1\ absEncHome $m1ro_home\ cntsPerX [expr -262144/360]] m1ro softlowerlim -3.5 m1ro softupperlim 3.5 m1ro home 0 # Beam Attenuator (16mm/turn, 200mm travel) Motor bat DMC2280 [params \ multichan dmc_mc1\ axis D\ units mm\ hardlowerlim 0\ hardupperlim 200\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX [expr 25000/16]\ absEnc 1\ absEncHome $bat_home\ cntsPerX [expr 8192/16]] bat softlowerlim 0 bat softupperlim 200 bat home 0 # Slit 3 Tower Translation (1mm/T, +/- 100mm) Motor st3vt DMC2280 [params \ multichan dmc_mc1\ axis E\ units mm\ hardlowerlim 0\ hardupperlim 253\ maxSpeed 10\ maxAccel 1\ maxDecel 1\ stepsPerX 25000\ absEnc 1\ absEncHome $st3vt_home\ cntsPerX -8192] st3vt softlowerlim 0 st3vt softupperlim 253 st3vt home 0 # Slit 4 Tower Translation (1mm/T, +/- 100mm) Motor st4vt DMC2280 [params \ multichan dmc_mc1\ axis F\ units mm\ hardlowerlim 0\ hardupperlim 249\ maxSpeed 10\ maxAccel 1\ maxDecel 1\ stepsPerX 25000\ absEnc 1\ absEncHome $st4vt_home\ cntsPerX -8192] st4vt softlowerlim 0 st4vt softupperlim 249 st4vt home 0 ############################ # Motor Controller 2 # Motor Controller 2 # Motor Controller 2 ############################ #:TP at HOME # # Sample Tilt 1, upper (1 degree/turn) Motor sth DMC2280 [params \ multichan dmc_mc2\ axis A\ units degrees\ hardlowerlim -15\ hardupperlim 15\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX 25000\ absEnc 1\ absEncHome $sth_home\ cntsPerX 8192] setHomeandRange -motor sth -home 0 -lowrange 5 -uprange 5 sth speed 1 sth precision 0.01 # Sample Tilt 2, lower (1 degree/turn) Motor sphi DMC2280 [params \ multichan dmc_mc2\ axis B\ units degrees\ hardlowerlim 75\ hardupperlim 105\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -25000\ absEnc 1\ absEncHome $sphi_home\ cntsPerX -8192] setHomeandRange -motor sphi -home 90 -lowrange 5 -uprange 5 sphi speed 1 sphi precision 0.01 # Sample Translation, Linear X (5mm/T, 0-750mm) Motor sx DMC2280 [params \ multichan dmc_mc2\ axis C\ units mm\ hardlowerlim 0\ hardupperlim 734\ maxSpeed 10\ maxAccel 1\ maxDecel 1\ stepsPerX [expr 25000/5]\ absEnc 1\ absEncHome $sx_home\ cntsPerX [expr 8192/5]] sx softlowerlim 0 sx softupperlim 730 sx home 0 # Sample Translation, Linear Y #Motor sy DMC2280 [params \ # multichan dmc_mc2\ # axis D\ # units mm\ # hardlowerlim -600\ # hardupperlim -300\ # maxSpeed 1\ # maxAccel 1\ # maxDecel 1\ # stepsPerX 25000\ # absEnc 1\ # absEncHome $sy_home\ # cntsPerX 8192] #sy softlowerlim -600 #sy softupperlim -300 #sy home -450 # Sample Translation, Linear Z (??/T, 300mm) Motor sz DMC2280 [params \ multichan dmc_mc2\ axis E\ units mm\ hardlowerlim 0\ hardupperlim 300.5\ maxSpeed 2\ maxAccel 1\ maxDecel 1\ stepsPerX [expr -25000*5]\ absEnc 1\ absEncHome $sz_home\ cntsPerX [expr -8192/5]] sz softlowerlim 0 sz softupperlim 300.5 sz home 0 sz speed 2 # Detector Translation, Linear Y (Not Motorized) #Motor dy DMC2280 [params \ # multichan dmc_mc2\ # axis F\ # units mm\ # hardlowerlim -595\ # hardupperlim 800\ # maxSpeed 1\ # maxAccel 1\ # maxDecel 1\ # stepsPerX 25000\ # absEnc 1\ # absEncHome $dy_home\ # cntsPerX 8192] #dy softlowerlim -595 #dy softupperlim 800 #dy home 0 # Detector Translation, Linear Z (5mm/T gearing unknown) Motor dz DMC2280 [params \ multichan dmc_mc2\ axis G\ units mm\ hardlowerlim 0\ hardupperlim 1351\ maxSpeed 5\ maxAccel 1\ maxDecel 1\ stepsPerX -25000\ absEnc 1\ absEncHome $dz_home\ cntsPerX [expr -8192/5]] dz softlowerlim 0 dz softupperlim 1351 dz home 0 ############################ # Motor Controller 3 # Motor Controller 3 # Motor Controller 3 ############################ # # Slit 1, lower Motor ss1d DMC2280 [params \ multichan dmc_mc3\ axis D\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss1d_Home] ss1d softlowerlim -25 ss1d softupperlim 95 ss1d home 0 # Slit 1, upper Motor ss1u DMC2280 [params \ multichan dmc_mc3\ axis C\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss1u_Home] ss1u softlowerlim -25 ss1u softupperlim 95 ss1u home 0 # Slit 1, left Motor ss1l DMC2280 [params \ multichan dmc_mc3\ axis A\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss1l_Home] ss1l softlowerlim -25 ss1l softupperlim 25 ss1l home 0 # Slit 1, right Motor ss1r DMC2280 [params \ multichan dmc_mc3\ axis B\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss1r_Home] ss1r softlowerlim -25 ss1r softupperlim 25 ss1r home 0 # Slit 2, lower Motor ss2d DMC2280 [params \ multichan dmc_mc3\ axis H\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss2d_Home] ss2d softlowerlim -25 ss2d softupperlim 95 ss2d home 0 # Slit 2, upper Motor ss2u DMC2280 [params \ multichan dmc_mc3\ axis G\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss2u_Home] ss2u softlowerlim -25 ss2u softupperlim 95 ss2u home 0 # Slit 2, left Motor ss2l DMC2280 [params \ multichan dmc_mc3\ axis E\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss2l_Home] ss2l softlowerlim -25 ss2l softupperlim 25 ss2l home 0 # Slit 2, right Motor ss2r DMC2280 [params \ multichan dmc_mc3\ axis F\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss2r_Home] ss2r softlowerlim -25 ss2r softupperlim 25 ss2r home 0 # Slit 3, lower Motor ss3d DMC2280 [params \ multichan dmc_mc4\ axis A\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss3d_Home] ss3d softlowerlim -25 ss3d softupperlim 95 ss3d home 0 # Slit 3, upper Motor ss3u DMC2280 [params \ multichan dmc_mc4\ axis B\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss3u_Home] ss3u softlowerlim -25 ss3u softupperlim 95 ss3u home 0 # Slit 3, Left Motor ss3l DMC2280 [params \ multichan dmc_mc4\ axis C\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss3l_Home] ss3l softlowerlim -25 ss3l softupperlim 25 ss3l home 0 # Slit 3, right Motor ss3r DMC2280 [params \ multichan dmc_mc4\ axis D\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss3r_Home] ss3r softlowerlim -25 ss3r softupperlim 25 ss3r home 0 # Slit 4, lower Motor ss4d DMC2280 [params \ multichan dmc_mc4\ axis E\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss4d_Home] ss4d softlowerlim -25 ss4d softupperlim 95 ss4d home 0 # Slit 4, upper Motor ss4u DMC2280 [params \ multichan dmc_mc4\ axis F\ units mm\ hardlowerlim [expr $vertSlitHome - $vertSlitLowRange]\ hardupperlim [expr $vertSlitHome + $vertSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss4u_Home] ss4u softlowerlim -25 ss4u softupperlim 95 ss4u home 0 # Slit 4, left Motor ss4l DMC2280 [params \ multichan dmc_mc4\ axis G\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX $slitStepRate\ motorHome $ss4l_Home] ss4l softlowerlim -25 ss4l softupperlim 25 ss4l home 0 # Slit 4, right Motor ss4r DMC2280 [params \ multichan dmc_mc4\ axis H\ units mm\ hardlowerlim [expr $horSlitHome - $horSlitLowRange]\ hardupperlim [expr $horSlitHome + $horSlitUpRange]\ maxSpeed 1\ maxAccel 1\ maxDecel 1\ stepsPerX -$slitStepRate\ motorHome $ss4r_Home] ss4r softlowerlim -25 ss4r softupperlim 25 ss4r home 0 ## Polarization Analyzer Vertical Translation, Z #Motor anzvt DMC2280 [params \ # multichan dmc_mc2\ # axis xxxx\ # units mm\ # maxSpeed 1\ # maxAccel 1\ # maxDecel 1\ # stepsPerX 25000\ # absEnc 1\ # absEncHome 7500000\ # cntsPerX 8192] #anzvt hardlowerlim xxxx #anzvt hardupperlim xxxx #anzvt softlowerlim xxxx #anzvt softupperlim xxxx #anzvt home 0 ## Polarization Analyzer Rotation #Motor anro DMC2280 [params \ # multichan dmc_mc2\ # axis xxxx\ # units mm\ # hardlowerlim -10\ # hardupperlim 10\ # maxSpeed 1\ # maxAccel 1\ # maxDecel 1\ # stepsPerX 25000\ # absEnc 1\ # absEncHome 7500000\ # cntsPerX 8192] #anro softlowerlim -10 #anro softupperlim 10 #anro home 0 #proc SplitReply { text } { # set l [split $text =] # return [lindex $l 1] #} if {1} { proc get_gap_width {m1 m2} { return [expr [SplitReply [$m1]] - [SplitReply [$m2]]] } proc set_gap_width {m1 m2 val} { set currentWidth [expr [SplitReply [$m1]] - [SplitReply [$m2]]] set diff [expr $val - $currentWidth] set newD1R [expr [SplitReply [$m1]] + $diff/2] set newD1L [expr [SplitReply [$m2]] - $diff/2] return "$m1=$newD1R,$m2=$newD1L" } proc get_gap_offset {m1 m2} { set S1 [SplitReply [$m1]] set S2 [SplitReply [$m2]] return [ expr ($S1 + $S2)/2.0 ] } proc set_gap_offset {m1 m2 val} { set S1 [SplitReply [$m1]] set S2 [SplitReply [$m2]] set currentoffset [expr ($S1 + $S2)/2.0 ] set diff [expr $val - $currentoffset] set newD1R [expr $S1 + $diff] set newD1L [expr $S2 + $diff] return "$m1=$newD1R,$m2=$newD1L" } # make_gap_motors virt_width_motor virt_offset_motor real_high_motor real_low_motor proc make_gap_motors {vm1 vm2 m1 m2} { eval "proc get_$vm1 {} { get_gap_width $m1 $m2 }" set v {$var} eval "proc set_$vm1 {var} { set_gap_width $m1 $m2 $v }" MakeConfigurableMotor $vm1 $vm1 readscript get_$vm1 $vm1 drivescript set_$vm1 publish get_$vm1 user publish set_$vm1 user eval "proc get_$vm2 {} { get_gap_offset $m1 $m2 }" set v {$var} eval "proc set_$vm2 {var} { set_gap_offset $m1 $m2 $v }" MakeConfigurableMotor $vm2 $vm2 readscript get_$vm2 $vm2 drivescript set_$vm2 publish get_$vm2 user publish set_$vm2 user } make_gap_motors ss1vg ss1vo ss1u ss1d make_gap_motors ss1hg ss1ho ss1r ss1l make_gap_motors ss2vg ss2vo ss2u ss2d make_gap_motors ss2hg ss2ho ss2r ss2l make_gap_motors ss3vg ss3vo ss3u ss3d make_gap_motors ss3hg ss3ho ss3r ss3l make_gap_motors ss4vg ss4vo ss4u ss4d make_gap_motors ss4hg ss4ho ss4r ss4l } else { #-------------------------------------------------------- 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 ############################################### #-------------------------------------------------------- proc ss3widthscript {val} { set currentWidth [expr [SplitReply [ss3r]] + [SplitReply [ss3l]]] set diff [expr $val - $currentWidth] set newD1R [expr [SplitReply [ss3r]] + $diff/2] set newD1L [expr [SplitReply [ss3l]] + $diff/2] return "ss3r=$newD1R,ss3l=$newD1L" } publish ss3widthscript user #------------------------------------------------------- proc ss3readwidth {} { return [expr [SplitReply [ss3r]] + [SplitReply [ss3l]]] } publish ss3readwidth user MakeConfigurableMotor ss3hg ss3hg drivescript ss3widthscript ss3hg readscript ss3readwidth #----------------------------------------------------- proc ss3heightscript {val} { set currentWidth [expr [SplitReply [ss3u]] + [SplitReply [ss3d]]] set diff [expr $val - $currentWidth] set newD1B [expr [SplitReply [ss3d]] + $diff/2] set newD1T [expr [SplitReply [ss3u]] + $diff/2] return "ss3d=$newD1B,ss3u=$newD1T" } publish ss3heightscript user #------------------------------------------------------- proc ss3readheight {} { return [expr [SplitReply [ss3u]] + [SplitReply [ss3d]]] } publish ss3readheight user #--------------------------------------------------------- MakeConfigurableMotor ss3vg ss3vg drivescript ss3heightscript ss3vg readscript ss3readheight #-------------------------------------------------------- proc ss3horoffsetscript {val} { set SR [SplitReply [ss3r]] set SL [SplitReply [ss3l]] set currentoffset [ expr $SR - ($SR + $SL)/2.0 ] set diff [expr $val - $currentoffset] set newd1r [expr $SR + $diff] set newd1l [expr $SL - $diff] return "ss3r=$newd1r,ss3l=$newd1l" } publish ss3horoffsetscript user #------------------------------------------------------- proc ss3readhoroffset {} { set SR [SplitReply [ss3r]] return [ expr $SR - ($SR + [SplitReply [ss3l]])/2.0 ] } publish ss3readhoroffset user #------------------------------------------------------- MakeConfigurableMotor ss3ho ss3ho drivescript ss3horoffsetscript ss3ho readscript ss3readhoroffset #-------------------------------------------------------- proc ss3vertoffsetscript {val} { set SU [SplitReply [ss3u]] set SD [SplitReply [ss3d]] set currentOffset [ expr $SU - ($SU + $SD)/2.0 ] set diff [expr $val - $currentOffset] set newD1U [expr $SU + $diff] set newD1D [expr $SD - $diff] return "ss3u=$newD1U,ss3d=$newD1D" } publish ss3vertoffsetscript user #------------------------------------------------------- proc ss3readvertoffset {} { set SU [SplitReply [ss3u]] return [ expr $SU - ($SU + [SplitReply [ss3d]])/2.0 ] } publish ss3readvertoffset user #------------------------------------------------------- MakeConfigurableMotor ss3vo ss3vo drivescript ss3vertoffsetscript ss3vo readscript ss3readvertoffset ############################################### #-------------------------------------------------------- proc ss4widthscript {val} { set currentWidth [expr [SplitReply [ss4r]] + [SplitReply [ss4l]]] set diff [expr $val - $currentWidth] set newD1R [expr [SplitReply [ss4r]] + $diff/2] set newD1L [expr [SplitReply [ss4l]] + $diff/2] return "ss4r=$newD1R,ss4l=$newD1L" } publish ss4widthscript user #------------------------------------------------------- proc ss4readwidth {} { return [expr [SplitReply [ss4r]] + [SplitReply [ss4l]]] } publish ss4readwidth user MakeConfigurableMotor ss4hg ss4hg drivescript ss4widthscript ss4hg readscript ss4readwidth #----------------------------------------------------- proc ss4heightscript {val} { set currentWidth [expr [SplitReply [ss4u]] + [SplitReply [ss4d]]] set diff [expr $val - $currentWidth] set newD1B [expr [SplitReply [ss4d]] + $diff/2] set newD1T [expr [SplitReply [ss4u]] + $diff/2] return "ss4d=$newD1B,ss4u=$newD1T" } publish ss4heightscript user #------------------------------------------------------- proc ss4readheight {} { return [expr [SplitReply [ss4u]] + [SplitReply [ss4d]]] } publish ss4readheight user #--------------------------------------------------------- MakeConfigurableMotor ss4vg ss4vg drivescript ss4heightscript ss4vg readscript ss4readheight #-------------------------------------------------------- proc ss4horoffsetscript {val} { set SR [SplitReply [ss4r]] set SL [SplitReply [ss4l]] set currentoffset [ expr $SR - ($SR + $SL)/2.0 ] set diff [expr $val - $currentoffset] set newd1r [expr $SR + $diff] set newd1l [expr $SL - $diff] return "ss4r=$newd1r,ss4l=$newd1l" } publish ss4horoffsetscript user #------------------------------------------------------- proc ss4readhoroffset {} { set SR [SplitReply [ss4r]] return [ expr $SR - ($SR + [SplitReply [ss4l]])/2.0 ] } publish ss4readhoroffset user #------------------------------------------------------- MakeConfigurableMotor ss4ho ss4ho drivescript ss4horoffsetscript ss4ho readscript ss4readhoroffset #-------------------------------------------------------- proc ss4vertoffsetscript {val} { set SU [SplitReply [ss4u]] set SD [SplitReply [ss4d]] set currentOffset [ expr $SU - ($SU + $SD)/2.0 ] set diff [expr $val - $currentOffset] set newD1U [expr $SU + $diff] set newD1D [expr $SD - $diff] return "ss4u=$newD1U,ss4d=$newD1D" } publish ss4vertoffsetscript user #------------------------------------------------------- proc ss4readvertoffset {} { set SU [SplitReply [ss4u]] return [ expr $SU - ($SU + [SplitReply [ss4d]])/2.0 ] } publish ss4readvertoffset user #------------------------------------------------------- MakeConfigurableMotor ss4vo ss4vo drivescript ss4vertoffsetscript ss4vo readscript ss4readvertoffset }