From 5bc15d13c561dbaf5f640892861954a0890bbb10 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Mon, 19 Mar 2007 14:06:13 +1100 Subject: [PATCH] calibrate S3 and S4, move to cartesian coordinates, add virtual slit motor constructors r1667 | dcl | 2007-03-19 14:06:13 +1100 (Mon, 19 Mar 2007) | 2 lines --- .../reflectometer/motor_configuration.tcl | 161 ++++++++++++++---- 1 file changed, 129 insertions(+), 32 deletions(-) diff --git a/site_ansto/instrument/reflectometer/motor_configuration.tcl b/site_ansto/instrument/reflectometer/motor_configuration.tcl index 83969522..3eaa3107 100644 --- a/site_ansto/instrument/reflectometer/motor_configuration.tcl +++ b/site_ansto/instrument/reflectometer/motor_configuration.tcl @@ -1,5 +1,5 @@ -# $Revision: 1.11 $ -# $Date: 2007-03-15 23:20:37 $ +# $Revision: 1.12 $ +# $Date: 2007-03-19 03:06:13 $ # Author: Ferdi Franceschini (ffr@ansto.gov.au) # Last revision by: $Author: dcl $ @@ -54,6 +54,11 @@ set ss1v_Gap 205.9 set ss2h_Gap 51.3 set ss2v_Gap 203.8 +set ss3h_Gap 7.5 +set ss3v_Gap 28.5 +set ss4h_Gap 12.0 +set ss4v_Gap 24.0 + set ss1r_Home [expr $ss1h_Gap/2*$slitStepRate] set ss1l_Home [expr $ss1h_Gap/2*$slitStepRate] set ss1u_Home [expr $ss1v_Gap/2*$slitStepRate] @@ -63,6 +68,15 @@ 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 @@ -345,7 +359,8 @@ Motor ss1d DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss1d_Home] ss1d softlowerlim -25 ss1d softupperlim 95 ss1d home 0 @@ -360,7 +375,8 @@ Motor ss1u DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss1u_Home] ss1u softlowerlim -25 ss1u softupperlim 95 ss1u home 0 @@ -375,7 +391,8 @@ Motor ss1l DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss1l_Home] ss1l softlowerlim -25 ss1l softupperlim 25 ss1l home 0 @@ -390,7 +407,8 @@ Motor ss1r DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss1r_Home] ss1r softlowerlim -25 ss1r softupperlim 25 ss1r home 0 @@ -405,7 +423,8 @@ Motor ss2d DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss2d_Home] ss2d softlowerlim -25 ss2d softupperlim 95 ss2d home 0 @@ -420,7 +439,8 @@ Motor ss2u DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss2u_Home] ss2u softlowerlim -25 ss2u softupperlim 95 ss2u home 0 @@ -435,7 +455,8 @@ Motor ss2l DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss2l_Home] ss2l softlowerlim -25 ss2l softupperlim 25 ss2l home 0 @@ -450,7 +471,8 @@ Motor ss2r DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss2r_Home] ss2r softlowerlim -25 ss2r softupperlim 25 ss2r home 0 @@ -465,7 +487,8 @@ Motor ss3d DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss3d_Home] ss3d softlowerlim -25 ss3d softupperlim 95 ss3d home 0 @@ -480,7 +503,8 @@ Motor ss3u DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss3u_Home] ss3u softlowerlim -25 ss3u softupperlim 95 ss3u home 0 @@ -495,7 +519,8 @@ Motor ss3l DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss3l_Home] ss3l softlowerlim -25 ss3l softupperlim 25 ss3l home 0 @@ -510,7 +535,8 @@ Motor ss3r DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss3r_Home] ss3r softlowerlim -25 ss3r softupperlim 25 ss3r home 0 @@ -525,7 +551,8 @@ Motor ss4d DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss4d_Home] ss4d softlowerlim -25 ss4d softupperlim 95 ss4d home 0 @@ -540,7 +567,8 @@ Motor ss4u DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss4u_Home] ss4u softlowerlim -25 ss4u softupperlim 95 ss4u home 0 @@ -555,7 +583,8 @@ Motor ss4l DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX $slitStepRate\ + motorHome $ss4l_Home] ss4l softlowerlim -25 ss4l softupperlim 25 ss4l home 0 @@ -570,7 +599,8 @@ Motor ss4r DMC2280 [params \ maxSpeed 1\ maxAccel 1\ maxDecel 1\ - stepsPerX $slitStepRate] + stepsPerX -$slitStepRate\ + motorHome $ss4r_Home] ss4r softlowerlim -25 ss4r softupperlim 25 ss4r home 0 @@ -616,6 +646,72 @@ ss4r home 0 # 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/2] + set newD1L [expr $S2 + $diff/2] + 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} { + uplevel #0 "proc get_$vm1 {} { get_gap_width $m1 $m2 }" + set v {$var} + set s "proc set_$vm1 {var} { set_gap_width $m1 $m2 $v }" + puts $s + uplevel #0 $s + uplevel #0 "MakeConfigurableMotor $vm1" + uplevel #0 "$vm1 readscript get_$vm1" + uplevel #0 "$vm1 drivescript set_$vm1" +uplevel #0 "publish get_$vm1 user" +uplevel #0 "publish set_$vm1 user" + + uplevel #0 "proc get_$vm2 {} { get_gap_offset $m1 $m2 }" + set v {$var} + set s "proc set_$vm2 {var} { set_gap_offset $m1 $m2 $v }" + puts $s + uplevel #0 $s + uplevel #0 "MakeConfigurableMotor $vm2" + uplevel #0 "$vm2 readscript get_$vm2" + uplevel #0 "$vm2 drivescript set_$vm2" +uplevel #0 "publish get_$vm2 user" +uplevel #0 "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]]] @@ -839,20 +935,20 @@ ss3vg readscript ss3readheight #-------------------------------------------------------- proc ss3horoffsetscript {val} { - set sr [splitreply [ss3r]] - set sl [splitreply [ss3l]] - set currentoffset [ expr $sr - ($sr + $sl)/2.0 ] + 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] + 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 ] + set SR [SplitReply [ss3r]] + return [ expr $SR - ($SR + [SplitReply [ss3l]])/2.0 ] } publish ss3readhoroffset user @@ -929,20 +1025,20 @@ ss4vg readscript ss4readheight #-------------------------------------------------------- proc ss4horoffsetscript {val} { - set sr [splitreply [ss4r]] - set sl [splitreply [ss4l]] - set currentoffset [ expr $sr - ($sr + $sl)/2.0 ] + 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] + 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 ] + set SR [SplitReply [ss4r]] + return [ expr $SR - ($SR + [SplitReply [ss4l]])/2.0 ] } publish ss4readhoroffset user @@ -974,3 +1070,4 @@ publish ss4readvertoffset user MakeConfigurableMotor ss4vo ss4vo drivescript ss4vertoffsetscript ss4vo readscript ss4readvertoffset +}